Ich habe eine virtuelle Maschine (Debian), die auf einem physischen Maschinenhost ausgeführt wird. Die virtuelle Maschine fungiert als Puffer für Daten, die sie häufig über das lokale Netzwerk empfängt (der Zeitraum für diese Daten beträgt 0,5 s, also einen relativ hohen Durchsatz). Alle empfangenen Daten werden auf der virtuellen Maschine gespeichert und wiederholt über UDP an einen externen Server weitergeleitet. Sobald der externe Server (über UDP) bestätigt, dass er ein Datenpaket empfangen hat, werden die ursprünglichen Daten von der virtuellen Maschine gelöscht und nicht erneut an den externen Server gesendet. Die Internetverbindung zwischen der VM und dem externen Server ist unzuverlässig, was bedeutet, dass sie möglicherweise tagelang ausgefallen ist.
Die physische Maschine, auf der sich die VM befindet, wird mehrmals täglich zufällig ausgeschaltet. Es kann nicht festgestellt werden, wann dies geschieht, und es ist nicht möglich, dem System eine USV, eine Batterie oder eine ähnliche Lösung hinzuzufügen.
Ursprünglich wurden die Daten in einer dateibasierten HSQLDB-Datenbank auf der virtuellen Maschine gespeichert. Die häufigen Stromausfälle führen jedoch dazu, dass die Datenbankskriptdatei beschädigt wird (nicht auf Dateisystemebene, dh lesbar, aber HSQLDB kann keinen Sinn daraus machen), was zu meiner Frage führt:
Wie sollten Daten in einer Umgebung gespeichert werden, in der Stromausfälle häufig vorkommen können und müssen?
Eine Option, die mir in den Sinn kommt, ist die Verwendung von Flatfiles, bei denen jedes Datenpaket als Datei im Dateisystem gespeichert wird. Auf diese Weise kann eine aufgrund eines Stromausfalls beschädigte Datei ignoriert werden und der Rest der Daten bleibt erhalten. Dies wirft jedoch einige Probleme auf, die hauptsächlich mit der Datenmenge zusammenhängen, die wahrscheinlich auf der virtuellen Maschine gespeichert ist. Zwischen den einzelnen Daten werden innerhalb von 10 Tagen 1.728.000 Dateien erstellt. Dies bedeutet zumindest, dass ein Dateisystem mit einer erhöhten Anzahl von Inodes zum Speichern dieser Daten verwendet wird. Auch ist es schwierig (nicht unmöglich), damit umzugehen.
Gibt es noch andere Möglichkeiten? Gibt es unter Debian laufende Datenbank-Engines, die nicht durch Stromausfälle beschädigt würden? Welches Dateisystem sollte dafür verwendet werden? Derzeit wird ext3 verwendet.
Die Software, die auf der virtuellen Maschine ausgeführt wird, wurde mit Java 6 geschrieben, sodass die Lösung hoffentlich nicht inkompatibel ist.