我们当前的实现通过 REST API 对 Neo4j 进行了所有调用。我们正在通过 neo4j-java-driver 替换部分代码。我们遇到了一些性能问题,我们试图通过 Cypher 优化和将负载从 Neo4j DB 转移到应用层来解决这些问题。使用 java 驱动程序,它会进一步减少 Neo4j DB 的负载,还是仅仅有助于减少网络延迟?
2 回答
驱动程序在某些方面更理想。1.5 版也将允许异步操作。下一个主要版本还将提供背压和反应操作。
它不再需要生成 JSON,而是流式传输二进制协议。所以这可能会减少一点负载。我不确定,它会产生很大的影响。
最好自己量一下。
我做了一些测试,下面是结果,这不是很令人鼓舞
具有 16GB RAM、100K 节点的 Windows,本地连接到 Neo4j。
字符串 defaultNodes = "1000";
if(args.length > 0) {
defaultNodes = args[0];
}
String query = "MATCH(n) return n LIMIT "+defaultNodes;
long time = System.currentTimeMillis();
session.run(query);
System.out.println("With bolt for LIMIT "+defaultNodes+" -- "+(System.currentTimeMillis() - time));
time = System.currentTimeMillis();
Neo4jRESTHandler dbHandler = new Neo4jRESTHandler();
dbHandler.executeCypherQuery(query);
System.out.println("With REST for LIMIT "+defaultNodes+" -- "+(System.currentTimeMillis() - time));
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.jar
LIMIT 1000 -- 131 带螺栓
使用 REST 限制 1000 -- 162
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.jar
带螺栓 LIMIT 1000 -- 143
使用 REST 限制 1000 -- 156
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.jar 10000
带螺栓 LIMIT 10000 -- 377
使用 REST 限制 10000 -- 156
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.jar 10000
带螺栓 LIMIT 10000 -- 335
使用 REST 限制 10000 -- 157
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.jar
带螺栓 LIMIT 1000 -- 104
使用 REST 限制 1000 -- 161
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.jar 25000
带螺栓 LIMIT 25000 -- 595
使用 REST 限制 25000 -- 155
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.jar 25000
带螺栓 LIMIT 25000 -- 544
使用 REST 限制 25000 -- 151