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