Java+Membase+SpymeCached批量操作
我目前正在编写一个需要对键/值存储进行批量操作的应用程序,目前我正在使用membase SpymeMached允许批量获取,但不允许批量CAS或添加;我认为如果实现这些功能,它们将被广泛使用 此时,我的一组批量操作代码大致如下所示 客户端是单个MemcachedClientJava+Membase+SpymeCached批量操作,java,cas,bulk,membase,spymemcached,Java,Cas,Bulk,Membase,Spymemcached,我目前正在编写一个需要对键/值存储进行批量操作的应用程序,目前我正在使用membase SpymeMached允许批量获取,但不允许批量CAS或添加;我认为如果实现这些功能,它们将被广泛使用 此时,我的一组批量操作代码大致如下所示 客户端是单个MemcachedClient ArrayList<Future<Boolean>> futures = new ArrayList<Future<Boolean>>(); ArrayList<Stri
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上的阻塞调用似乎效率很低,有更好的方法吗?在我的实际场景中,我希望能够在期货返回时尽快处理期货,这可能与期货发送的顺序有关,也可能与否
此外,是否可能或计划实施以下操作
-添加或返回现有值
-如果值等于已知值,则删除
-如果值等于已知值,则设置
谢谢,
马库斯我将在这里尽可能多地阐述一些事情 SpymeMached允许批量获取,但不允许批量CAS或添加;我认为如果实现这些功能,它们将被广泛使用 我完全同意,但我们可能不会加入bulkAdd,bulkCas。。。将函数添加到MemcachedClient。当前,默认情况下,通过尽可能将get和set操作作为大容量集或大容量get发送来优化它们。有计划将此扩展到所有memcached操作,但尚未完成。当它是,虽然它将发生在幕后,可能不会直接提供给SpymeMached用户 Future.get上的阻塞调用似乎效率很低 是的,我将在下面介绍,但也要注意,如果这是一个批量操作,那么您的代码仍然会阻塞一点。对于单个add操作,您编写的代码可能只会阻塞第一个操作,因为在这之后,所有其他操作都已经完成,因此在第一个调用之后对Future.get的调用将立即返回 那么有更好的方法吗 您可以扩展MemcachedClient类,复制一个现有函数,并将自己的代码添加到回调函数中 此外,是否可能或计划实施以下操作 Spymemcached实现了memcached提供的所有功能。您提到的操作已经可以使用SpymeMached的功能进行构建 -添加或返回现有值 添加keyA。如果失败,请获取keyA -如果值等于已知值,则删除 找凯亚。如果keyA等于已知值,则删除keyA -如果值等于已知值,则设置 找凯亚。如果keyA等于已知值,则设置keyB 如果您希望在memcached中添加新的选项,那么您应该在memcached.org上发布您的请求。不过,老实说,memcached的家伙喜欢让api尽可能小,所以我认为它们不太可能被添加