我正在使用批处理插入器创建一个包含大约 10 亿个节点和 100 亿个关系的数据库。我在多个地方读到过,最好按 min(from, to) 的顺序对关系进行排序(我没有这样做),但我还没有理解为什么这种做法是最佳的。我原本以为这只是帮助插入速度,但是当我打开数据库时,遍历非常慢。我意识到这可能有很多原因,特别是对于这种大小的数据库,但我希望能够排除我存储关系的方式。
主要问题:以非常“随机”的顺序插入关系是否会因为它们将存储在磁盘上的位置而降低遍历速度?我在想,也许当它试图遍历节点时,关系太分散了。我希望有人能告诉我是否会这样。
更新:
用例几乎是基本的 Neo4j 朋友之友示例,使用 Cypher 通过 REST API 进行查询。
每个节点(人)都是独一无二的,并且对于他们认识的人有一堆“知道”关系。虽然我有 10 亿个节点,但所有 100 亿个关系都来自大约 3000 万个节点。因此,对于我在查询中使用的任何起始节点,它平均有大约 330 个关系来自它。
在我最初的测试中,即使是获得 4 个无序好友的结果也非常慢(平均 100 多秒)。当然,在为每个查询预热缓存之后,它相当快,但是图表非常随机,我无法将整个关系存储在内存中。
我的一些系统详细信息,如果需要的话: - Neo4j 1.9.RC1 - 在 Linux 服务器上运行,128gb 内存,8 核机器,非 SSD HD