Frage

Ich frage mich, ob es für Hibernate Second-Level-Cache möglich ist (wir verwenden EHCache), eine Anwendung zu ermöglichen, eine Entity-Cache, der an die DB comitted wurde, wenn er weiß, dass keine anderen Anwendungen, die die DB modifizieren.

Mein Gedanke ist, dass, wenn ich Rekord A aktualisieren, dann habe ich den Wert des Datensatzes A kennen und dass cachen können, JVM-Clustering-Systeme wie Terracotta diese Art von Verhalten in Bezug auf die JVM-Heap-Speicher unterstützen mit Hilfe von Java-Synchronisationssperren.

EHCache Lock-Modus Konfiguration in Hibernate

War es hilfreich?

Lösung

Stand der Technik POJO ist in Aktion Buch spricht über sie

  

Wenn eine Single-Server-Anwendung aktualisiert die Datenbank der Persistenz-Framework, das Framework aktualisiert den Prozess-Level-Cache.

Und ...

  

Im Cache-Objekte, die aktualisierbar sind, sollten typischerweise optimistische Sperren verwenden, weil das die Anwendung verhindern von blind Änderungen in der Datenbank zu überschreiben. Und wenn eine Transaktion ein im Cache gespeicherte Objekt aktualisiert, die bereits in der Datenbank geändert worden waren, die optimistische Sperrversagen bewirkt, dass die Transaktion rückgängig gemacht werden. Der Persistenz-Framework wird die veralteten Daten aus dem Cache entfernen, und die Anwendung kann Transaktion mit der neuesten Version der Daten wiederholen.

Und eine der folgenden Strategien wählen, um JPA mit Hibernate Buch nach

  • Transactional: in einer verwalteten Umgebung nur, es garantiert die volle Transaktions Trennung bis wiederholbare Lese, falls erforderlich. Verwenden Sie diese Strategie für Lese meist Daten, wo es kritisch veraltete Daten in gleichzeitigen Transaktionen zu verhindern, im seltenen Fall eines Updates.
  • Lesen-Schreiben: Diese Strategie verpflichtet Isolation lesen hält, eine timestamping mit und Mechanismus ist nur in nicht gruppierten Umgebungen. Auch diese Strategie für die Datenlese meist verwenden, wo es in dem seltenen Fall eines Updates.
  • veraltete Daten in gleichzeitigen Transaktionen, zu verhindern kritisch ist

In dem ursprünglichen anwser Hinzugefügt: Hibernate GARANTIERT NICHT Konsistenz zwischen dem Cache und der Datenbank, ob Sie @Cache verwenden (usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE). Wenn Sie es verwenden mögen, so dass Sie einen ausreichend kurzen Ablauf Timeout konfigurieren, sollten Sie die Perfomance beeinflussen kann.

Grüße,

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