1

Grails 2.0 アプリケーションのデータベースとして、Neo4j にロードされたENRON GraphML データセットを使用したいと考えています。データのユースケースは読み取り専用です。データセットの読み込みとスタンドアロン アプリケーションでのデータベースの作成に問題はありませんでしたが、今度は Grails プラグインを使用してデータベースへのアクセスを管理したいと考えています。

ドメイン クラスのマッピングに関するNeo4J プラグインのドキュメントを見ると、頂点のタイプごとにサブリファレンス ノードが必要であることがわかります。私のデータにはそれがありません。前進する方法はいくつかありますが、どれを追求すればよいかわかりません。

  1. プラグインをダンプし、サービスを作成し、データベースの読み取りを自分で管理します。長所: これは簡単に実装できます。短所: 潜在的なパフォーマンスの問題、バグ。

  2. プラグインが期待する欠けている頂点とエッジを作成するプログラムを作成し、データベースをプラグインにロードします。長所: プラグインがアクセスを管理します。短所: プラグインで作成されたデータベースとの一貫性を保つために何を追加する必要があるかを正確に把握するには、数回の反復が必要になる場合があります。

  3. プラグインを介して空のデータベースを作成し、別のデータベースからデータを読み取って一連の挿入を実行します。長所: プラグインがアクセスを管理します。短所: データベースのブートストラップに時間がかかる場合があります。データベースをトラバースしてシリアライズするコードを書く必要があります。等

良い方法は何ですか?私は何を見落としていますか?

4

1 に答える 1

1

Grails Neo4j プラグインの作成者として、ここで適切な回答を提供できるかもしれません。プラグインで現在使用されているサブリファレンス構造が常に最適なアプローチであるとは限りません。構成可能な方法でインデックスを作成することでこれを置き換える計画がありますが、現時点では ETA はありません。より短期的な解決策が必要になる可能性があるため、読み取り専用データベースの場合は 1) と 2) のいずれかを選択することをお勧めします。ドメイン クラスを使用する主な利点の 1 つは、足場を使用できることです。あなたは読み取り専用なので、この引数はここではカウントされません。

1) 別の優れた利点があります。たとえば cypher を使用してグラフをクエリすると、REST スタイルのデータベースを使用している場合でもパフォーマンスが非常に高くなります。一般に、パフォーマンスが重要な場合は、Grails 基準クエリ/動的ファインダーを実行することを優先してサイファーを使用する必要があります。

2) そのアプローチを採用する場合は、サポートを提供できます。基本的に、ドメイン クラスを作成し、ドメイン クラスごとにサブリファレンス ノードを作成し、すべてのインスタンスをこのノードに接続する必要があります。ここでの利点: ダイナミック ファインダーや標準的な基準クエリなどを使用できます。サブリファレンス ノードの作成とインスタンス ノードへの接続は、1 つまたは 2 つの cypher ステートメントで簡単に実行できます。

于 2012-10-31T20:38:46.410 に答える