私はGraph Databaseを使っていないので、OrientDBのFrom/ToやIn/Outの概念について少し混乱しています。OrientDB Edge From Confusion
どのVertexがFromで、ToがToであるかを定義する最良の方法はどれですか?または、例えば、両方とも、ソーシャルネットワークにおける接触の関係がある場合。
私はGraph Databaseを使っていないので、OrientDBのFrom/ToやIn/Outの概念について少し混乱しています。OrientDB Edge From Confusion
どのVertexがFromで、ToがToであるかを定義する最良の方法はどれですか?または、例えば、両方とも、ソーシャルネットワークにおける接触の関係がある場合。
私の意見では、この混乱の大部分は、エッジのためのApache TinkerPop表記法から来ています。 OrientDBは歴史的にグラフAPIとしてTinkerPopを採用しています(ここではいくつか変更がありますので、v 3.0ではApache TinkerPop APIに依存しないネイティブのドキュメント/グラフAPIがありますが、TinkerPop 3.xでサポートを維持します)表記法は同じです。
アパッチTinkerPopは、エッジに接続された頂点と頂点に接続され、両方のエッジを定義するためにIN/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
方向を使用)