0

アプリケーションのデータベース (SQL Server または Oracle) に対する検索データベースとして Neo4J をテストしています。私の意図は、RDBMS データベースをクロールし、検索可能なコンテンツを Neo4J にコピーすることです。後でユーザーが検索を要求したときに、Neo4J のグラフ検索機能を使用して、RDBMS データベース内のレコードを検索できます。Neo4J で検索を実行すると、検索基準を満たす主キー値が返されます。

私は、Neo4Client を使用して、RDBMS データベースから 2 つのテーブルを読み取り、ノードとノード間の関係を作成する小さな C# アプリケーションを作成しました。この例の 2 つのテーブルは、フォーミュラ ヘッダーとその子テーブルであるフォーミュラ原料です。

小さなデータベース (2 つのテーブルで最大 50 行と最大 250 行) では、私のクロールは非常に高速です。しかし、大規模な顧客データベース (最大 550K および最大 6M 行) でアプリケーションをテストすると、クロールが遅すぎることがわかりました。テスト/研究に使用する一部の古いハードウェアでは、1 秒あたり最大 4 行を取得しています (550K テーブルをクロールするのに 36 時間かかると見積もっています)。私の新しい開発システムでは、1 秒あたり約 14 行を取得しています (550K テーブルをクロールするのに 10 時間かかると見積もっています)。

Neo4JClient ドライバーが Neo4J REST インターフェイスを使用していることは知っていますが、この同様の質問を考えると、Neo4J は私のプロジェクトには適していないようです。

マルチスレッドについて考えましたが、このシナリオには合わないと思います。このアプリケーションをマルチスレッド化するつもりはありますが、クロールされている個々のテーブルではありません。クロールする RDMBS 内のテーブルは論理的に関連付けられているため、Neo4J リレーションシップがあり、これらのテーブル グループのセットがいくつかあります。テーブルセットごとにスレッドを回転させることを計画していました。最終的には、クロールする必要のある 12 セットのテーブルに 75 個のテーブルが必要になります。このレベルのパフォーマンスは、運用環境では実用的ではないと思います。

最適とは言えない方法で何かを行っていることを誰かが教えてくれることを期待して、サンプル コードを投稿しました。インデックスと関係を持つノードを作成する方法があるかどうか知りたいのですが? 現在、これは 2 段階のプロセスですが、550K テーブルのコードはリレーションシップを使用していないため、上記のパフォーマンスの数値には影響しません。私のテスト アプリは、最初にヘッダー ノード (550K テーブル。これは、前述のパフォーマンスの数値が基づいているものです) を作成し、次に、成分ノードとヘッダー ノードへの関係を作成します。成分ノードの作成をテストすると、パフォーマンスの数値がさらに遅くなると予想されます。

ありがとう!

4

0 に答える 0