在改进密码查询的过程中,我意识到起始节点的查找时间从 ~200ms 到 ~500ms(从 web 管理数据浏览器工具报告)。查找在第一次运行时需要更多时间,最坏情况超过 1 秒。
我用来测试的查询就像这样简单:
START user=node:USERS(id={user_id})
RETURN user.id
该图非常大:现在大约有 2800 万用户节点(它是唯一的一种节点)。但即使在这种情况下,查找时间似乎也很慢。
使用 Neography 使用冷图查询 REST API 的基准测试报告了以下第一次命中:
user system total real
0.060000 0.010000 0.070000 ( 0.959000)
对于后续命中,时间低于 200 毫秒:
user system total real
0.010000 0.000000 0.010000 ( 0.173000)
我在 neo4j-shell 中测试了相同的查询,结果如下:
neo4j-sh (?)$ start n=node:USERS(id='xxxxxxxxxxxxxxx') return n;
+--------------------------------------------+
| n |
+--------------------------------------------+
| Node[31120999]{id:"xxxxxxxxxxxxxxx", ...} |
+--------------------------------------------+
1 row
252 ms
neo4j-sh (?)$ start n=node:USERS(id='xxxxxxxxxxxxxxx') return n;
+--------------------------------------------+
| n |
+--------------------------------------------+
| Node[31120999]{id:"xxxxxxxxxxxxxxx", ...} |
+--------------------------------------------+
1 row
34 ms
此外,如果它有帮助:
- Neo 版本是 1.9.2
- 该图占用大约 62GB 的磁盘空间(不是 SSD)。
- 当前最大堆大小为 6GB。
- 这台机器有 8GB 的 RAM。
内存映射设置设置为以下值(图中没有数组属性):
neostore.nodestore.db.mapped_memory=768M
neostore.relationshipstore.db.mapped_memory=768M
neostore.propertystore.db.mapped_memory=1024M
neostore.propertystore.db.strings.mapped_memory=1024M
neostore.propertystore.db.arrays.mapped_memory=130M
对于这种大小的图表,这个查找时间是否正常?如何改进?