Was sind einige der beliebten Techniken, die Sie anwenden können, um Ihre In-Memory-Datenstrukturen zu verbessern? Wenn der Prozess abstürzt, können Sie alle zuvor ausgeführten Operationen für diese Datenstruktur beibehalten?
Wenn meine Datenstruktur nur eine Liste von Tupeln enthält, dann würde ich sie einfach in einer SQL DB speichern, und das würde mir Haltbarkeit für freies geben. Was aber, wenn meine Datenstruktur eine Grafik oder ein Baum ist?
Das Einzige, was mir einfällt, ist, alle Operationen explizit auf Festplatte zu protokollieren (nur für Anhänge) und im Falle eines Absturzes das Protokoll erneut abzuspielen, um den vorherigen Zustand beizubehalten. Wenn das Protokoll zu groß wird, wird ein Komprimierungsschritt ausgeführt. Ich vermute, das ist, was eine Datenbank-Engine intern für die Haltbarkeit tut (Checkpointing ist, wie dieser Prozess genannt wird)?
Beachten Sie, dass dies kein Szenario ist, in dem der gesamte Datensatz nicht in den Speicher passt.
Vielleicht möchten Sie eine Object-Prävalenz-Engine ausprobieren. Für .NET empfiehlt es sich, Bamboo.Prevalence zu testen. Dies ist ein Port einer ähnlichen Engine namens Prevayler für Java.
Ich habe die "Mrjb" -Technologie in Produkten von zwei Unternehmen implementiert, was im Grunde genau das ist, was Sie in Ihrer Frage vorgeschlagen haben: eine "Memory Resident Journal Backed" -Datenbank, eine In-Memory-Datenstruktur, in der sich jede Änderung befindet wird protokolliert, wie es passiert. Und es funktioniert gut für uns!
Ich würde gerne unsere Erfahrungen aus der realen Welt mit ihnen im Produktionskontext teilen. Ich liebe es, eine genaue Abfolge von Ereignissen wiedergeben oder zu einem beliebigen Zeitpunkt zurückrollen zu können.
Sie könnten einen Weg finden, um Ihre Struktur zu serialisieren, sei es mit XML, YAML, JSON, etc. Dann könnten Sie das entweder in der DB speichern, oder vielleicht einen großen try / catch um den Hauptausführungspunkt an die Programm. Wenn dann eine nicht abgefangene Ausnahme auftritt, die zum Absturz des Programms führt, könnten Sie Ihre Daten serialisieren und Fehlermeldungen, Stack-Traces usw. protokollieren.
Ja, Sie möchten die Daten in ein beliebiges Format serialisieren - xml, binary, was auch immer. Je nach Programmiersprache kann dies für Sie eingebaut sein. Java hat ObjectStreams , .NET hat XMLSerializer und auch BinaryFormatter .
Jede Antwort auf Ihre Frage wird etwas wie das tun, was ein ACID-Datenbanksystem tut. Daher würde ich sagen, dass Ihre beste Wette darin besteht, ein RDBMS zu verwenden, um Ihren Anwendungsstatus zu speichern und zu aktualisieren, wenn Sie eine (Anwendungs-) Transaktion haben, die nicht verloren gehen darf.
Tags und Links serialization data-structures