OrientDB 边缘从混乱

OrientDB Edge From To Confusion

我是图形数据库的新手,我对 OrientDB 中的 From / To 或 In/Out 的概念有点困惑。

定义哪个顶点是从哪个顶点到哪个顶点的最佳方法是什么?或两者,例如何时是社交网络中的联系关系。

在我看来,这种混淆的大部分来自 Apache TinkerPop 的边符号。 OrientDB 历来采用 TinkerPop 作为其图形 API(这里有些事情正在发生变化,因此在 v 3.0 中将有一个不依赖于 Apache TinkerPop API 的原生 document/graph API , 但我们仍将保持对 TinkerPop 3.x) 的支持,因此符号是相同的。

Apache TinkerPop 使用 OUT/IN 定义连接到顶点的边和连接到边的顶点:

  • 给定一个顶点,您有由 OUT 引用的出边和由 IN 引用的入边(到目前为止还不错)
  • 给定一条边,它的起点(它来自的顶点)由 OUT(哎哟!)标识,终点(它到达的顶点)由 IN
  • 标识

问题来了:对于初学者来说,将边遍历视为 out + out:

是很自然的
vertex -out-> edge -out-> anotherVertex

但不幸的是它错了!

直边遍历的正确方法是out + in:

vertex -out-> edge -in-> anotherVertex

您也可以使用 in + out.

向后遍历边缘

正如我之前所写,恕我直言,这非常不直观,一开始我也遇到过这个问题。恕我直言,边缘连接的最佳表示法是 FROM/TO,而不是 OUT/IN,但它现在是一个标准,所以我们不能做太多。

我唯一可以告诉你的是,稍加练习就会变得自然。

一个单独的考虑是针对社交网络和通常没有方向的边(在社交网络中,边的方向并不重要,我是你的朋友这一事实也暗示你是我的朋友)。 Apache TinkerPop 没有无向边的概念,因此您只需要使用有向边并在遍历它们时忽略方向(例如,使用 both() 运算符或 BOTH 方向)