3

我正在使用批处理插入器创建一个包含大约 10 亿个节点和 100 亿个关系的数据库。我在多个地方读到过,最好按 min(from, to) 的顺序对关系进行排序(我没有这样做),但我还没有理解为什么这种做法是最佳的。我原本以为这只是帮助插入速度,但是当我打开数据库时,遍历非常慢。我意识到这可能有很多原因,特别是对于这种大小的数据库,但我希望能够排除我存储关系的方式。

主要问题:以非常“随机”的顺序插入关系是否会因为它们将存储在磁盘上的位置而降低遍历速度?我在想,也许当它试图遍历节点时,关系太分散了。我希望有人能告诉我是否会这样。

更新

  • 用例几乎是基本的 Neo4j 朋友之友示例,使用 Cypher 通过 REST API 进行查询。

  • 每个节点(人)都是独一无二的,并且对于他们认识的人有一堆“知道”关系。虽然我有 10 亿个节点,但所有 100 亿个关系都来自大约 3000 万个节点。因此,对于我在查询中使用的任何起始节点,它平均有大约 330 个关系来自它。

  • 在我最初的测试中,即使是获得 4 个无序好友的结果也非常慢(平均 100 多秒)。当然,在为每个查询预热缓存之后,它相当快,但是图表非常随机,我无法将整个关系存储在内存中。

我的一些系统详细信息,如果需要的话: - Neo4j 1.9.RC1 - 在 Linux 服务器上运行,128gb 内存,8 核机器,非 SSD HD

4

1 回答 1

1

我还没有大规模使用 Neo4J,但据我所知,这不会对速度产生太大影响。您能否提供任何说明插入顺序的链接。

在这种情况下,关系是否被缓存有什么关系。在缓存相当填充之前,性能将处于较慢的一侧。您还应该在创建索引后立即设置适当的缓存大小。

您应该阅读有关 neo4j 性能的链接

如果您尚未阅读有关批量插入的 Neo4j 文档和这些 SO 问题以获取有关批量插入帮助 请阅读它们。

于 2013-05-05T05:59:12.993 回答