首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java + Membase + spymemcached批量操作

Java + Membase + spymemcached批量操作
EN

Stack Overflow用户
提问于 2011-08-17 23:51:45
回答 1查看 1.8K关注 0票数 0

我目前正在编写一个需要对键/值存储进行批量操作的应用程序,目前我使用的是membase。

spymemcached允许批量获取,但不允许批量CAS或add;我认为如果实现这些功能,将会得到广泛使用。

此时,我的一组批量操作的代码大致如下所示。

client是一个单独的MemcachedClient。

代码语言:javascript
运行
复制
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()上的阻塞调用似乎效率很低,有没有更好的方法?在我的实际场景中,我希望能够在期货返回时立即处理它们(这可能是也可能不是发送的顺序?)。

另外,以下操作是否可能(或计划实现)?

-Add或返回现有值

如果值等于已知值,则返回-Delete

如果值等于已知值,则返回-Set

谢谢,马库斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-18 08:16:49

我将在这里尝试解决尽可能多的事情。

Spymemcached允许批量获取,但不允许批量CAS或add;我认为如果实现这些功能,将会得到广泛使用。

我完全同意这一点,但我们可能不会通过添加bulkAdd、bulkCas等来实现这一点。函数添加到MemcachedClient。Spymemcached目前,默认情况下,通过尽可能将get和set操作作为批量集或批量get发送来优化get和set操作。有计划将其扩展到所有memcached操作,但还没有完成。然而,当它发生时,它将在幕后发生,并且可能不会直接提供给spymemcached用户。

Future.get()上的阻塞调用似乎非常低效?

是的,我将在下面解决这个问题,但也要注意,如果这是一个批量操作,那么您的代码仍然会阻塞一小段时间。对于单独的add操作,您的代码可能只会阻塞第一个操作,因为在此之后,所有其他操作都已经完成,所以在第一次调用之后调用Future.get()将立即返回。

那么有没有更好的方法呢?

您可以扩展MemcachedClient类并复制其中一个现有函数,然后将自己的代码添加到回调函数中。

另外,以下操作是否可能(或计划实现)?

Spymemcached实现了memcached提供的所有功能。您提到的操作可以使用Spymemcached所具有的功能进行构建。

-Add或返回现有值

添加keyA。如果失败,则获取keyA。

如果值等于已知值,则返回-Delete

叫上keyA。如果keyA等于已知值,请删除keyA

如果值等于已知值,则返回-Set

叫上keyA。如果keyA等于一个已知值,则设置keyB。

如果你想把新的选项添加到memcached中,那么你应该在memcached.org上发布你的请求。不过,老实说,memcached的人喜欢保持尽可能小的api,所以我认为不太可能添加这些api。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7095771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档