Frage

Wie kann ich entscheiden, welche zu verwenden CacheConcurrencyStrategy zu?

  • NonstrictReadWriteCache,
  • ReadOnlyCache,
  • ReadWriteCache,
  • TransactionalCache.

Ich lese https: //www.hibernate. org / hib_docs / v3 / api / org / hibernate / cache / CacheConcurrencyStrategy.html , aber erklärt nicht genug im Detail.

War es hilfreich?

Lösung

Die Dokumentation Hibernate hat einen ziemlich guten Job, sie zu definieren:

  

19.2.2. Strategie: nur lesen

     

Wenn Ihre Anwendung zu lesen, aber   Ändern Sie nicht, Instanzen einer persistenten   Klasse, eine Nur-Lese-Cache kann verwendet werden.   Dies ist die einfachste und optimale   Durchführung Strategie. Es ist sogar sicher   zur Verwendung in einem Cluster.

     

19.2.3. Strategie: Lesen / Schreiben

     

Wenn die Anwendung muss aktualisiert werden   Daten, ein Cache-Lese-Schreib könnte sein,   angemessen. Diese Cache-Strategie   sollte nie wenn serializable verwendet werden   Transaktionsisolationsstufe ist   erforderlich. Wenn der Cache in einem benutzten   JTA-Umgebung müssen Sie die angeben   Eigentum   hibernate.transaction.manager_lookup_class   und die Benennung einer Strategie für den Erhalt   die JTA TransactionManager. In anderen   Umgebungen, sollten Sie sicherstellen, dass   die Transaktion ist abgeschlossen, wenn   Session.close() oder   Session.disconnect() aufgerufen. Wenn du   will diese Strategie in einem verwenden,   Cluster, sollten Sie sicherstellen, dass die   zugrunde liegende Cache-Implementierung   Verriegelungs unterstützt. Die eingebaute Cache   Anbieter nicht unterstützen Verriegelung.

     

19.2.4. Strategie: nicht strikt Lese- / Schreib

     

Wenn die Anwendung nur gelegentlich   benötigt, um Daten zu aktualisieren (das heißt, wenn es   extrem unwahrscheinlich, dass zwei   Transaktionen versuchen würden, die aktualisieren   gleiches Element gleichzeitig), und ein strenges   Transaktionsisolations nicht erforderlich ist,   eine nicht strikte-Lese-Schreib-Cache könnte sein,   angemessen. Wenn der Cache in einem benutzten   JTA-Umgebung, müssen Sie angeben,   hibernate.transaction.manager_lookup_class.   In anderen Umgebungen, sollten Sie   sicherzustellen, dass die Transaktion   abgeschlossen, wenn Session.close() oder   Session.disconnect() genannt wird.

     

19.2.5. Strategie: Transaktions

     

Die Transaktionscache-Strategie   bietet Unterstützung für voll   Transaktionscache-Anbieter wie   JBoss TreeCache. Ein solcher Cache kann nur   in einer JTA-Umgebung verwendet werden und Sie   müssen angeben,   hibernate.transaction.manager_lookup_class.

Mit anderen Worten:

  • Read-only: Nützlich für Daten, die ist lesen häufig aber nie aktualisiert (z Referenzdaten wie Länder). Es ist einfach. Es hat die besten Leistungen aller (offensichtlich).

  • Schreiben / Lesen: Wünschenswert, wenn Ihre Daten Bedürfnisse aktualisiert werden . Aber es bietet keine SERIALIZABLE Isolationsstufe, Phantom liest auftreten können (man am Ende einer Transaktion etwas sehen kann das war nicht da zu Beginn). Es hat mehr Aufwand als schreibgeschützt.

  • nicht strikt lesen / schreiben: Alternativ, wenn es unwahrscheinlich, zwei separate Transaktion Threads ist könnte das gleiche Objekt aktualisieren, können Sie die nicht strikte-Lese-Schreib-Strategie verwenden. Es hat weniger Overhead als read-write. Dies ist für Daten nützlich, die sind selten aktualisiert .

  • Transactional: Wenn Sie ein vollständig transaktionale Cache. Nur geeignet in einer JTA Umgebung.

Also, hängt davon ab, die richtige Strategie entschieden, dass die Daten aktualisiert werden oder nicht, die Häufigkeit des Updates und die Isolationsstufe erforderlich. Wenn Sie nicht wissen, wie diese Fragen für die Daten, die Sie im Cache setzen wollen beantworten, fragen Sie vielleicht eine gewisse Unterstützung von einem DBA.

Andere Tipps

READ_ONLY: Wird nur für Unternehmen, die sich nie ändern (Ausnahme wird ausgelöst, wenn ein Versuch, ein solches Unternehmen zu aktualisieren wird). Es ist sehr einfach und performant. Sehr gut geeignet für einige statische Referenzdaten, die nicht ändern.

NONSTRICT_READ_WRITE: Cache wird nach einer Transaktion aktualisiert, dass die betroffenen Daten geändert hat, verpflichtet. Somit wird eine starke Konsistenz nicht garantiert und es gibt ein kleines Zeitfenster, in dem veralteten Daten aus dem Cache erhalten werden. Diese Art von Strategie ist für Anwendungsfälle geeignet, die Eventual Consistency tolerieren kann.

READ_WRITE: Diese Strategie garantiert starke Konsistenz, die es durch die Verwendung ‚weiche‘ Sperren erreicht: Wenn eine im Cache gespeicherte Einheit aktualisiert wird, eine weiche Sperre im Cache für diese Entität gespeichert ist, als auch, was ist freigegeben, nachdem die Transaktion festgeschrieben. Alle gleichzeitigen Transaktionen, die weich gesperrten Einträge zugreifen werden die entsprechenden Daten direkt aus der Datenbank abgerufen werden.

TRANSACTIONAL: Cache Änderungen werden in verteilten XA-Transaktionen durchgeführt. Eine Änderung in einer zwischengespeicherten Entität ist entweder festgeschrieben oder in beide Datenbank und Cache in derselben XA-Transaktion rückgängig gemacht.

Beim Lesen API-Dokumentation ist gut, aber Sie sollten auch die Dokumentation (its awesome) lesen Sie auch, Second Level Cache -. Strategies

  1. Transactional -. Verwenden Sie diese Strategie für schreib meist Daten, bei denen es ist wichtig, veraltete Daten in gleichzeitigen Transaktionen zu verhindern, in dem seltenen Fall eines Updates

  2. Read-Write -. Auch mit dieser Strategie für schreib meist Daten, bei denen es ist wichtig, veraltete Daten in gleichzeitigen Transaktionen zu verhindern, in dem seltenen Fall eines Updates

  3. nicht strikt-read-write - Diese Strategie macht keine Garantie für die Konsistenz zwischen dem Cache und der Datenbank. Verwenden Sie diese Strategie, wenn Daten kaum verändert und eine kleine Wahrscheinlichkeit von veralteten Daten ist nicht von entscheidender Bedeutung.

  4. Read-only - Eine Gleichzeitigkeit Strategie geeignet für Daten, die sich nie ändert. Verwenden Sie es für Referenzdaten nur.

Hope dies macht den Zweifel!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top