Frage

Diese Frage ist über den Unterschied zwischen Readwrite und NonStrictReadWrite Cache Gleichzeitigkeit Strategien für NHibernate Second Level Cache.

Wie ich es verstehe, ist der Unterschied zwischen diesen beiden Strategien ist relevant, wenn Sie eine verteilte repliziert Cache - nicht strikte wird nicht garantieren, dass ein Cache mit der exakt gleichen Wert wie ein anderer Cache hat, während strenge lesen / schreiben soll - den Cache-Provider unter der Annahme, tut die entsprechende verteilte Verriegelung.

Der Teil verstehe ich nicht, wie die strenge vs nicht strikte Unterscheidung relevant ist, wenn Sie einen einzigen Cache haben, oder eine verteilte partitioniert (nicht repliziert) Cache. Kann es relevant sein? Es scheint mir, dass in nicht repliziert Szenarien wird der Zeitstempel-Cache, dass veraltete Ergebnisse sicherzustellen, werden nicht bedient. Wenn es relevant sein kann, würde Ich mag ein Beispiel sehen.

War es hilfreich?

Lösung

Was Sie sich direkt übernehmen, in einer einzigen Ziel / Thread-Umgebung gibt es kaum einen Unterschied. Allerdings, wenn Sie an dem Cache-Provider sehen gibt es ein bisschen auf einmal in einem Multi-Threaded-Szenario gehen.

Wie ein Objekt erneut zwischengespeichert davon modifiziert ist Zustand, in dem nicht streng unterscheidet. Zum Beispiel, wenn Ihr Ziel ist es viel kräftigeren nachladen, aber sie würde es gerne nach einem Update, anstatt den nächsten Benutzer mit der Rechnung der Grundlage, dann werden Sie unterschiedliche Leistung mit strengen vs nicht-streng sehen. Zum Beispiel: Nicht-strikte einfach ein Objekt aus dem Cache-Dumps, nachdem eine Aktualisierung durchgeführt wird ... Preis wird für den Abruf auf den nächsten Zugriff anstelle eines post-Update-Ereignishandler bezahlt. Im strengen Modell wird die Re-Cache Pflege automatisch übernommen. Ähnliches passiert mit Einsätzen, nicht streng nichts tun wird, wo strenge hinter gehen und die neu eingefügten Objekt in den Cache geladen werden.

In nicht-strengen Sie haben auch die Möglichkeit eines schmutzigen lesen, da der Cache nicht zum Zeitpunkt des Lese gesperrt würden Sie nicht das Ergebnis einer anderen Änderung des Artikels Thread sehen. In strikten würde der Cache-Schlüssel für das Element sperren und Sie würden statt, aber das absolute jüngste Ergebnis sehen.

Also, auch in einer einzigen Zielumgebung, wenn es eine große Menge an gleichzeitigen ist liest / auf Objekte bearbeitet, dann haben Sie eine Chance, Daten zu sehen, die nicht wirklich korrekt ist.

Das ist natürlich ein Problem wird, wenn eine Speicherung durchgeführt wird und ein Bearbeitungsbildschirm wird geladen: die Person denken, sie die neueste Version des Objekts gerade bearbeiten wirklich nicht der Fall ist, und sie sind in eine böse Überraschung, wenn sie versuchen, die Änderungen an die veralteten Daten speichern sie geladen.

Andere Tipps

Ich habe einen Beitrag erstellt hier Erklärung der Unterschiede. Bitte schauen und fühlen sich frei zu äußern.

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