5

テーブルから 23 億のリレーションシップをインポートしています。インポートは、移行を完了するのに 20 日かかる 1 時間あたり 500 万の速度を得るため、それほど高速ではありません。neo4j のバッチ挿入とバッチ挿入ユーティリティについて聞いたことがあります。このユーティリティは、csv ファイルからインポートすることで興味深い処理を行いますが、最新のコードは壊れていて実行されていません。

私はneo4jで約100Mの関係を持っており、重複する関係がないことをすべて確認する必要があります.

neo4jで物事を高速化するにはどうすればよいですか

現在のコードでは

begin transaction
for 50K relationships
create or get user node for user A
create or get user node for user B
check there is relationship KNOW between A to B if not create the relationhsip
end transaction

以下も読んだ。

4

2 に答える 2

3

リレーションシップの場合、十分なストレージがあると仮定すると、インポート フェーズで一意のリレーションシップを作成しないようにします。現在、実際には ~3mil のレコードを含む SQL テーブルもインポートしていますが、常にリレーションシップを作成し、作成していません。重複しているかどうかに注意してください。

後でインポート後に、次のような一意の関係を作成する暗号クエリを実行できます。

START n=node(*) MATCH n-[:KNOW]-m
CREATE UNIQUE n-[:KNOW2]-m;

START r=rel(*) where type(r)='KNOW' delete r;

少なくともこれが現在の私のアプローチであり、後の暗号クエリの実行には約数分しかかかりません。問題は、暗号クエリがメモリエラーに陥る可能性があるよりも、実際に数十億のノードがある場合に発生する可能性があります (neo4j エンジン用に設定したキャッシュの量によって異なります)

于 2012-12-12T09:36:52.233 に答える
0

「ユーザーAのユーザーノードを取得する」、インデックスからのルックアップをどのように行いますか? インデックス ルックアップは、バッチ挿入の速度を大幅に低下させます。インデックスの「前」にある単純な HashMap にできるだけ多くのユーザーをキャッシュするか、BatchInserterIndex#setCacheCapacity を使用してください。

于 2012-12-11T20:27:52.197 に答える