Ist es möglich, persistente Objekte im Dateisystem zu speichern?

9

Ich möchte persistente Objekte mit Hibernate im Dateisystem speichern, ohne eine SQL-Datenbank zu benötigen.

Ist das möglich?

    
Corvusoft 04.01.2012, 11:51
quelle

7 Antworten

4

Hibernate funktioniert über JDBC, also benötigen Sie nur einen JDBC-Treiber und einen passenden Hibernate-Dialekt.

Allerdings ist JDBC im Grunde eine Abstraktion von SQL, also wird alles, was Sie verwenden, wie eine SQL-Datenbank aussehen, gehen und quaken - Sie könnten genauso gut eine verwenden und sich viele Kopfschmerzen ersparen. Außerdem wird eine solche Lösung in Größe und Komplexität vergleichbar mit leichten Java DBs wie Derby sein.

Natürlich, wenn Sie nicht unbedingt auf die Verwendung von Hibernate bestehen, gibt es viele andere Optionen.

    
Michael Borgwardt 04.01.2012, 12:08
quelle
2

Es scheint, dass es technisch möglich ist, wenn Sie einen JDBC-Klartexttreiber verwenden; Ich habe jedoch keine Opensource-Dateien gesehen, die Schreibzugriff bieten; Der eine, den ich auf Sourceforge gefunden habe, ist schreibgeschützt.

    
mcfinnigan 04.01.2012 12:07
quelle
2

Sie haben bereits ein Entitätsmodell, ich nehme an, dass Sie das weder verlieren noch die darin enthaltenen Beziehungen verlieren wollen. Ein Entitätsmodell wird in eine relationale Datenbank übersetzt.

Hibernate und jeder andere JPA-Provider (EclipseLink) übersetzen dieses Entitätsmodell in SQL. Sie verwenden einen JDBC-Treiber, um eine Verbindung zu einer SQL-Datenbank herzustellen. Dies müssen Sie auch behalten.

Die richtige Frage ist: Kennt irgendjemand eine embedded Java SQL database , eine, die Sie von Java aus starten können? Es gibt viele, die in diesem Thema erwähnt werden:

  • HyperSQL: speichert das Ergebnis in einer SQL-Klartextdatei, die ohne weiteres in eine andere Datenbank
  • importiert werden kann
  • H2: verwendet Binärdateien mit niedriger JAR-Dateigröße
  • Derby: verwendet Binärdateien
  • Aschpool: speichert Daten in einer XML-strukturierten Datei

Ich habe HyperSQL für ein Projekt für kleine Daten und Apache Derby für ein Projekt mit riesigen Datenbanken (2 GB und mehr) verwendet. Apache Derby schneidet in diesen riesigen Datenbanken besser ab.

    
parasietje 04.01.2012 14:56
quelle
0

Ich weiß nicht genau, was Sie brauchen, aber vielleicht ist es einer der folgenden:

1 - Wenn Sie SQL einfach nicht benötigen, können Sie eine NoSQL-Datenbank verwenden.
Hibernate unterstützt es durch Hibernate OGM ( Ссылка ). Es gibt einige DBs wie Kassandra, MongoDB, CouchDB, Hadoop ... Sie haben einige Vorschläge Hier .

2 - Wenn Sie jetzt keinen Datenbankserver verwenden möchten (mit einem Dienstprozess, der immer ausgeführt wird), können Sie Apache Derby verwenden. Es ist eine DB wie jede andere SQL, aber keine Notwendigkeit für einen Server. Es verwendet eine einzelne Datei, um Daten zu behalten. Sie können die gesamte Datenbank problemlos mit Ihrem Programm transportieren.
Schauen Sie sich um: Ссылка

3 - Wenn Sie wirklich eine einfache Textdatei wollen, können Sie tun, wie Michael Borgwardt sagte. Aber ich weiß nicht, ob Hibernate in diesem Fall eine gute Idee wäre.

    
Ricardo Silva 04.01.2012 12:31
quelle
0

Sowohl H2 als auch HyperSQL unterstützen den eingebetteten Modus ( in Ihrer JVM statt in einem separaten Server laufen) und in lokale Datei (en) speichern; Dies sind immer noch SQL-Datenbanken, aber mit Hibernate gibt es nicht viele andere Optionen.

    
Viruzzo 04.01.2012 13:16
quelle
0

Nun, da die Frage immer noch offen ist und das OP sagte, er sei offen für neue Ansätze / Vorschläge, hier ist meins (ein bisschen spät, aber ok).

Kennst du Prevayler ? Es ist eine Java Prevalence-Implementierung, die alle Ihre Business-Objekte im RAM hält und Snapshots / Changelogs im Dateisystem verwaltet, so dass es extrem schnell und zuverlässig ist, da es bei einem Absturz den letzten Status wiederherstellt und jede Änderung erneut anwendet es.

Außerdem ist es sehr einfach in Ihrer App einzurichten und auszuführen.

    
everton 18.01.2012 21:18
quelle
-5

Das ist natürlich möglich. Sie können einfach die Java-Funktionen von Java verwenden. Folgende Schritte sind erforderlich: -

  1. Erstellen Sie ein Dateiobjekt 2. Erstellen Sie ein Objekt von FileInputStream (obwohl es Möglichkeiten gibt, die andere Klassen verwenden)
  2. Wickeln Sie dieses Objekt in ein Buffer-Objekt oder einfach in ein java.util.Scanner .
  3. verwendet bestimmte Schreibfunktionen des im vorherigen Schritt erstellten Objekts.

Beachten Sie, dass Ihr Objekt Serializable interface implementieren muss. Siehe folgenden Link ,

    
Amit Dwivedi 04.01.2012 12:00
quelle