微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Neo4j 中对大型多图数据库进行建模

如何解决在 Neo4j 中对大型多图数据库进行建模

我正在尝试使用 neo4j 对大型多重图进行建模。

该图有大约 600 万个节点和大约。 500M 关系。该图相对稀疏,除了少数几块非常密集,有很多多条边(从 100 到 1000 条重复边)。

由于超级节点聚集在一个关系网中,因此许多关系使其难以有效地查询和可视化。我正在考虑重构与节点的关系,但我不确定如何去做。

选项 1:将聚合值提取到节点并对(聚合)关系 (a)-[r:REL]->(b)(a)-[:REL_AGG_PART1]->(:REL_AGG_NODE{f1:r.f1,...})-[:REL_AGG_PART2]->(b)

进行操作
  • 优点:可以索引节点属性,大大加快查询速度
  • 缺点:聚合关系的可视化会导致不必要的连接节点,但这可以通过 apoc 轻松缓解

选项 2: 提取中间节点的所有关系 + 聚合的选项 1

  • 优点:单个关系的索引(每个关系都有一个时间戳,这可以实现高效的时间切片,这是一个很大的优势)
  • 缺点:
    • 这会创建许多新节点并使此类关系的可视化变得非常困难(但可以通过一些可视化库进行扩充 - 无论如何我都打算这样做)
    • 我不确定查询性能,因为每个关系查询现在都需要两跳 MATCH (n) -[:REL_PART1]->(:REL_NODE)-[:REL_PART2]->(m)

选项 3:将多个关系提取为聚合关系

  • 优点:易于工作和可视化
  • 缺点:没有索引且关系非常复杂

是否也值得将聚合数据从节点重构到辅助节点,使得节点携带查询中经常使用的数据,但更复杂的数据保存在:FULL_DATA_NODE中?

例如重构 (a)-[r:REL]->(b)(a)-[:REL_AGG_PART1]->(n:REL_AGG_NODE{minimal_fieldset})-[:REL_AGG_PART2]->(b)(n)-[:FULL_DATA]->(m:FULL_DATA_NODE{full aggregated data})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。