我是使用图形数据库的新手,我对OrientDB中的From / To或In / Out概念感到有点困惑。
哪种方法可以定义哪个Vertex是From,哪个是To?或者两者都是例如什么时候是社交网络中的联系关系。
答案 0 :(得分:1)
在我看来,这种混乱的大部分来自Apache TinkerPop边缘符号。 OrientDB历来采用TinkerPop作为其图形API(这里有些东西正在改变,因此在v 3.0中将会有一个不依赖于Apache TinkerPop API的原生文档/图形API,但我们仍将保持对TinkerPop 3.x的支持)所以符号是一样的。
Apache TinkerPop使用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
方向)