2017-09-17 9 views
0

私はGraph Databaseを使っていないので、OrientDBのFrom/ToやIn/Outの概念について少し混乱しています。OrientDB Edge From Confusion

どのVertexがFromで、ToがToであるかを定義する最良の方法はどれですか?または、例えば、両方とも、ソーシャルネットワークにおける接触の関係がある場合。

答えて

1

私の意見では、この混乱の大部分は、エッジのためのApache TinkerPop表記法から来ています。 OrientDBは歴史的にグラフAPIとしてTinkerPopを採用しています(ここではいくつか変更がありますので、v 3.0ではApache TinkerPop APIに依存しないネイティブのドキュメント/グラフAPIがありますが、TinkerPop 3.xでサポートを維持します)表記法は同じです。

アパッチTinkerPopは、エッジに接続された頂点と頂点に接続され、両方のエッジを定義するためにIN/OUT使用しています。

  • 与えられた頂点、あなたはOUTによって参照の発信エッジと(これまでにそこらでによって参照入ってくるエッジを持っていますエッジ与え
  • )良い、それはOUT(痛い!)と終点(それが行く頂点)で識別される出発点(それはから来ている頂点)では

そして、ここで特定しました問題が来る:初心者のために、それは非常に自然です

vertex -out-> edge -out-> anotherVertex 
が、残念ながらそれは間違っている: out + outとしてエッジトラバーサルを考えます!

ストレートエッジトラバーサルを行うための正しい方法はout + inです:あなたはまた、in + outとの後方エッジを横切ることができる

vertex -out-> edge -in-> anotherVertex 

私が以前に書いたように、IMHOは非常に直感的ではありません。最初は私もこの問題を抱えていました。 IMHOは、エッジ接続のための最良の表記法は、OUT/INの代わりにFROM/TOでしたが、これは現在の標準です。

私があなたに伝えることは、ちょっとした練習で自然になることだけです。

別の考慮事項は、ソーシャルネットワークのためのものであり、一般的に方向性を持たないエッジの場合です(ソーシャルネットワークではエッジの方向は重要ではありません。私の友人)。 Apache TinkerPopには無向辺の概念がないので、有向辺を使用して方向を無視するだけです(例:both()演算子またはBOTH方向を使用)