2017-02-08 8 views
0

Neo4jグラフデータベースを使用するアプリケーションを実装しています。Neo4jユーザ定義プロシージャは、グラフデータベースに二重リンクリストを実装する最良の方法ですか?

グラフに二重リンクリストを実装する必要があります。 Cypherでこれを行うには、大規模で複雑なクエリを使用できます。私はこれを行うより良い方法は、ユーザー定義のプロシージャを介して二重リンクリスト機能を実装することだと思っています。

これは意味がありますか?

答えて

0

まず、注意:のNeo4jで

は、二重リンクリストはあなたに多くを購入することはありません。あなたはすでに反対方向の関係をトラバースすることができます。これが純粋にトラバーサルのためのものであれば、それはまったく必要ではありません。また、データモデルで特殊なケースが実行されている場合を除いて、あなたは二重リンクリストを作成する方法を知っておく必要がある場合

、その後、下記を参照してください:

おそらく、このためのAPOC手順をお勧めします、apoc.nodes.link() in the Creating Data sectionは、ノードのコレクションを取り込んで可能に手続きですリンクされたリストスタイルで各ノード間の関係を作成します。

残念ながら、APOCにはapoc.nodes.link()を再度実行できるようにリストを逆戻りする機能がありませんので、同じノードのクエリを逆順にフォローアップする必要があります、または2番目の関係でリンクされてマージされている任意の2つのノードで一致するクエリ。作品グラフ上

例:

MATCH (m:Movie) 
WITH m 
ORDER BY m.released ASC 
WITH COLLECT(m) as movies 
CALL apoc.nodes.link(movies, 'Next') 
MATCH (m:Movie)-[:Next]->(n:Movie) 
MERGE (n)-[:Prev]->(m) 
+0

グレート答え、私が探していたまさにですAPOCへのポインタ、ありがとうございました。 –

+0

質問:二重にリンクされたリストに要素を追加、削除、または挿入するメソッドはありませんでした。 –

+0

ここでリンクされたリストは、Neo4jでよく定義された「もの」ではありません。リンクされたリスト構造であるノードとリレーションシップの配列です。ノードの削除と挿入を手動で処理し、それに応じて関係を再配置するクエリを作成して再利用する必要があります。関連するノードをロックする必要があります(これは、ノード上に存在しないプロパティを削除して書き込みロック)が発生した場合、同時の変更が発生する可能性があります。この複雑さのため、実際にはユーザー定義プロシージャーを検討することをお勧めします。 – InverseFalcon

関連する問題