Frage

Ich habe einen großen Baum von Java-Objekten in meiner Desktop-Anwendung und versuche zu entscheiden, wie ich sie am besten als Datei im Dateisystem speichern kann.

Einige Gedanken, die ich hatte, waren:

  • Rollen Sie meinen eigenen Serialisierer mit DataOutputStream:Dies würde mir die größtmögliche Kontrolle über den Inhalt der Datei geben, allerdings auf Kosten einer Mikroverwaltung.

  • Einfache alte Serialisierung mit ObjectOutputStream und den verschiedenen zugehörigen Klassen:Ich bin jedoch nicht davon überzeugt, da ich die Daten spröde finde.Wenn Sie die Struktur eines Objekts ändern, werden dessen serialisierte Instanzen zerstört.Ich bin also in einen scheinbar schrecklichen Albtraum der Versionierung verwickelt.

  • XML-Serialisierung:Es ist nicht so spröde, aber deutlich langsamer als die direkte Serialisierung.Es kann außerhalb meines Programms transformiert werden.

  • JavaDB:Ich habe darüber nachgedacht, da ich mit dem Schreiben von JDBC-Anwendungen vertraut bin.Der Unterschied besteht darin, dass die Datenbankinstanz nur bestehen bleibt, während die Datei geöffnet oder gespeichert wird.Es ist nicht schön, aber...Es eignet sich bei späterem Bedarf für die Migration auf eine zentrale Serverarchitektur und bietet die Möglichkeit, das Datenmodell auf einfachere Weise abzufragen.

Ich bin gespannt, was andere Leute denken.Und ich hoffe, dass ich einen offensichtlichen und einfacheren Ansatz als die oben genannten übersehen habe.


Hier sind einige weitere Optionen, die aus den folgenden Antworten ausgewählt wurden:

  • Eine Objektdatenbank – Verfügt über deutlich weniger Infrastruktur als ORM-Ansätze und ist schneller als ein XML-Ansatz.Danke, Aku
War es hilfreich?

Lösung

db4objects könnte die beste Wahl sein

Andere Tipps

Ich würde mich für die letzte Option JavaDB (Suns Distribution von) entscheiden Derby) und verwenden Sie eine objektrelationale Ebene wie Überwintern oder iBatis.Die Verwendung der ersten drei Ansätze bedeutet, dass Sie mehr Zeit für den Aufbau einer Datenbank-Engine als für die Entwicklung von Anwendungsfunktionen aufwenden werden.

Sehen Sie sich Hibernate als eine einfachere Möglichkeit an, eine Schnittstelle zu einer Datenbank herzustellen.

Meiner Erfahrung nach ist die Verwendung einer eingebetteten Datenbank wahrscheinlich besser.SQL ist zwar nicht perfekt, aber in der Regel viel einfacher als das Entwerfen eines Dateiformats, das gut funktioniert und zuverlässig ist.

Ich habe JavaDB nicht verwendet, hatte aber viel Glück damit H2 Und SQLite.SQLite ist eine C-Bibliothek, was bei der Bereitstellung etwas mehr Aufwand bedeutet.Es bietet jedoch den Vorteil, dass die gesamte Datenbank in einer einzigen, plattformübergreifenden Bibliothek gespeichert wird.Im Grunde handelt es sich um ein vorgefertigtes, generisches Dateiformat.SQLite war so nützlich, dass ich es sogar anstelle von Textdateien in Skripten verwendet habe.

Seien Sie bei der Verwendung von Hibernate vorsichtig, wenn Sie mit einem kleinen Persistenzproblem arbeiten.Es erhöht die Komplexität und den Bibliotheksaufwand erheblich.Hibernate ist wirklich praktisch, wenn Sie mit einer großen Anzahl von Tabellen arbeiten, aber es wird wahrscheinlich umständlich sein, wenn Sie nur ein paar Tabellen benötigen.

XStream von codehaus.org

XML-Serialisierung/Deserialisierung weitgehend ohne Codierung.Sie können Anmerkungen verwenden, um es zu optimieren.Ich arbeite gut in zwei Projekten, in denen ich arbeite.

Sehen Sie sich die Präsentation meiner Benutzergruppe unter an http://cjugaustralia.org/?p=61

Ich denke, es hängt davon ab, was Sie brauchen.Sehen wir uns die Optionen an:

1) Sofort verworfen!Ich werde mich nicht einmal rechtfertigen.:) :)

2) Wenn Sie eine einfache, schnelle Ein-Methoden-Beharrlichkeit benötigen, bleiben Sie dabei.Das gesamte Datendiagramm bleibt so erhalten, wie es ist!Achten Sie darauf, wie lange Sie die persistenten Objekte verwalten werden.Wie Sie selbst betont haben, kann die Versionierung ein Problem sein.

3) Langsamer als (2), benötigt zusätzlichen Code und kann vom Benutzer bearbeitet werden.Ich würde es nur verwenden, wenn die Daten von einem Kunden in einer anderen Sprache verwendet werden sollen.

4) Wenn Sie Ihre Daten trotzdem abfragen müssen, bleiben Sie bei der DB-Lösung.

Nun, ich denke, Sie hatten Ihre Frage bereits beantwortet :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top