将所有无序节点和关系从正在运行的 Neo4j 2.x 服务器获取到程序中的最快方法是什么?
Cypher MATCH n RETURN n
对于我的用例来说太慢了(假设我们有 >10M 的节点要提取)。
shell 命令 dump
看起来很有趣,但它需要一些技巧才能从源代码中调用。 dump
有可用的基准吗?
任何建议表示赞赏!
--编辑--
我认为本地 Neo4j 服务器的 REST 端点(因此没有网络效应)执行查询,查询类似于 MATCH n RETURN n SKPI 0 LIMIT 50000
。我的数据库是 Neo4j 2.0.3,填充有 100k 个具有 1 个整数属性的节点,并且没有任何关系。计算机:SSD,读取速度 1.3+ Mo/s,CPU i7 1.6Ghz,JVM -Xmx2g。检索 50k 个节点大约需要 4 秒:
curl -s -w %{time_total} -d"query=match n return n limit 50000" -D- -onul: http://localhost:7474/db/data/cypher
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Access-Control-Allow-Origin: *
Content-Length: 63394503
Server: Jetty(9.0.z-SNAPSHOT)
4,047
最佳答案
获取所有节点的最快方法是运行嵌入式 Neo4j。您通过 Cypher 使用 REST API 看到的性能下降很大程度上是由于网络上的数据传输限制造成的。
使用方法getAllNodes
,您可以检索图中的所有节点,而无需通过网络传输数据。
http://api.neo4j.org/current/org/neo4j/tooling/GlobalGraphOperations.html
try ( Transaction tx = db.beginTx(); ) {
Iterable<Node> allNodes = db.getAllNodes();
tx.success();
}
请注意,从 2.1.2 开始,此方法现已弃用。
要了解有关 Neo4j 嵌入式的更多信息,请查看文档。
http://docs.neo4j.org/chunked/stable/tutorials-java-embedded.html
关于performance - 获取所有 Neo4j 节点和关系的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370393/