Die Prävalenz ist eine einfache Technik, um einem speicherinternen Objektmodell ACID-Eigenschaften bereitzustellen, die auf binärer Serialisierung und Write-Ahead-Protokollierung basieren. Es funktioniert so:
- Beginnen Sie mit einem Schnappschuss. Serialisieren Sie das Objektmodell und schreiben Sie es in eine Datei.
- Erstellen Sie eine Journaldatei. Serialisieren Sie für jeden Aufruf des Objektmodells den Aufruf und seine Argumente.
- Wenn das Journal zu groß wird, werden Sie heruntergefahren oder es ist auf andere Weise praktisch. Führen Sie einen Prüfpunkt durch: Schreiben Sie einen neuen Schnappschuss und schneiden Sie das Journal ab.
- Laden Sie den letzten Schnappschuss und führen Sie alle im Journal aufgezeichneten Anrufe erneut aus, um ein Rollback oder eine Wiederherstellung nach einem Absturz oder einem Stromschlag durchzuführen.
Die Vorsichtsmaßnahmen, die erforderlich sind, damit dies funktioniert, sind:
- Lassen Sie veränderbare Objektreferenzen nicht entkommen oder in die Prävalenzschicht eintreten. Sie benötigen eine Art Proxy- oder OID-Schema, als würden Sie RPC ausführen. (Dies ist ein so häufiger Fehler für Neulinge, dass er als " Taufproblem " bezeichnet wird.)
- Die gesamte Logik, die von einem Anruf aus erreichbar ist, muss vollständig deterministisch sein und darf keine geschäftslogikbedeutenden E / A- oder Betriebssystemaufrufe ausführen. Das Schreiben in ein Diagnoseprotokoll ist wahrscheinlich in Ordnung, das Abrufen der Systemzeit oder das Starten eines asynchronen Delegaten im Allgemeinen jedoch nicht. Auf diese Weise wird das Journal identisch wiedergegeben, auch wenn es auf einem anderen Computer oder zu einem anderen Zeitpunkt wiederhergestellt wurde. (Der meiste Prävalenzcode bietet einen alternativen Zeitaufruf, um den Transaktionszeitstempel abzurufen.)
- Die Parallelität von Autoren führt zu Mehrdeutigkeiten bei der Interpretation von Journalen, daher ist dies verboten.
Ist es weil ...
- Leute entwickelten einen schlechten Geschmack für sie, nachdem sie versucht hatten, einen für ein Projekt zu verwenden, das nicht gut dafür geeignet war * ?
- Klaus Wuestefelds strenge Befürwortung hat die Leute abgeschaltet ?
- Leute, die das imperative Programmiermodell mögen , mögen es nicht , E / A von der Berechnung zu trennen , sondern die Berechnung lieber mit E / A und Threading-Aufrufen zu verschachteln?
- Prävalenzschichten sind konzeptionell so einfach und so eng an die Merkmale des Frameworks gebunden, in dem sie sich befinden, dass sie normalerweise für das Projekt maßgeschneidert werden, was sie zu fremd / nicht standardisiert / riskant macht.
- Es ist einfach zu schwer, klar zu halten, was Sie tun müssen, um es nicht zu tun.
- Die Köpfe von Neulingen scheinen nur zu explodieren, wenn sie mit etwas konfrontiert werden, das nicht die gleiche Art von zweistufiger datenbankgesteuerter App ist, die sie in der Schule geschrieben haben? ;)
* Der gesamte Datensatz passt in den Arbeitsspeicher , Sie benötigen keine Writer-Parallelität und Sie müssen keine Ad-hoc-Abfragen, Berichte oder Exporte in ein Data Warehouse durchführen. Mit Entschuldigungen an SQLite ist die Verbreitung eine Verbesserung der Sicherungsdateien und kein Ersatz für Oracle.