Serializacja i backupy stanu programu

0

Napisałem program, który przechowuje dane i uznałem, że nie ma potrzeby bawić się w bazę danych, więc użyłem serializacji.

Wszystko działa ok, tylko zastanawiam się, co by tu zrobić, aby zabezpieczyć dane. Nie mogą być one utracone np. po roku wypełniania bazy. (Nie chodzi mi o backup, w razie awarii sprzętu, tylko w razie, gdyby serializacja źle przebiegła, jakiś błąd systemowy, nie wiem czy w trakcie serializacji i np. awarii prądu dobrze by się wszystko zapisało. Obecnie zapisuję stan kiedy wyko się metoda listenera closed, ale zamierzam zapisywać po wykonaniu każdej edycji w programie, a ciągłe nadpisywanie pliku chyba jest niezbyt fajne. Dlatego w bazie edytujemy tylko rekord i to plus.)

Mam kilka rozwiązań, ale żadne mi jakoś nie pasuje i liczę że może ktoś ma lepszy pomysł.

  1. Zapisywanie na ftp pliku binarnego, ale klient może nie być podłączony do sieci. Zawsze można zapisywać na dysku i tylko później synchronizować, ale bardzo nie chciałbym się w to bawić. W kodzie można po dekompilacji znaleźć login i hasło (jara można utrudnić odkodować, ale nie zabezpieczyć), poza tym już lepiej byłoby użyć gdzieś zewnętrznej bazy danych, w co też nie chcę się bawić bo nie widzę takiej potrzeby, serializacja się sprawdza jak na razie.

  2. Zapisywać i plikom dodawać w nazwie datę i czas co do sekundy, potem zawsze wczytywać najnowszy plik i w razie jakby któryś nie "wchodził" komunikat, że odzyskano dane dopiero z daty ... itd. i załadowanie najnowszego, który zadziała. Ma to jednak znaczną wadę, bo czasem w komputerze dzieją się dziwaczne rzeczy i data systemowa może zostać przestawiona, komputer może ześwirować itd. Ew. można wprowadzać zamiast daty ID, ale boje się żeby nie przekroczyło to kiedyś 255 znaków (choć to mało prawdopodobne) i zawsze można można kiedyś odliczać od nowa, nie wiem też jakie są ograniczenia w tym względzie w innych systemach niż win7.

Inna sprawa to zmuszanie użytkownika do backupu. Czy robi się coś takiego? Np. po tygodniu przy wyłączeniu programu przypominamy o funkcji "export" i by wysłał to sobie na pendrive'a?

Czekam na propozycje.

0

Pewnie, że jest lepszy sposób - bazy, po to one są.
Zamiast skorzystać z relacyjnych baz danych z obsługą transakcji to dziadujesz i przy okazji trafiasz na problemy, które właśnie projektanci BD odwalili już wcześniej.

0

Możesz wybrać bazę danych napisaną w 100% w Javie, takie będą łatwiejsze do obsłużenia. Dla przykładu: http://www.h2database.com/

0

Baza z automatu ma być zainstalowana razem z programem i użytkownik nie powinien nawet wiedzieć, że ma bazę odpaloną na komputerze. Program nie był też zbytnio na bazę nastawiony, więc musiałbym całość trochę przeprojektować, żeby wszystko w relacje upchać ładnie i do 3postaci normalnej to chociaż doprowadzić.

A co z przypominaniem użytkownikowi co jakiś czas, że dobrze jakby zgrał sobie plik serializowany/bazę danych np na pendrivea? Robi się coś takiego?

0

h2database to JAR, a jego baza danych to kilka plików, które możesz dołączyć do programu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1