Neo4j检索优化和Java项目配置
1. Neo4j 检索速度慢通过创建索引解决。Neo4j索引原理参考:neo4j - 查询效率的几种优化思路1.1 python先阅读(https://blog.csdn.net/MaoziYa/article/details/114195824)代码:graph.run(‘CREATE INDEX ON : PersonTest(name)’)钟爱python,操作方便叻!1.2 neo4j-s
·
1. Neo4j 检索速度慢
通过创建索引解决。
Neo4j索引原理参考:neo4j - 查询效率的几种优化思路
1.1 python
- 先阅读(https://blog.csdn.net/MaoziYa/article/details/114195824)
- 代码:graph.run(‘CREATE INDEX ON : PersonTest(name)’)
钟爱python,操作方便叻!
1.2 neo4j-shell + cypher-shell
因为使用的是Linux远程服务,所有没有直接访问浏览器创建和修改索引。
- bin/neo4j-shell:查看当前创建的索引及状态
schema
# Indexes
# ON :企业名称(企业名称) ONLINE
# ON :企业名称(name) ONLINE
#
# No constraints
# 注意索引应当是 ONLINE 状态才生效
- bin/cypher-shell:创建索引
# 输入密码后
# (1)创建
CREATE INDEX ON : 企业名称(登记机关);
# 返回信息:
# 0 rows available after 38 ms, consumed after another 0 ms
# Added 1 indexes
# (2)删除
DROP INDEX ON :企业名称(登记机关);
# 返回信息:
# 0 rows available after 5 ms, consumed after another 0 ms
# Removed 1 indexes
# 配合neo4j-shell查看索引是否创建成功
2. springCloud+Neo4j
2.1 检索速度慢
当使用接口访问Neo4j查询数据时,用时非常长, 大概1400+ms。
我排查了几次数据库索引构建,发现索引构建正常。
在本地maven一个简单的项目计算耗时时,发现driver的构建就需要1300+ms,实际检索语句run以及检索结果处理的时间只有57ms。
12:40:07.007 [main] INFO org.test.neo.App - Neo4jDao process time:1329
12:40:07.067 [main] INFO org.test.neo.App - Neo4jDao process time:57
我这该死的编码坏习惯,没有将neo4jUtil单独封装成类,而是直接写入到dao中。导致检索速度过慢……
2.3 Java Neo4j Driver&Session
- 建立连接 Driver driver = GraphDatabase.driver()
- 创建会话 Session session = driver.session()
项目中,Util返回session的初始化配置,接口的吞吐量相对大些。
2.2 压力测试中Neo4j报错
java.lang.IllegalStateException: Existing open connection detected
at org.neo4j.driver.internal.NetworkSession.lambda$acquireConnection$27(NetworkSession.java:447)
at java.util.concurrent.CompletableFuture.uniCompose(CompletableFuture.java:966)
at java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:940)
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1975)
at org.neo4j.driver.internal.util.Futures.lambda$asCompletionStage$0(Futures.java:74)
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511)
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:485)
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise.access$000(DefaultPromise.java:33)
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.DefaultPromise$1.run(DefaultPromise.java:435)
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
at org.neo4j.driver.internal.shaded.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:463)
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
at org.neo4j.driver.internal.shaded.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
未解决。
更多推荐
所有评论(0)