私はしばらくの間 Neo4j を使用しており、Neo4j を使用してアプリを起動して実行しています。すべてが非常にうまく機能しており、Neo4j はこの問題を解決するのに非常に優れていますが、今はアプリを拡張する必要があり、しようとしています。 impl。データの Key-Value リストを Neo4j に変換する方法がわかりません。
私はリストを持っています。リストの長さは約700万要素なので、リスト全体をメモリに保存して自分で管理するには少し長すぎます。これをテストしたところ、3Gb を消費します。
私の選択肢は次のいずれかです。
- (a) Neo4j はこの仕事には不適切なツールであり、実際のキー値データ ストアを使用する必要があります。このデータのリストのためだけに別のデータ ストアを導入する必要があるため、これを行うには少し不利です。
- (b) キーと値をノードのプロパティとして設定するキー値ごとにノードを作成することにより、Neo4j を使用しますが、これらのノードをグループ化するためのインデックスを持つ以外に関係はありません。キー値のキーを次のように公開します。インデックス上のキー。
- (c) 単一のノードを作成し、すべてのキー値をプロパティとして保持します。ノードを取得すると、すべてがメモリに読み込まれるため、興味のあるプロパティを検索する必要があるため、これは間違っていると感じます。で、リストを自分で管理することもできます。
- (d) キーは、実際には 2 つのノードを指す 2 つの部分のキーであるため、関係を作成し、関係のプロパティとして値を設定します。私はこの道を歩み始めましたが、特定のキー/値のルックアップを行うことになると、単純で高速ではないため、これをやめました。
オプション「a」または「b」のいずれかが進むべき道を感じます。
アドバイスをいただければ幸いです。
シナリオ例
ノード A とノード B があり、2 つのノード間に関係があります。ノードはすべて「foo」のプロパティを持ち、foo には何らかの値があります。この例では、ノード A には foo=X があり、ノード B には foo=Y があります。
次に、この K/V のリストを取得します。それらの K/V の 1 つは Key:X+Y=Value:Z です。したがって、元のアイデアは、ノード A とノード B の間に別の関係を作成し、Z を保持する関係にプロパティを格納することでした。次に、「foo」にインデックスを作成します。および新しい関係の関係 idx。
Key X+Y を指定すると、値が取得されます。ルックアップ ロジックは、ノード A (X から) とノード B (y から) を取得し、ノード A の関係をたどって、この新しい関係タイプのノード B をルックアップします。これは機能しますが、特定のタイプを探しているノードとの間のすべての関係を調べなければならないという事実は気に入りません。これは非効率的です。特に、さまざまなタイプの関係が多数ある場合。
したがって、オプション「A」または「B」を使用するという結論、またはNeoで非現実的なことをしようとしています.