1

hazelcast または coherence EntryProcessor を使用して、キーがキャッシュに格納されているさまざまなノードで並列実行でいくつかのロジックを処理したいと考えています。sendToEachKey(EntryProcessor process) のようなものを使用できるようです。

私の問題は、ロジックを使用して、別のシステムに属する処理対象のデータも送信する必要があり、それを受信する場合に発生します (たとえば、http 要求で)。

確かに sendToEachKey(EntryProcessor(data) process) のようなことができます。しかし、データがキーごとに異なり、処理するデータのみを特定のキーに送信したい場合は、どうすればよいですか? なぜそれをしたいのかというと、データが大きすぎてネットワークが過負荷になっているからです。

スレッドプールを開いて各データを各キーに送信することは可能ですが、巨大なリクエストのために非効率的です。

ありがとう!

4

3 に答える 3

1

Hazelcast の場合、すべての値を取得し、それぞれのキーを独自のものとして送信できますがEntryProcessor、これにより多くのオーバーヘッドが発生します。

もう 1 つのオプションは、EntryProcessorと distributedの組み合わせを使用することExecutorServiceです。

Runnableを ExecutorService に送信します。内部ではRunnable、ローカル キーセットを取得し、すべての外部値 (ノードに対して既にローカルであるすべて) を取得してから、EntryProcessorローカル キーごとに 1 つを発行します。すでにノードに対してローカルであるため、トラフィックが飛び交うことはありません (バックアップは別として、明らかに :))。EntryProcessorつまり、変更された値のみを送信し、完全なプロセッサ自体を送信しない特定のものを実装することをお勧めします(さらに多くのトラフィックを節約するため)。

于 2016-10-18T07:39:49.740 に答える
0

HazelcastexecuteOnKeys(keys, new EntryProcessor(data))では、データが大きすぎるため、これは多すぎます。

なぜだめですか

executeOnKey(key1, new EntryProcessor(data1));
executeOnKey(key2, new EntryProcessor(data2));
executeOnKey(key3, new EntryProcessor(data3));

各キーが必要とするデータサブセットを送信するには?

于 2016-10-18T07:37:48.357 に答える