Neo4j 中亚秒级查询延迟的最佳配置是什么?
What's the optimum configuration for sub second query latency in Neo4j?
我使用批量导入脚本导入了nodes.tsv(350MB,18M 行,3 列)和rels.tsv(5GB,150M 行,2 列)。
这些是我的 batch.properties 文件条目
- • neostore.nodestore.db.mapped_memory=250M
• neostore.relationshipstore.db.mapped_memory=1000M
• neostore.relationshipgroupstore.db.mapped_memory=10M
• neostore.propertystore.db.mapped_memory=500M
• neostore.propertystore.db.strings.mapped_memory=500M
• neostore.propertystore.db.arrays.mapped_memory=215M
• dump_configuration=真
我在ne04j.properties中开启了自动更新和自动索引如下
- • allow_store_upgrade=真• node_auto_indexing=真
• node_keys_indexable=姓名、职务 • relationship_auto_indexing=true
• relationship_keys_indexable=sent_date,has_read
我在 64 位 windows 服务器上使用 neo4j 2.2 版本,该服务器具有 1 TB SSD 和 256GB 内存。
我应该使用什么来获得最大查询和数据加载性能的批量导入器和 neo4j 服务器的配置?
ex: 的查询在浏览器中超时
MATCH ()-[r:BELONGS_TO]->() RETURN r
有数百万个节点,无论您做什么,查询都可能会很慢,但根据您可用的内存量,这可能不是什么大问题。这是计算内存设置的好指南:
http://neo4j.com/developer/guide-performance-tuning/
在你玩的时候,我会在服务器上设置查询超时,这样你的查询就不会阻塞服务器并迫使你需要重新启动它:
http://neo4j.com/docs/stable/server-configuration.html
您可以尝试从查询的 LIMIT
子句开始,这样您就可以了解性能如何随着 LIMIT 的增加而降低。
如果您可能找到一种方法来限制基于节点选择的查询,那也会有所帮助,特别是如果您可以通过标签或 label/property 组合(您可以索引)来做到这一点.
最后,我会尝试在 Web 控制台中使用 EXPLAIN
来了解您的查询将如何执行:
http://neo4j.com/docs/2.2.0/how-do-i-profile-a-query.html
您也可以使用 PROFILE
,尽管这会 运行 查询,因此您需要更加小心。您也可以在这里使用 LIMIT
来玩一下,看看效果如何
如果你有那么多 RAM:
您的内存映射配置对于 2.2 是错误的
仅使用此设置:
`dbms.pagecache.memory=20G``
然后在neo4j中给neo4j提供24G堆-wrapper.conf
使用扩展性更好的 Neo4j 企业版。
禁用它们不用于您正在做的事情的自动索引。
您的查询对任何用例都没有意义:
MATCH ()-[r:BELONGS_TO]->() RETURN r
亚秒级图形查询总是从一组具体的起点(通过索引查找检索)开始,然后从这些起点遍历。
像您这样的全局扫描查询只会将所有数据提取到内存中并且处理起来效率低下。
Esp。如果你 return 这么多数据,你就不能假设亚秒级的性能。光是数据量就秒杀了
所以找出一个标签 + 属性-你想要开始的值,然后编写从这些起点遍历的查询。
如果你想在你正在做的事情上有亚秒级,你必须去 Java API 并在那里聚合,例如使用服务器扩展名:
int counter=0;
for (Relationship r : GlobalGraphOperations.at(db)) {
if (r.hasType(Types.BELONGS_TO)) counter++;
}
return counter;
我使用批量导入脚本导入了nodes.tsv(350MB,18M 行,3 列)和rels.tsv(5GB,150M 行,2 列)。 这些是我的 batch.properties 文件条目
- • neostore.nodestore.db.mapped_memory=250M • neostore.relationshipstore.db.mapped_memory=1000M • neostore.relationshipgroupstore.db.mapped_memory=10M • neostore.propertystore.db.mapped_memory=500M • neostore.propertystore.db.strings.mapped_memory=500M • neostore.propertystore.db.arrays.mapped_memory=215M • dump_configuration=真
我在ne04j.properties中开启了自动更新和自动索引如下
- • allow_store_upgrade=真• node_auto_indexing=真 • node_keys_indexable=姓名、职务 • relationship_auto_indexing=true • relationship_keys_indexable=sent_date,has_read
我在 64 位 windows 服务器上使用 neo4j 2.2 版本,该服务器具有 1 TB SSD 和 256GB 内存。 我应该使用什么来获得最大查询和数据加载性能的批量导入器和 neo4j 服务器的配置? ex: 的查询在浏览器中超时
MATCH ()-[r:BELONGS_TO]->() RETURN r
有数百万个节点,无论您做什么,查询都可能会很慢,但根据您可用的内存量,这可能不是什么大问题。这是计算内存设置的好指南:
http://neo4j.com/developer/guide-performance-tuning/
在你玩的时候,我会在服务器上设置查询超时,这样你的查询就不会阻塞服务器并迫使你需要重新启动它:
http://neo4j.com/docs/stable/server-configuration.html
您可以尝试从查询的 LIMIT
子句开始,这样您就可以了解性能如何随着 LIMIT 的增加而降低。
如果您可能找到一种方法来限制基于节点选择的查询,那也会有所帮助,特别是如果您可以通过标签或 label/property 组合(您可以索引)来做到这一点.
最后,我会尝试在 Web 控制台中使用 EXPLAIN
来了解您的查询将如何执行:
http://neo4j.com/docs/2.2.0/how-do-i-profile-a-query.html
您也可以使用 PROFILE
,尽管这会 运行 查询,因此您需要更加小心。您也可以在这里使用 LIMIT
来玩一下,看看效果如何
如果你有那么多 RAM:
您的内存映射配置对于 2.2 是错误的
仅使用此设置: `dbms.pagecache.memory=20G``
然后在neo4j中给neo4j提供24G堆-wrapper.conf
使用扩展性更好的 Neo4j 企业版。
禁用它们不用于您正在做的事情的自动索引。
您的查询对任何用例都没有意义:
MATCH ()-[r:BELONGS_TO]->() RETURN r
亚秒级图形查询总是从一组具体的起点(通过索引查找检索)开始,然后从这些起点遍历。
像您这样的全局扫描查询只会将所有数据提取到内存中并且处理起来效率低下。
Esp。如果你 return 这么多数据,你就不能假设亚秒级的性能。光是数据量就秒杀了
所以找出一个标签 + 属性-你想要开始的值,然后编写从这些起点遍历的查询。
如果你想在你正在做的事情上有亚秒级,你必须去 Java API 并在那里聚合,例如使用服务器扩展名:
int counter=0;
for (Relationship r : GlobalGraphOperations.at(db)) {
if (r.hasType(Types.BELONGS_TO)) counter++;
}
return counter;