2009-07-21 7 views
8

Ich muss ein Speicherdateiformat für einige einfache Daten in einem Tabellenformat erstellen, versuchte, HDF5 zu verwenden, aber wegen einiger Probleme gerade aufgegeben zu haben, und ich ' Ich möchte die Verwendung eingebetteter Datenbanken erneut prüfen, um festzustellen, ob sie für meine Anwendung schnell genug sind.Java eingebettete Datenbank w/Fähigkeit, als eine Datei zu speichern

Gibt es eine seriöse eingebettete Java-Datenbank, die die Möglichkeit bietet, Daten in einer Datei zu speichern? Die einzige, die mir bekannt ist, ist SQLite (Java-Bindungen verfügbar). Ich habe H2 und HSQLDB ausprobiert, aber aus der Box scheinen sie mehrere Dateien zu erstellen, und es ist sehr wünschenswert für mich, eine Datenbank in einer Datei zu haben.

bearbeiten: halbwegs schnelle Leistung ist wichtig. Objektspeicher ist nicht; Für Performance-Probleme muss ich nur ganze Zahlen und BLOBs speichern. (+ einige Zeichenfolgen, aber nichts Leistungskritisches)

bearbeiten 2: Speicherdateneffizienz ist wichtig für größere Datenmengen, so ist XML out.

+0

Haben Sie Apache Derby/JavaDB ausprobiert? Ich habe keine Ahnung, wie es Daten hinter den Kulissen speichert, aber es ist eine andere Sache, die Sie betrachten können. –

+0

Firebird erfüllt definitiv die einigermaßen schnelle Anforderung. :) – jsight

+0

Versuchen Sie https://github.com/jankotek/MapDB – kervin

Antwort

0

Ich denke für jetzt werde ich einfach weiter HDF5 für den persistenten Datenspeicher verwenden, in Verbindung mit H2 oder einer anderen Datenbank für In-Memory-Indizierung. Ich kann SQLite nicht dazu bringen, BLOBs mit dem Java-Treiber zu benutzen, den ich habe, und ich kann Firebird nicht embedded laufen lassen, und ich vertraue H2 mit PAGE_STORE noch nicht.

2

Sobald ich eine Objektdatenbank verwendet, die ihre Daten in einer Datei gespeichert. Es hat eine Java- und eine .NET-Schnittstelle. Vielleicht möchten Sie es überprüfen. Es heißt db4o.

+1

+1: für die Erwähnung von db4o, da ich es geschrieben hätte, wenn Sie nicht – dfa

1

Wenn Sie nach einer kleinen und schnellen Datenbank suchen, um vielleicht mit einem anderen Programm zu versenden, würde ich überprüfen Apache Derby Ich weiß nicht, wie Sie Embedded-Datenbank definieren würden, aber ich habe dies in einigen Projekten als Debugging-Datenbank verwendet werden eingecheckt mit der Quelle und ist sofort auf jeder Entwickler-Maschine verfügbar.

+1

Apache Derby hatte, ist jetzt die Java DB. Als solches ist es gut dokumentiert und unterstützt und kam wahrscheinlich mit Ihrer IDE. – daveb

0

Da Sie sqlite erwähnt haben, nehme ich an, dass Sie nichts gegen eine native db haben (solange gute Java-Bindungen verfügbar sind). Firebird funktioniert gut mit Java und macht standardmäßig Einzelspeicherung.

Sowohl H2 als auch HSQLDB wären eine ausgezeichnete Wahl, wenn Sie nicht die einzige Dateianforderung hätten.

+1

verwenden Sie den Jaybird-Treiber? –

1

Dies ist keine SQL-Engine, aber wenn Sie Prevayler mit XStream verwenden, können Sie ganz einfach eine einzige XML-Datei mit all Ihren Daten erstellen. (Prevayler nennt es eine Snapshot-Datei.)

Obwohl es nicht SQL-basiert ist, und so ein wenig Ellenbogen Fett erfordert, macht seine in sich geschlossene Natur Entwicklung (und vor allem gute Tests) viel einfacher. Plus, es ist unglaublich schnell und zuverlässig.

3

Wenn Sie nur Lesezugriff benötigen, kann H2 read the database files from a zip file.

Auch wenn Sie keine Persistenz benötigen, ist es möglich, eine In-Memory-Version von H2 zu haben.

Wenn Sie sowohl Lese-/Schreibzugriff als auch Persistenz benötigen, können Sie mit Datenbanken vom Standard-SQL-Typ Pech haben, da diese die Index- und Datendateien weitgehend einheitlich verwalten.

3

H2 verwendet nur eine Datei, wenn Sie den neuesten H2-Build mit der Option PAGE_STORE verwenden. Es ist ein neues Feature, also könnte es nicht solide sein.

1

Sie möchten vielleicht jdbm auschecken - wir verwenden es für mehrere Projekte, und es ist ziemlich schnell. Es verwendet 2 Dateien (eine Datenbankdatei und eine Protokolldatei), wenn Sie es für Apps vom Typ ACID verwenden. Sie können jedoch direkt zum direkten Datenbankzugriff springen (keine Protokolldatei), wenn Sie keine feste ACID benötigen.

JDBM unterstützt ganz einfach Integer und Blobs (alles, was Sie wollen) und ist ziemlich schnell. Es ist nicht wirklich auf Parallelität ausgelegt, daher müssen Sie die Sperre selbst verwalten, wenn Sie mehrere Threads haben. Wenn Sie jedoch nach einer einfachen, soliden eingebetteten Datenbank suchen, ist dies eine gute Option.

+0

JDBM wurde vom Autor mit MapDB unter http://www.mapdb.org/ ersetzt. – kervin

+0

Ein bisschen Spaß Geschichte: Jan Kotek - einer der späteren jdbm Mitarbeiter, aber definitiv nicht der ursprüngliche Autor - gab das Projekt in Mapdb und hat einige erstaunliche Arbeit damit getan. mapdb ist nicht einmal mehr entfernt wie jdbm - es ist in jeder erdenklichen Weise besser, und Jan beeindruckt weiter. Es lohnt sich auszuchecken. –

1

Chronicle Map ist eine eingebettete reine Java-Datenbank.

  • Es speichert Daten in einer Datei, i. e.

    ChronicleMap<Integer, String> map = ChronicleMap 
        .of(Integer.class, String.class) 
        .averageValue("my-value") 
        .entries(10_000) 
        .createPersistedTo(databaseFile); 
    
  • Chronicle Karte ist reif (keine schweren Speicher Bugs seit Monaten berichtet, während es im aktiven Gebrauch ist).

  • Independent-Benchmarks zeigen, dass die Chronikkarte the fastest und the most memory efficient Schlüssel-Wert-Speicher für Java ist.

Der große Nachteil für Ihren Anwendungsfall ist, dass Chronicle Karte nur ein einfaches Schlüssel-Wert-Modell, jedoch komplexere Lösung auf es bauen könnte unterstützt.

Haftungsausschluss: Ich bin der Entwickler von Chronicle Map.

1

Nitrite Datenbank http://www.dizitart.org/nitrite-database.html

NoSQL Objekt (NO2 a.k.a Nitrite) Datenbank ist eine Open-Source-nosql eingebettete Dokumentspeicher geschrieben in Java mit MongoDB wie API. Es unterstützt sowohl speicherinterne als auch einzelne Datei basierte persistente Speicher.

Verwandte Themen