私は次のように定義されたヘーゼルキャストマップを持っています。100万エントリー。
IMap<Integer, Employee> employeeMap = hazelcastInstance.getMap("employeeMap");
employeeObj.isCool()
指定された従業員が「かっこいい」かどうかを返します。
からすべてのクールな従業員を見つけるメカニズムが必要employeeMap
です。私は、次のいずれかを行うことができることを理解しています。
オプション 1 :employeeMap.keySet(predicate);
クラスター内の各メンバーで並列に実行され、fork/join メカニズムを使用して呼び出し元によって結合される呼び出し。
質問 1 : ただし、これにより、述語を各エントリに適用する前に、各ノードのエントリ セットが一度にメモリに読み込まれると思います。確認してください。
オプション 2 : employeeMap.executeOnEntries(entryProcessor);
entryprocessor のprocess()
メソッドは次のようになります。
@Override
public Object process(Entry<Integer, Employee> entry)
{
return entry.getValue().isBad() ? true : null;
}
質問 2EntryProcessor
:がパーティション スレッドで実行されることは理解しています。process()
メソッドが呼び出される 前に、ローカル ノード内のすべてのローカル エントリを一度にロード (デシリアライズ) (および一時的に保存) するかどうかを知りたいです。
質問 3 : 利用可能な最良のオプション (時間と空間の複雑さの観点から) とその根拠を知りたいです。