我使用批处理导入程序脚本导入了nodes.tsv(350MB,18M行,3列)和rels.tsv(5GB,150M行,2列)。 这些是我的batch.properties文件条目
我在ne04j.properties中打开了自动更新和自动索引,如下所示
我在64位Windows服务器上使用neo4j 2.2版本,该服务器具有1 TB SSD和256 GB RAM。 批量导入器和neo4j服务器的配置是什么,我应该用于最大查询和数据加载性能? 此ex:的查询在浏览器中超时
MATCH ()-[r:BELONGS_TO]->() RETURN r
答案 0 :(得分:2)
如果你有那么多RAM:
您的内存映射配置对于2.2
是错误的仅使用此设置: `dbms.pagecache.memory = 20G``
然后在neo4j-wrapper.conf中为neo4j提供24G堆
使用可以更好地扩展的Neo4j企业。
禁用自动索引,它们不会用于您正在执行的操作。
您的查询对任何用例都没有意义:
MATCH ()-[r:BELONGS_TO]->() RETURN r
亚秒图形查询始终从一组具体的起始点开始(通过索引查找检索),然后从这些起点遍历。
像你这样的全局扫描查询只会将所有数据存储在内存中,并且无效地处理它。
ESP。如果您返回如此多的数据,则无法承担亚秒级性能。仅数据量就会扼杀它。
因此,找出你想要开始的标签+属性值,然后编写从这些起点遍历的查询。
如果你想在你正在做的事情上得到亚秒,你必须转到Java API并在那里聚合,例如使用服务器扩展:
int counter=0;
for (Relationship r : GlobalGraphOperations.at(db)) {
if (r.hasType(Types.BELONGS_TO)) counter++;
}
return counter;
答案 1 :(得分:1)
有数百万个节点,无论你做什么,查询都可能很慢,但是如果有可用的内存量,那么这可能不是什么大问题。这是计算内存设置的好指南:
http://neo4j.com/developer/guide-performance-tuning/
在您正在播放时,我会在服务器上设置查询超时,以便您的查询不会堵塞服务器并迫使您需要重新启动它:
http://neo4j.com/docs/stable/server-configuration.html
您可以尝试从查询的LIMIT
条开始,以便了解LIMIT增加时性能如何降低。
如果您可以找到一种方法来限制基于节点选择的查询,这也会有所帮助,特别是如果您可以通过标签或标签/属性组合(您可以索引)来执行此操作。
最后,我会尝试在网络控制台中使用EXPLAIN
来了解您的查询将如何执行:
http://neo4j.com/docs/2.2.0/how-do-i-profile-a-query.html
此外,您可以使用PROFILE
,但这会运行查询,因此您需要在那里更加小心。你也可以在这里使用LIMIT
来玩,看看事情是如何运作的