Frage

ich eine Farm von Servern haben, jeder Server ist eine identische Anfrage an die Datenbank regelmäßig zu machen. Diese Abfrageergebnisse werden in einem gemeinsam genutzten Cache zwischengespeichert, zugänglich für alle Server.

Wie kann ich sicherstellen, dass eine neuere Abfrage nicht von einer älteren Abfrage überschrieben bekommt? Gibt es eine Möglichkeit, die Abfragen von Versionsverwaltung irgendwie, durch die Zeit zum Beispiel, so dass dieser nicht geschieht? Wie mit gleichzeitigen Abfragen umgehen?

Danke!

Edit: db ist SQL Server. Abfrage ist eine select-Anweisung. Und Mechanismus Cachen ist sehr einfach: einfach schreiben, ohne Verriegelung. Und das ist, weil es derzeit keine Möglichkeit, die Reihenfolge der Auswahlabfragen zu erzählen.

War es hilfreich?

Lösung

Ein Ansatz ist einen globalen Update-Zähler in der Datenbank haben, entweder für Updates oder für liest (Updates effizienter ist, aber härter auch Recht zu bekommen).

So wird bei jeder Aktualisierung, erhöhte auch den globalen Zähler. Auf jeder lesen, lesen Sie den globalen Zähler, und setzen Sie die Daten in den Cache zusammen mit dem Zählerwert. Nur den Cache-Inhalt überschreiben, wenn der Zählerwert größer ist.

Aufgrund der Datenbank Isolation sollten Transaktionen erscheinen, als ob sie in einer seriellen Art und Weise geschehen (vorausgesetzt, Sie die SERIALIZABLE Isolationsstufe gewählt haben). Das wiederum wird bedeuten, dass streng höhere Zählernummern auf neuere Daten beziehen.

Andere Tipps

Wo ist der Cache? Ist es eine Plattendatei? Oder eine Tabelle in der Datenbank?

Und was bedeutet es, wenn Sie sagen, eine ältere Abfrage möglicherweise eine neuere Version überschreiben? Ist es nicht wahr, dass die am meisten kürzlich abgeschlossenen Abfrage (oder vielleicht der am meisten vor kurzem gestartet wurde) ist die neueste?

Sie sollten den Cache Container sperren, bevor jede Abfrage durchgeführt wird, ob das ist eine Datei oder eine Tabelle. Jeder Server sollte nur die Abfrage durchführt, wenn er die Sperre erhalten kann, sonst sollte es für die gesperrte Ressource warten. So wird der Cache nur die letzten Ergebnisse enthalten wird.

Ist das entlang der Linien von dem, was Sie fragen?

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