首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terracotta BigMemory共享数据不一致

Terracotta BigMemory共享数据不一致
EN

Stack Overflow用户
提问于 2016-04-25 22:20:44
回答 1查看 62关注 0票数 0

我认为terracotta bigmemory可以很容易地解决数据一致性问题,但正如我在其文档中所读到的,它在ehcache.xml和源代码中都需要几个参数/属性。

我的ehcache.xml是:

代码语言:javascript
复制
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         name="config">

  <cache name="bigMemory"
         maxBytesLocalHeap="128M"
         copyOnRead="true"
         copyOnWrite="true"
         eternal="true">

    <terracotta consistency="strong" />
  </cache>

  <terracottaConfig url="localhost:9510" rejoin="false"/>

</ehcache>

读取和递增共享数据上的现有值的代码片段如下:

代码语言:javascript
复制
for (int i = 0; i < 1000; i++) {
            transactionController.begin();
            bigMemoryChip.put(new Element(uid, ((Long) bigMemoryChip.get(uid).getObjectValue())+1));
            transactionController.commit();
        }

我所做的是执行代码两次,并观察它是如何处理一致性的,通常我期望的是最终值比初始值多2000。

虽然我尝试了大约15次,只有一次比初始值多了2000次,但其他所有的都比初始值多了1500-1700次。

EN

回答 1

Stack Overflow用户

发布于 2016-04-26 00:50:52

我不知道您的transactionController是什么,但是除非它是提供排除的集群数据结构,否则您正在执行的操作不是原子的,因此您可以看到putget之间的竞争。

也就是说,在此节点上的getput之间的另一个节点上可能会发生put,这将最终隐藏增量。

由于您使用的是强一致性,因此如果您在条件replace中更改put,则测试将通过。

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

https://stackoverflow.com/questions/36843288

复制
相关文章

相似问题

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