2016-04-25 31 views
0

Ich dachte, Terrakotta bigmemory würde leicht Datenkonsistenz Probleme lösen, aber es erfordert mehrere Parameter/Eigenschaften sowohl in ehcache.xml und im Quellcode, wie ich auf seiner Dokumentation lesen.Terracotta BigMemory freigegebene Daten sind nicht konsistent

mein ehcache.xml ist:

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

Und das Code-Snippet, das liest und erhöht den vorhandenen Wert auf gemeinsam genutzte Daten ist:

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

Was ich habe den Code zweimal ausgeführt wird und beobachten wie es mit der Konsistenz umgeht und normalerweise, was ich erwartet habe, ist der Endwert 2000 mehr als der Anfangswert.

Obwohl ich etwa 15 Mal probiert habe, nur einmal 2000 war mehr als der Anfangswert, aber alle anderen waren etwa 1500-1700 mehr als der Anfangswert.

Antwort

0

Keine Ahnung, was Ihr transactionController ist, aber wenn es sich um eine Cluster-Datenstruktur bereitstellt Ausschluss ist, sind die Operationen, die Sie ausführen nicht atomar und so sehen Sie das Rennen zwischen dem put und get.

, dass es könnte ein put auf dem anderen Knoten zwischen dem get und put auf diesem Knoten passiert sein, die verstecken Schritte enden würde.

Wie Sie verwenden starke Konsistenz, wird der Test, wenn Sie die put in einem bedingten replace ändern.

+0

transactionController gehört zum Cache-Objekt. Und soweit die Dokumentation erzählt; Begin und Commit Methoden garantieren die Atomarität. und "Ja", Konsistenz ist stark. (siehe .xml oben) @louis_jacomet – bAris

+0

Ok, können Sie angeben, wie Sie es bekommen? Und das bedeutet wahrscheinlich, dass Sie versuchen, lokale Transaktionen zu verwenden, ohne sie zu konfigurieren. Also nicht überrascht, dass es nicht wie erwartet funktioniert. –