gpt4 book ai didi

graph-databases - 处理路径中多个中间节点的最佳方法?

转载 作者:行者123 更新时间:2023-12-01 12:41:44 25 4
gpt4 key购买 nike

基本上我有如下场景:

vertex --- vertex* --- vertex

但是顶点*在路径中的这一点可能有可变数量的顶点

vertex --- vertex1 --- vertex
vertex --- vertex2 --- vertex
vertex --- vertexN --- vertex

我不知道是什么N直到我遍历到这个顶点。当我第一次遍历到这个节点时,任意函数将能够确定这个顶点在路径中的这个点有多少个实例。

我只记录N吗?作为属性(property)还是我创建额外的N具有增量值的中间顶点的路径数?

一个真实世界的例子是,一个文件夹数量未知的文件目录(直到你打开父目录),每个文件夹包含一个文件,你需要遍历每个文件路径。

更新:

这是我期望的:

(第一次遍历,遇到一个有特殊属性的顶点*)

A --- X* --- B 

生成相同 X 顶点的附加实例,连接到父 A 和子 B。

A --- X1 --- B
\--- X2 --/
\-- X3 -/

   A --- X1 --- B
A --- X2 --- B
A --- X3 --- B

这样遍历就会发生

A, X1, B
A, X2, B
A, X3, B

X顶点实例彼此完全相同,然后它们具有索引整数。实例数由第一次初始遍历 (A, X*, B) 决定。 X* 可能会生成 3 个、50 个或 100 个额外的实例。

对于存储,我的意思是将这个索引值存储在 X* 并每次递增它直到最大整数 N到达了。所以对于上面的例子,它的起始索引为 1,最大值为 3。这将绕过在中间插入额外顶点并将其连接到 A 和 B 的需要。但是,我不确定这是否是最适合我的情况,我需要遍历每条生成的路径。

最佳答案

所以我想现在我得到了你的用例。

你是对的,你基本上必须选择:

  1. 用其他顶点替换顶点“x*”:
    • 首先我会执行一个简单的查询,搜索所有具有特殊属性的顶点(我不会在这一步使用遍历,但这个特殊属性的索引应该更快)
    • 其次,我会用相应数量的真实顶点替换交易中的所有顶点(如果您想再次执行此查询,请记住删除“x*”顶点)
    • 第三,当查询结构由图形显示时,您可以使用所有内置的遍历语句。

临:

  • 易于实现。
  • 数据完全符合您的预期,无需解析属性,如果您的应用程序中有 5 条从 A 到 B 的路径,则数据库中存储了 5 条从 A 到 B 的路径。
  • 可以在没有的情况下大量使用内置功能(ArangoDB 期望默认情况下所有边都存在)

缺点:

  • 冗余数据(X1 - Xn 是彼此的副本)因此,如果您在此处存储一些数据,则必须注意保持同步
  • 更高的内存消耗。
  • 图中的更多路径 => 更多遍历步骤
  • 性能会低于选项 2。

选项 2:仅存储一个中间顶点并利用特殊属性

  1. 只存储顶点X*
  2. 实现您自己的访问者,检查特殊属性(根据您的描述,我认为您想在顶点 B 处检查路径 (X*) 上的最后一个顶点是否具有特殊属性)。如果是,则将 (A X B) 的值添加到结果中 n 次。

临:

  • 表现出色
  • 无冗余

缺点:

  • 您必须在应用程序中实现将 X* 替换为 X1 - Xn 的逻辑
  • 您必须实现自己的访问者
  • 您的域模型与数据库中的内容略有不匹配

我会根据您的数据集的大小做出决定。如果你有一个非常小的数据集并且冗余/性能不是问题,我会选择选项 1,它更简单,更省力。如果您有一个大型数据集并且需要高性能,我想选项 2 会更好。

希望对您有所帮助 ;)

关于graph-databases - 处理路径中多个中间节点的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23892904/

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