1

neo4jで自己参照ノードを作成しても問題ありませんか?大きなデータ環境で使用する必要があるため、パフォーマンスが重要です。 私は例hereを見つけましたが、これについてのより多くの意見を知る必要があります。一般的にどちらが良いですか?自己参照ノードを使用するか、またはそれらを分割して、異なるラベルと関係を持つノードを分離しますか? 私のシナリオでは、電子商取引タググループとタグを作成します。 TAG_GROUPにはTAGがありますが、これは明らかです。ただし、タグの中にはサブタグがあるものもあります。neo4jの自己参照ノード

1){parentID、isSubTag、...}のようないくつかのプロパティを持つTAG- [has] -TAG自己参照タグを使用するには、これに関する良い点は、複数のサブタグレベルにすることができます。しかし、私はパフォーマンスがどのようになるかはわかりません。

2)TAH- [has] -SUB_TAGを使用する。まあ、これはもっと簡単で理解しやすいかもしれません。しかし、SUB_TAGにSUB_SUBタグがあるとどうなりますか?

ご協力いただければ幸いです。

PSIは、SDNのユースケースの外側を話すのNeo4j 3.0.1スタンドアロンサーバーと春データ-のNeo4j 4.1.1

+0

私は誰も答えはありませんので、この質問は、サイトに適しているかわかりません。私は、あなたが実際に問題がある場合には、パフォーマンスについて心配するだけで、最もクリーンで、データモデルに最適なアプローチを取ることをお勧めします。私は、あなたが言う2つのアプローチが異なる動作をする理由を見分けることができません。自己参照するかどうかで違いはありません。 – Mikesname

答えて

2

を使用するつもりです、何を記述することは間違いなく、自然にモデル化することができる階層であり、 Neo4Jで。

親子関係の概念は、関係を使って行うだけで、プロパティは必要ありません。

(Tag)-[:CHILD]->(Tag)-[:CHILD]->(Tag) 

私は、タグをすることができ、その後tags製品、あなたが関連付けられているタグを使用して製品を持っているだろうと仮定します。

MATCH (product:Product {id: 1}) 
OPTIONAL MATCH (product)<-[:TAGS]-(tag) 
RETURN product, collect(tags) as tag 
:製品の関連するタグを検索

(Tag)-[:TAGS]->(Product) 

がするのと同じくらい簡単です

OPTIONAL MATCHは、クエリを破ることなくタグを持たない製品を考慮に入れます。

あなたはここで0は、アカウントにタグが親を持っていないとtagsコレクションに()を埋め込みますケースを取っている製品

MATCH (product:Product {id: 1}) 
OPTIONAL MATCH (product)<-[:TAGS]-()<-[:CHILD*0..]-(tag) 
RETURN product, collect(tag) as tags 

にタグを付け、タグごとのタグの完全な階層をしたい場合。

私はモデリングとCypherの部分について次のように読んでいただきたいと思います。誰かがこれのSDN側の答えを追加できると確信しています。

http://graphaware.com/neo4j/2013/10/11/neo4j-bidirectional-relationships.html

http://graphaware.com/graphaware/2015/05/19/neo4j-cypher-variable-length-relationships-by-example.html

+0

ありがとうクリストファー。 (Tag) - [:CHILD] - >(Tag) - [:CHILD] - >(Tag)は、私が明確にする必要があるケースです。 BTWリンクは非常に便利でした。ありがとう! – Lina