私は現在、キー/値ストアで一括操作を必要とするアプリケーションを作成しています。現時点では、membase を使用しています。
spymemcached は一括取得を許可しますが、一括 CAS または一括追加は許可しません。実装されれば広く使われると思われる機能。
この時点で、一連の一括操作のコードは大まかに次のようになります。
「クライアント」は単一の MemcachedClient です。
ArrayList<Future<Boolean>> futures = new ArrayList<Future<Boolean>>();
ArrayList<String> bulkGet = new ArrayList<String>();
for(int i=0; i<50; i++){
String key = "Key_" + x + "_" + i;
Future<Boolean> fut = client.add(key, 0, "Value_" + x + "_" + i);
futures.add(fut);
bulkGet.add(key);
}
int count = 0;
for(Future<Boolean> fut : futures){
if(fut.get()==true){
count++;
}
}
System.out.println("Added " + count + " records.");
Map<String,Object> bulkGot = client.getBulk(bulkGet);
System.out.println("Retrieved " + bulkGot.size() + " records");
Future.get() のブロッキング呼び出しは非常に効率が悪いようですが、もっと良い方法はありますか? 私の実際のシナリオでは、先物が戻ってきたらすぐに処理できるようにしたいと考えています (送信された順序である場合とそうでない場合があります)。
また、以下の運用は可能ですか(または実施予定ですか)?
-既存の値を追加または返す
-値が既知の値と等しい場合は削除
-値が既知の値と等しい場合に設定します
ありがとう、マーカス