OrientDB边缘从混乱

时间:2017-09-17 14:40:14

标签: orientdb traversal vertex edge

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

哪种方法可以定义哪个Vertex是From,哪个是To?或者两者都是例如什么时候是社交网络中的联系关系。

1 个答案:

答案 0 :(得分:1)

在我看来,这种混乱的大部分来自Apache TinkerPop边缘符号。 OrientDB历来采用TinkerPop作为其图形API(这里有些东西正在改变,因此在v 3.0中将会有一个不依赖于Apache TinkerPop API的原生文档/图形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方向)