gpt4 book ai didi

graph - 在 Neo4J 中存储多个图形

转载 作者:行者123 更新时间:2023-12-03 14:50:48 25 4
gpt4 key购买 nike

我有一个将关系信息存储在 MySQL 表中的应用程序(contact_id、other_contact_id、strength、recorded_at)。如果我需要做的只是显示联系人的关系,或者甚至生成两个联系人的相互联系人列表,那么这很好。

但现在我需要生成这样的统计数据:“2011 年 1 月强度为 3 或更高的双向连接总数是多少”或(假设每个联系人都是一个组的一部分)“哪个组的连接数最多到其他团体等。

我很快发现用于生成这些统计数据的 SQL 变得非常笨拙。

所以我写了一个脚本,对于任何给定的日期,它都会在内存中生成一个图表。然后我可以针对该图表运行任何我想要的统计数据。更容易理解,总的来说,性能也更高——除了生成图形部分。

我的下一个想法是缓存这些图,这样我就可以在需要运行新统计数据时调用它们(或生成稍后的图:例如,对于今天的图,我采用昨天的图并应用自昨天以来发生的任何更改)。我尝试了 memcached,它运行良好,直到图形增长 > 1 MB。

所以现在我正在考虑使用像 Neo4J 这样的图形数据库。

唯一的问题是,我没有只有一张图。或者我这样做,但它会随着时间的推移而变化,我需要能够使用不同的引用时间来查询它。

那么,我可以:

  • 在 Neo4J 中存储多个图形并分别重新检索/交互?然后我会为每个日期创建和存储单独的社交图。

  • 或者
  • 向每条边添加有效的时间戳和从时间戳并适本地过滤图形:因此,如果我想要“5 月 1 日”的图形,我将只遵循“5 月 1 日”之前创建的两个节点之间的最新边(如果所有边5 月 1 日之后创建,那么这些节点将不会连接)。

  • 我对图形数据库很陌生,因此将不胜感激任何帮助/指针/提示。

    最佳答案

    现在,您只能在单个 Neo4j 实例中存储一个图数据库,但是这个图数据库可以包含任意数量的不同子图。您只需要在执行全局操作(如索引查询)时记住这一点,但在那里您可以执行包含时间戳属性的复合查询,以限制结果。

    一种方法是,正如您所说,将时间信息添加到边以表示给定日期的图形结构,然后您可以遍历当时的图形结构。

    引用节点在 Neo4j 中有不同的含义。

    每天使用类别节点(并链接它们并聚合它们以获得更高级别的时间跨度)是对节点进行分类而不是索引属性的更图形化的方式。 (实际上,这些是图内索引,您可以轻松地将其包含在遍历和图查询中)。

    只要您只对不同的时间结构感兴趣,就不必复制节点。如果您的节点也不同(例如更改属性,您可以复制它们,从而有效地创建不同的子图)或在每个节点上创建一个连接的历史节点列表,其中仅包含更改(或完整快照,取决于您的要求) .

    您的域听起来非常适合图形数据库。如果您有更多更详细的问题,请随时加入 Neo4j mailing list .

    关于graph - 在 Neo4J 中存储多个图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957907/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com