1

複数のデータ ストアから取得したデータからグラフを作成するユース ケースがあります。これらのデータ ストアのそれぞれには、その特定のデータ ストア データを表すサブグラフを構築する独自のクライアント ライブラリがあります。

現在の実装 同時実行要件がなかったので、サービス レイヤーで 1 つの Graph オブジェクトを作成し、それを各クライアント ライブラリに渡します。これらは同じ Graph インスタンスを使用します。

新しい実装 - SLA を満たすため

SLA を満たすために、これらのデータ ストアから同時にデータを取得したいと考えています。

  1. このシナリオでは、各クライアント ライブラリは、サービス レイヤーから渡された同じグラフ インスタンスを使用してサブグラフを構築できますか?
  2. または、これを処理するより良い方法はありますか?

編集

オブジェクトの使用方法

  1. クライアントが REST リクエストを送信して、個人データを取得します
  2. 個人データは 3 つの異なるデータ ストアに格納されます
  3. サービス層はインスタンスを作成し、3 つの異なるスレッドで 3 つの異なるストアから同時にデータを取得する 3 つの異なるスレッド間で共有しcom.tinkerpop.blueprints.impls.tg.TinkerGraphます各スレッドは、プルされたデータを共有グラフ インスタンスに追加する役割も果たします。
4

1 に答える 1

2

Graphインターフェイスの実装に依存します。たとえば、使用している場合TinkerGraph、スレッドセーフは保証されません。 Neo4jGraph変数を使用してThreadLocalトランザクションを管理します。つまり、同じNeo4jGraphインスタンスを複数のスレッドで問題なく共有できます。Blueprints は、以下を介してマルチスレッド トランザクションも可能にしますThreadedTransactionalGraph

https://github.com/tinkerpop/blueprints/wiki/Graph-Transactions#threadedtransactionalgraph-and-multi-threads-for-one-transaction

Graphただし、その機能をサポートするを見つける必要があります。

于 2015-02-03T13:48:13.330 に答える