繁体   English   中英

获得所有Neo4j节点和关系的最快方法?

[英]Fastest way to get all Neo4j nodes and relationships?

将所有无序节点和关系从正在运行的Neo4j 2.x服务器插入程序的最快方法是什么?

在我的用例中,Cypher MATCH n RETURN n太慢了(例如,我们要提取> 10M个节点)。

shell命令dump似乎很有趣,但是需要一些技巧才能从源代码调用。 有没有可用的dump基准测试?

任何建议表示赞赏!

- 编辑 -

我以MATCH n RETURN n SKPI 0 LIMIT 50000类的查询执行本地Neo4j服务器的REST端点(因此没有网络效应)的查询。 我的数据库是Neo4j 2.0.3,其中填充了100k个具有1个整数属性且没有关系的节点。 计算机:读取速度为1.3+ Mo / s的SSD和CPU i7 1.6Ghz,JVM -Xmx2g。 恢复5万个节点大约需要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

您想要的是启用HTTP块编码 (也称为Steaming),以使Neo4j可以开始向您发送结果而不将其全部保存在内存中。 您可以通过添加Accept: application/json;stream=true HTTP请求标头来实现。

这要求达到目的:

curl -i -o streamed.txt -XPOST \
  -d'{ "query":"MATCH n RETURN n" }' \
  -H 'accept:application/json;stream=true' \
  -H 'content-type:application/json' \
  'http://localhost:7474/db/data/cypher'

附带说明一下,如果您想在接收全部内容之前开始解析响应(以避免填满内存/硬盘),则可能需要研究JSON流解析

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM