0

terracotta bigmemory はデータの一貫性の問題を簡単に解決できると思っていましたが、ドキュメントを読んで、ehcache.xml とソース コードの両方でいくつかのパラメーター/プロパティが必要です。

私のehcache.xmlは次のとおりです。

<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>

共有データの既存の値を読み取ってインクリメントするコード スニペットは次のとおりです。

for (int i = 0; i < 1000; i++) {
            transactionController.begin();
            bigMemoryChip.put(new Element(uid, ((Long) bigMemoryChip.get(uid).getObjectValue())+1));
            transactionController.commit();
        }

私がしたことは、コードを 2 回実行し、一貫性をどのように処理するかを観察することでした。通常、最終値は初期値よりも 2000 大きくなります。

15回ほど試してみましたが、初期値より2000多いのは1回だけで、それ以外はすべて初期値より1500~1700程度多くなりました。

4

1 に答える 1