Mam maszynę wirtualną (Debian) działającą na hoście maszyny fizycznej. Maszyna wirtualna działa jako bufor dla danych, które często otrzymuje przez sieć lokalną (okres dla tych danych wynosi 0,5 s, więc dość wysoka przepustowość). Wszelkie otrzymane dane są przechowywane na maszynie wirtualnej i wielokrotnie przekazywane do zewnętrznego serwera przez UDP. Gdy serwer zewnętrzny potwierdzi (przez UDP), że otrzymał pakiet danych, oryginalne dane są usuwane z maszyny wirtualnej i nie są ponownie wysyłane na serwer zewnętrzny. Połączenie internetowe łączące maszynę wirtualną z zewnętrznym serwerem jest zawodne, co oznacza, że może być wyłączone przez kilka dni.
Fizyczna maszyna, na której znajduje się maszyna wirtualna, jest losowo odcinana kilka razy dziennie. Nie ma sposobu, aby powiedzieć, kiedy to nastąpi, i nie można dodać zasilacza UPS, baterii ani podobnego rozwiązania do systemu.
Pierwotnie dane były przechowywane w bazie danych HSQLDB opartej na plikach na maszynie wirtualnej. Jednak częste przerwy w dostawie prądu ostatecznie powodują uszkodzenie pliku skryptu bazy danych (nie na poziomie systemu plików, tzn. Jest on czytelny, ale HSQLDB nie może tego zrozumieć), co prowadzi do mojego pytania:
Jak dane powinny być przechowywane w środowisku, w którym przerwy w dostawie prądu mogą się często zdarzać?
Jedną z opcji, o której mogę myśleć, jest używanie plików płaskich, zapisywanie każdego pakietu danych jako pliku w systemie plików. W ten sposób, jeśli plik jest uszkodzony z powodu utraty zasilania, można go zignorować, a reszta danych pozostanie nienaruszona. Powoduje to jednak kilka problemów, głównie związanych z ilością danych, które prawdopodobnie są przechowywane na maszynie wirtualnej. Co 0,5 sekundy między każdą częścią danych, w ciągu 10 dni zostanie wygenerowanych 1 728 000 plików. Oznacza to co najmniej użycie systemu plików ze zwiększoną liczbą i-węzłów do przechowywania tych danych (w bieżącej konfiguracji systemu plików zabrakło i-węzłów przy ~ 250 000 komunikatów i zużyte 30% miejsca na dysku). Ponadto zarządzanie jest trudne (nie niemożliwe).
Są jakieś inne opcje? Czy istnieją silniki baz danych działające na Debianie, które nie uległyby uszkodzeniu w wyniku awarii zasilania? Jakiego systemu plików należy w tym celu użyć? ext3 jest obecnie używany.
Oprogramowanie działające na maszynie wirtualnej jest napisane w Javie 6, więc mam nadzieję, że rozwiązanie nie będzie niezgodne.