9 Stimmen

Hinzufügen von Dauerhaftigkeit zu In-Memory-Datenstrukturen

Welche gängigen Techniken können Sie anwenden, um Ihre In-Memory-Datenstrukturen haltbar zu machen (d. h., wenn der Prozess abstürzt, können Sie alle zuvor ausgeführten Operationen auf dieser Datenstruktur beibehalten)?

Wenn es sich bei meiner Datenstruktur nur um eine Liste von Tupeln handelt, dann würde ich sie einfach in einer SQL-DB speichern, und das würde mir kostenlos Haltbarkeit geben. Was aber, wenn meine Datenstruktur ein Graph oder ein Baum ist?

Das Einzige, was mir einfällt, ist, alle Operationen explizit auf der Festplatte zu protokollieren (Append-Only-Protokoll) und im Falle eines Absturzes das Protokoll erneut abzuspielen, um den vorherigen Zustand zu erhalten. Wenn das Protokoll zu groß wird, gibt es einen Verdichtungsschritt. Ich nehme an, dass eine Datenbank-Engine dies intern tut, um die Haltbarkeit zu gewährleisten (Checkpointing nennt sich dieser Prozess)?

Beachten Sie übrigens, dass dies kein Szenario ist, bei dem der gesamte Datensatz nicht in den Speicher passt.

4voto

yfeldblum Punkte 64211

Versuchen Sie es doch mal mit einem Objekt-Prävalenz-Engine . Für .NET können Sie Folgendes versuchen Bamboo.Prävalenz , die eine Portierung einer ähnlichen Engine namens Prevayler für Java.

1voto

Tim Cooper Punkte 9608

Ich habe die "Mrjb"-Technologie in den Produkten von zwei Unternehmen implementiert, die im Grunde genau das ist, was Sie in Ihrer Frage vorschlagen: eine "Memory Resident Journal Backed"-Datenbank, eine In-Memory-Datenstruktur, bei der jede Änderung auf der Festplatte protokolliert wird, sobald sie eintritt. Und das funktioniert bei uns hervorragend!

http://www.edval.biz/memory-resident-programming-object-databases

Ich bin gerne bereit, unsere praktischen Erfahrungen mit der Verwendung dieses Verfahrens in der Produktion mit Ihnen zu teilen. Ich liebe die Möglichkeit, eine exakte Abfolge von Ereignissen wiederzugeben oder zu einem beliebigen Zeitpunkt zurückzugehen.

0voto

Rik Punkte 27644

Das Wort, das Sie suchen, ist "Serialisierung".

0voto

pkaeding Punkte 34458

Sie könnten sich eine Möglichkeit ausdenken, Ihre Struktur zu serialisieren, sei es mit XML, YAML, JSON, etc. Dann könnten Sie entweder speichern, dass in der DB, oder vielleicht setzen eine große Try / Catch um den wichtigsten Ausführungspunkt des Programms. Wenn dann eine nicht abgefangene Ausnahme auftritt, die das Programm zum Absturz bringt, können Sie Ihre Daten serialisieren und alle Fehlermeldungen, Stack Traces usw. protokollieren.

0voto

Chris Marasti-Georg Punkte 33348

Ja, Sie möchten die Daten in irgendeinem Format serialisieren - xml, binär, was auch immer. Je nach Programmiersprache kann dies für Sie eingebaut sein. Java hat ObjectStreams hat .NET XmlSerializer und auch eine BinaryFormatter .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X