2

ここ数日、neo4j について読んでいます。REST API を使用する必要があるかどうか、または Java API を使用できるかどうかについて、非常に混乱しました。

  1. 私の必要は、それらの間に何らかの接続を持つ何百万ものノードを作成することです。検索用にいくつかのノード属性にインデックスを追加したいと考えています。最初はJava APIを使用したGraphDBの組み込みモードから始めましたが、すぐにOutOfMemoryいくつかのノードでのインデックス作成に到達したため、neo4jがサービスとして実行され、REST APIを介して接続すると、すべてのメモリ管理が自動的に行われるようになると考えました。基礎となるファイルにデータをスワップイン/アウトすることによって。私の仮定は正しいですか?

  2. さらに、1 台のマシンに neo4j をインストールしただけでは、ソリューションを数十億のノードに拡張する計画があります。また、Neo4j には分散モードで実行する機能があると思います。この理由からも、REST API の実装を継続することが最善の考えだと思いました。分散環境で Neo4j を実行する方法に関する適切なドキュメントは見つかりませんでしたが。

  3. REST API を使用してバッチ挿入などを行うことはできますか?

4

1 に答える 1

2
  1. OutOfMemory例外が発生する理由を知っていますか? これは、これらすべてのノードを同じトランザクションで作成しているように聞こえます。これにより、ノードがメモリ内に存在します。Neo4jディスクに書き込むことができるように、一度に小さなチャンクをコミットしてみてください。キャッシュなどを除いて、Neo4j のメモリを管理する必要はありません。

  2. 分散モードはマスター/スレーブ アーキテクチャであるため、各システムに DB 全体のコピーがあります。Neo4j はディスク ストレージに非常に効率的です。ノードは 9 バイト、リレーションシップは 33 バイト、プロパティは可変です。

  3. 多くの呼び出しを同じ HTTP 呼び出しにグループ化する Batch REST API がありますが、REST 呼び出しの作成は、これが埋め込まれた場合よりも遅くなります。

あなたが言及していないREST APIの使用にはいくつかの欠点があり、それはトランザクションのようなものです。複数のノード、リレーションシップ、プロパティの変更を作成する必要があり、いずれかのステップが失敗してコミットされない場合、アトミック操作を実行する場合、REST API でこれを行うことはできません。

于 2013-02-11T16:21:19.333 に答える