2008-08-31 13 views
10

Mam duże drzewa obiektów Java w mojej aplikacji pulpitu i staram się wybrać najlepszy sposób na utrzymanie ich jako plik w systemie plików.Jaki jest najlepszy sposób na utrwalanie danych w aplikacji Java Desktop?

Niektóre myśli ja miałem były:

  • rolki moje własne serializer użyciu DataOutputStream: Dałoby mi największą kontrolę, co było w pliku, ale kosztem micromanaging go.

  • Prosta stara serializacja za pomocą ObjectOutputStream i jego różnych powiązanych klas: Nie jestem na tym sprzedawany, ponieważ uważam, że dane są kruche. Zmiana struktury dowolnego obiektu powoduje zerwanie serializowanych jego wystąpień. Więc jestem zamknięty w tym, co wydaje się koszmarnym wersjonowaniem koszmaru.

  • Serializacja XML: To nie jest tak kruche, ale znacznie wolniejsze niż prostowanie serializacji. Może być przekształcona poza moim programem.

  • JavaDB: Zastanawiałem się nad tym, ponieważ nie mam problemów z pisaniem aplikacji JDBC. Różnica polega na tym, że instancja bazy danych przetrwałaby tylko podczas otwierania lub zapisywania pliku. Nie jest to ładne, ale ... umożliwia migrację do architektury centralnego serwera, jeśli zajdzie taka potrzeba później i wprowadzi możliwość łatwiejszego wyszukiwania datownika w prostszy sposób.

Ciekawi mnie, co myślą inni. I mam nadzieję, że ominęło mnie oczywiste i prostsze podejście niż te powyżej.


Oto kilka odpowiedzi zaczerpnięte z poniższych opcji:

  • bazy danych Object - znacznie mniej niż ORM infrastruktury podejść i wykonuje się szybciej niż podejścia XML. dzięki aku

Odpowiedz

4

Spójrz na Hibernate jako prostszy sposób na połączenie z bazą danych.

1

XStream z codehaus.org

XML serializacji/deserializacji w dużej mierze bez kodowania. Możesz użyć adnotacji, aby go ulepszyć. Dobrze działa w dwóch projektach, w których pracuję.

Zobacz moją prezentację grupy użytkowników w http://cjugaustralia.org/?p=61

5

pójdę do ostatecznego wariantu JavaDB (dystrybucja Sun. Derby) i użyć obiektu relacyjnej warstwę jak Hibernate lub iBatis. Korzystanie z pierwszych trzech tematów oznacza, że ​​będziesz spędzać więcej czasu na budowaniu silnika bazy danych niż na tworzeniu funkcji aplikacji.

4

Z mojego doświadczenia wynika, jesteś prawdopodobnie lepiej wyłączyć za pomocą wbudowanej bazy danych.SQL, choć nie jest doskonały, jest zwykle o wiele łatwiejszy niż projektowanie formatu pliku, który działa dobrze i jest niezawodny.

Nie użyłem JavaDB, ale miałem szczęście z H2 i SQLite. SQLite jest biblioteką C, co oznacza trochę więcej pracy w zakresie wdrażania. Ma jednak zaletę przechowywania całej bazy danych w jednej, wieloplatformowej bibliotece. Zasadniczo jest to wstępnie zapakowany, ogólny format pliku. SQLite był tak przydatny, że zacząłem go używać zamiast plików tekstowych w skryptach.

Zachowaj ostrożność, używając opcji Hibernuj, jeśli pracujesz z małym problemem utrwalania. Dodaje wiele komplikacji i nakładów biblioteki. Hibernate jest naprawdę fajny, jeśli pracujesz z dużą liczbą tabel, ale prawdopodobnie będzie to uciążliwe, jeśli potrzebujesz tylko kilku tabel.

0

Myślę, że to zależy od tego, czego potrzebujesz. Zobaczmy opcje:

1) Descarded imediatelly! Nie będę nawet usprawiedliwiał. :)

2) Jeśli potrzebujesz prostej, szybkiej, jednokrotnej trwałości, trzymaj się jej. Utrzyma pełny wykres danych, jak jest! Uważaj na to, jak długo będziesz zajmował się utrzymywanymi przedmiotami. Jak sam zauważyłeś, wersjonowanie może być problemem.

3) Wolniejszy niż (2), wymaga dodatkowego kodu i może być edytowany przez użytkownika. Korzystałbym z tego, że dane mają być używane przez klienta w innym języku.

4) Jeśli chcesz w ogóle zapytać o swoje dane, pozostań przy rozwiązaniu DB.

Myślę, że już odpowiedziałeś na swoje pytanie :)

Powiązane problemy