Frage

Prävalenz ist eine einfache Technik, um einem In-Memory-Objektmodell, das auf Binärserialisierung und Schreibbetrütung basiert, säurliche Eigenschaften bereitzustellen. Es funktioniert so:

  • Beginnen Sie mit einem Schnappschuss. Serialisieren Sie das Objektmodell und schreiben Sie es in eine Datei.
  • Erstellen Sie eine Journal -Datei. Serialisieren Sie für jeden Aufruf in das Objektmodell den Anruf und seine Argumente.
  • Wenn das Journal zu groß wird, werden Sie geschlossen, oder es ist ansonsten praktisch, führen Sie einen Checkpoint durch: Schreiben Sie einen neuen Snapshot und verkürzen das Journal.
  • Laden Sie den letzten Snapshot, um zurückzurollen oder sich von einem Absturz- oder Power-Treffer zu erholen, und formen Sie alle im Journal aufgezeichneten Anrufe erneut aus.

Die Vorsichtsmaßnahmen, die für diese Arbeit erforderlich sind, sind:

  • Lassen Sie sich nicht zu, dass sich veränderliche Objektreferenzen entziehen oder in die Prävalenzschicht eingeben. Sie benötigen eine Art Proxy- oder OID -Schema, als ob Sie RPC machen würden. (Dies ist ein so häufiger Neulingsfehler, der den Spitznamen "The 'Taufproblem'.)
  • Die gesamte Logik, die aus einem Anruf erreichbar ist, muss vollständig deterministisch sein und dürfen keine business-logisch-meringenden E/A- oder Betriebssystemanrufe durchführen. Das Schreiben in ein diagnostisches Protokoll ist wahrscheinlich in Ordnung, aber die Systemzeit oder das Starten eines asynchronen Delegiertens ist im Allgemeinen nicht. Dies ist so, dass das Journal identisch wiederholt, auch wenn es auf einer anderen Maschine oder zu einer anderen Zeit wiederhergestellt wird. (Der meiste Prävalenzcode bietet einen alternativen Zeitaufruf, um den Transaktionszeitstempel zu erhalten.)
  • Die Genauigkeit der Schriftstellerin stellt Unklarheiten in der Journal -Interpretation ein und ist daher verboten.

Ist es weil ...

  • Die Leute entwickelten einen schlechten Geschmack für sie, nachdem sie versucht hatten, eines für ein Projekt zu verwenden, das nicht gut geeignet war* dazu?
  • Klaus Wuestefelds Streifte Interessenvertretung Leute ausgeschaltet?
  • Menschen, die das imperative Programmiermodell mögen E/A von der Berechnung trennen, bevorzugt stattdessen die Berechnung mit E/A- und Threading -Aufrufen?
  • Prävalenzschichten sind so konzeptionell einfach und eng an die Eigenschaften des Rahmens gebunden, in dem sie leben, dass sie normalerweise für das Projekt kundenspezifisch gerollt sind, was sie zu fremd/nicht standardmäßig/riskant macht?
  • Es ist einfach zu schwer, das gerade zu behalten, was Sie tun müssen, um nicht zu tun?
  • Die Köpfe von Neulingen scheinen einfach zu explodieren, wenn sie mit etwas konfrontiert sind, das nicht die gleiche datenbankgesteuerte App-App ist, die sie in der Schule schreiben gelernt haben? ;))

*Das Ganzer Datensatz passt in RAM, Sie benötigen keine Autor-Parallelität und müssen keine Ad-hoc-Abfragen, Berichterstattung oder Berichterstattung oder in ein Data Warehouse durchführen. Mit Entschuldigung bei SQLite ist die Prävalenz eine Verbesserung bei Save-Files, kein Ersatz für Oracle.

War es hilfreich?

Lösung

Ich denke, ein Teil des Problems ist, dass sie einen sehr spezifischen Anwendungsfall haben (Ihr nicht geeigneter Grund). Ich habe Systeme aufgebaut und gearbeitet, die diesen Ansatz verwenden, und wenn Sie ein Problem haben, das tatsächlich dieses Problem ist, kann es eine wunderbare Lösung sein.

Ein weiterer Teil ist, dass es einige der schmerzhafteren Teile der benutzerdefinierten Datenspeicherung aussieht, die Sie vor mehr als 10 Jahren gefunden haben und einige der gleichen Fallstricke haben (denken Sie beispielsweise mit Batch aktualisiert), was Ihre einbringt) "Too Custom" -Punkt, aber es macht es auch schwierig, die Regalteile zu finden, die höflich damit arbeiten.

Der letzte Teil ist, dass sie in vielen Fällen verdammt schwer zu befragen sind und die Leute im Allgemeinen ziemlich gewöhnt sind, ihre Antworten jetzt zu erhalten.

Andere Tipps

Ich denke, Sie müssen zuerst nachweisen, dass so viele Entwickler sie absolut hassen. Ich glaube nicht, dass das der Fall ist. Betrachten Sie diese Fowler vor einiger Zeit ein Muster dafür hier.

Die Antwort auf die Frage ist, dass die Theorie zwar einfach ist, die Praxis nicht.

Das Testen eines solchen Aufbaus erfordert Dutzende von Testfällen, fügen Sie einen Mutli -Prozess oder einen Multi -Thread -Code hinzu, und dies springt auf Hunderte möglicher Bedingungen, die geprüft werden müssen, sowohl für die Persistenz als auch für die Wiederherstellung.

Jeder Transaktionsmonitor wie CICS, Tuxedo, Weblogic, WebSphere, JBoss oder .NET liefert alle diese Einrichtungen auf saubere und getestete Weise. Und jede Datenbank liefert für die meisten Anwendungen "genügend" Transaktion/Persistenz.

Es wurde meistens ein Fall dieses Rades vor langer Zeit erfunden und perfektioniert.

Die Voranforderungen klingen etwas mühsam, um sich zu codieren, insbesondere bei den meisten Systemen, die keine Säure -Compliance benötigen, wenn sie im Speicher ausgeführt werden. Auch Overhead klingt ein bisschen böse - dort gibt es viele staatliche Tracking.

Lizenziert unter: CC-BY-SA mit Zuschreibung
scroll top