私は neo4j を初めて使用し、ソーシャル ネットワークを構築しています。この質問のために、私のグラフはuser
、event
ノードとそれらの間の関係を持つノードで構成されています。
ユーザーはイベントに招待、参加、出席、または主催することができ、それぞれがその前のユーザーのサブセットです。
ステータス/状態ごとに複数の関係を作成したり、現在の状態を保存するプロパティとの関係を 1 つ作成したりするメリットはありますか?
私は neo4j を初めて使用し、ソーシャル ネットワークを構築しています。この質問のために、私のグラフはuser
、event
ノードとそれらの間の関係を持つノードで構成されています。
ユーザーはイベントに招待、参加、出席、または主催することができ、それぞれがその前のユーザーのサブセットです。
ステータス/状態ごとに複数の関係を作成したり、現在の状態を保存するプロパティとの関係を 1 つ作成したりするメリットはありますか?
私が理解していることから、グラフタイプのクエリは、プロパティよりも関係タイプでより簡単/効率的に実行できます。
1 つの関係で別のタイプの関係はどうでしょうか?
Cypher を使用してパイプとのいくつかのタイプの関係をクエリできます (クエリで取得したくないイベントへの他の関係がある場合)。
更新 - コンソールの例を追加: http://console.neo4j.org/?id=woe684
または、古いリレーションシップをそこに残しておくこともできますが、少し複雑なクエリを作成する必要はありませんが、このユース ケースでは少し無駄に感じます。
可能であれば、プロパティによって修飾された単一のタイプよりも異なる関係タイプを選択すると、グラフをクエリするときにパフォーマンスに大きなプラスの影響を与える可能性があります。前者のアプローチは、後者よりも少なくとも 2 倍高速です。データが高レベルのキャッシュにあり、グラフがネイティブ Java API を使用してクエリされる場合、最初のアプローチはシングルホップ トラバーサルで 8 倍以上高速です。
ソース: http://graphaware.com/neo4j/2013/10/24/neo4j-qualifying-relationships.html