Neo4j 性能 Neo4j REST API 与 Neo4j Java 驱动程序
Neo4j performance Neo4j REST API Vs Neo4j Java Driver
我们当前的实现通过 REST API 对 Neo4j 进行了所有调用。我们正在通过 neo4j-java-driver 替换一些代码。
我们遇到了一些性能问题,我们试图通过 Cypher 优化和将负载从 Neo4j DB 转移到应用层来解决这些问题。
使用 java 驱动程序,它会进一步减少 Neo4j DB 的负载还是只会有助于减少网络延迟?
驱动程序在某些方面更优化了一些。 1.5 版也将允许
异步操作。下一个大版本也会提供背压和响应式操作。
它不必再生成 JSON,但会流式传输二进制协议。所以这可能会减少一些负载。我不确定,它会产生很大的影响。
最好自己测一下。
我做了一些测试,结果如下,不太令人鼓舞
Windows 16GB 内存,10 万个节点,本地连接到 Neo4j。
String defaultNodes = "1000";
if(args.length > 0) {
defaultNodes = args[0];
}
字符串查询="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 for LIMIT 1000 -- 162
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja
r
LIMIT 1000 带螺栓 -- 143
LIMIT 1000 的 REST -- 156
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja
r 10000
带螺栓用于 LIMIT 10000 -- 377
REST 为 LIMIT 10000 -- 156
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja
r 10000
带螺栓用于 LIMIT 10000 -- 335
REST 为 LIMIT 10000 -- 157
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja
r
带螺栓用于 LIMIT 1000 -- 104
LIMIT 1000 的 REST -- 161
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja
r 25000
带螺栓用于 LIMIT 25000 -- 595
REST 为 LIMIT 25000 -- 155
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja
r 25000
带螺栓用于 LIMIT 25000 -- 544
REST 为 LIMIT 25000 -- 151
我们当前的实现通过 REST API 对 Neo4j 进行了所有调用。我们正在通过 neo4j-java-driver 替换一些代码。 我们遇到了一些性能问题,我们试图通过 Cypher 优化和将负载从 Neo4j DB 转移到应用层来解决这些问题。 使用 java 驱动程序,它会进一步减少 Neo4j DB 的负载还是只会有助于减少网络延迟?
驱动程序在某些方面更优化了一些。 1.5 版也将允许 异步操作。下一个大版本也会提供背压和响应式操作。
它不必再生成 JSON,但会流式传输二进制协议。所以这可能会减少一些负载。我不确定,它会产生很大的影响。
最好自己测一下。
我做了一些测试,结果如下,不太令人鼓舞
Windows 16GB 内存,10 万个节点,本地连接到 Neo4j。
String defaultNodes = "1000";
if(args.length > 0) {
defaultNodes = args[0];
}
字符串查询="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 for LIMIT 1000 -- 162
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja r
LIMIT 1000 带螺栓 -- 143
LIMIT 1000 的 REST -- 156
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja r 10000
带螺栓用于 LIMIT 10000 -- 377
REST 为 LIMIT 10000 -- 156
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja r 10000
带螺栓用于 LIMIT 10000 -- 335
REST 为 LIMIT 10000 -- 157
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja r
带螺栓用于 LIMIT 1000 -- 104
LIMIT 1000 的 REST -- 161
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja r 25000
带螺栓用于 LIMIT 25000 -- 595
REST 为 LIMIT 25000 -- 155
C:\Migration>java -jar neo4jtestexamples-1.0.0-SNAPSHOT-jar-with-dependencies.ja r 25000
带螺栓用于 LIMIT 25000 -- 544
REST 为 LIMIT 25000 -- 151