Confronto tra database integrati Java

Intendo sviluppare una piccola applicazione (Java) per gestire le mie finanze. Credo di dover utilizzare un database incorporato, ma non ho esperienza in merito a questo problema. Ho provato a guardare alcuni dei prodotti disponibili , ma non riesco a decidere quale sarebbe più adatto a me. H2 , HSQLDB , Derby e Berkeley DB sembrano essere dei buoni candidati, ma non vedo ancora come si confrontino tra loro. Apprezzo il tuo aiuto confrontandoli e aiutandomi a decidere quale usare.

Intendo utilizzare Hibernate per la mia applicazione (a meno che non si consiglia di utilizzare l’API fornita da DBMS), ma voglio anche poter modificare facilmente il database utilizzando uno strumento di navigazione SQL (modificando lo schema e modificando i dati).

Grazie.

O

  • HSQLDB – Usato da OpenOffice, testato e stabile. È facile da usare Se si desidera modificare i dati db, è sufficiente aprire il file e modificare le istruzioni di inserimento.

o

  • H2 – Detto di essere più veloce (dallo sviluppatore, che ha originariamente progettato anche hsqldb)

Quello che usi dipende da te, in base a quanta prestazione e quanta stabilità hai bisogno.

Lo sviluppatore di H2 ha fatto una bella valutazione delle prestazioni:
http://www.h2database.com/html/performance.html

Io uso Apache Derby per quasi tutte le mie esigenze di database incorporato. È inoltre ansible utilizzare il DB Java di Sun basato su Derby, ma l’ultima versione di Derby è molto più recente. Supporta molte opzioni supportate dai database nativi commerciali, ma è molto più piccola e più facile da incorporare. Ho avuto alcune tabelle di database con oltre un milione di record senza problemi.

Usavo HSQLDB e Hypersonic circa 3 anni fa. Ha alcuni problemi di prestazioni importanti al momento e io cambio da Derby a causa di questi problemi. Il Derby è stato solido anche quando era in incubatrice ad Apache.

Avevo bisogno di usare il database incorporato di Java in uno dei miei progetti e ho fatto molta ricerca per capire i pro ei contro di ciascun database. Ho scritto un blog che elenca i pro ei contro dei popolari database java incorporati (H2, HSQLDB, Derby, ObjectDB, Neo4j, OrientDB), puoi dare un’occhiata a questo. Ho scelto H2 perché pensavo che fosse più adatto alle mie esigenze. Link per il blog: http://sayrohan.blogspot.in/2012/12/choosing-light-weight-java-database.html Spero che aiuti!

Vorrei andare con H2, la performance è destinata a molto meglio di Derby. Leggi http://www.h2database.com/html/performance.html per maggiori informazioni.

HSQLDB è un buon candidato (il fatto che sia usato in OpenOffice potrebbe convincere qualcuno di voi), ma per un’applicazione personale così piccola, perché non usare un database di oggetti (invece di un classico database relazionale)?

Ho usato DB4O in uno dei miei progetti e ne sono molto soddisfatto. Essendo orientato agli oggetti, non hai bisogno dell’intero livello di Hibernate e puoi inserire / aggiornare / eliminare / interrogare oggetti direttamente! Inoltre, non è necessario preoccuparsi dello schema, si lavora direttamente con gli oggetti e DB4O fa il resto!

Sono d’accordo che potrebbe volerci un po ‘di tempo per abituarsi a questo nuovo tipo di database, ma controlla il tutorial DB40 per vedere quanto sia facile lavorare con il DB!

EDIT: come detto nei commenti, DB4O gestisce automaticamente le versioni più recenti delle classi. Inoltre, uno strumento per la navigazione e l’aggiornamento del database al di fuori dell’applicazione è disponibile qui: http://code.google.com/p/db4o-om/

Java DB (la distribuzione di Sun di Apache Derby) ora è disponibile in JDK 6!

Volevo fare qualcosa come Jason Cohen e ho pensato che questo fosse il modo più semplice di essere nella distro JDK (che della settimana scorsa è ora un requisito per la mia app). O forse sono solo pigro in questo modo.

Usiamo HSQLDB in produzione come opzione “no-configuration” per la nostra applicazione. Permette alle persone di provare senza il fastidio di creare un vero database.

Tuttavia non lo supportiamo per l’uso normale. Le ragioni sono diverse:

  1. Rallenta in proporzione alla dimensione dei dati.
  2. Accesso difficile al di fuori della nostra app (ad es. Per rapporti personalizzati).
  3. Le transazioni / sincronizzazione del disco sono difficili da correggere, quindi è facile perdere dati.

Per almeno (2) e (3), ci sono modi per aggirarlo ma è difficile; è molto più facile, ad esempio, installare MySQL.

neo4j è:

un motore di persistenza Java incorporato, basato su disco e completamente transazionale che memorizza i dati strutturati in grafici piuttosto che in tabelle

Non ho ancora avuto la possibilità di provarlo, ma sembra molto promettente. Nota che questo non è un database SQL: il tuo grafico degli oggetti è persistente per te, quindi potrebbe non essere appropriato per la tua app esistente.

Un buon strumento di confronto può essere trovato qui: http://www.jpab.org/All/All/All.html

Notare anche i confronti tra testa a testa DBMS / JPA

Sono un grande fan di DB4O per entrambi .Net e Java .

Le prestazioni sono migliorate molto dalle prime versioni. Anche il modello di licenza non è male. Mi piacciono particolarmente le opzioni disponibili per interrogare i tuoi oggetti. Query con l’esempio è molto potente e facile da abituare.

Quali criteri userete per valutarli? Se non lo sai ancora, non devi decidere in questo momento. Cerca di rendere l’applicazione come indipendente dall’utilizzo del database come puoi, fornendo i wrapper appropriati, gli oggetti di accesso ai dati, ecc. E prendi questa decisione quando hai tutti i fatti a portata di mano e devi decidere.

Se si utilizzano database relazionali e SQL, quanto sopra non dovrebbe essere troppo difficile (utilizzando JDBC, ecc.). Assicurati di avere un sacco di test circostanti in modo che quando si desidera passare da un database all’altro, è ansible determinare che la funzionalità dell’applicazione rimane la stessa.

Ho incontrato lo stesso problema qualche tempo fa. Non sapevo quale database scegliere, quindi la mia prima soluzione utilizzava Derby (o HSQLDB?), E in seguito fui in grado di passare a HSQLDB (o Derby? Non ricordo quale soluzione funzionasse) una volta determinato dove Ho avuto problemi (relativi alle prestazioni) e quale soluzione avrebbe funzionato davvero per me.

La maggior parte delle cose è già stata detta, ma posso solo aggiungere che ho usato HSQL, Derby e Berkely DB in alcuni dei miei progetti per animali domestici e hanno funzionato tutti bene. Quindi non penso che importi davvero molto per essere onesti. Una cosa degna di nota è che HSQL si salva come un file di testo con istruzioni SQL che è abbastanza buono. Rende molto facile per quando si sta sviluppando fare test e impostare i dati rapidamente. Può anche fare modifiche veloci se necessario. Immagino che potresti facilmente trasferire tutto questo in qualsiasi database se dovessi cambiare anche tu 🙂

HSQLDB può causare problemi per le applicazioni di grandi dimensioni, non è proprio così stabile.

Il migliore che abbia mai sentito (non esperienza di prima mano comunque) è berkleyDB. Ma a meno che tu non lo apra, questo ti costerà un arm e una gamba da usare a causa delle licenze … vedi questo http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html per dettagli.

ps. berkleyDB non è un database relazionale nel caso in cui non lo sapessi.

Ho usato Derby e odio davvero le sue funzioni di conversione dei tipi di dati, in particolare le funzioni di data / ora. (Tipo di numero) <-> Varchar conversione è un dolore.

In questo modo, se pianifichi di utilizzare le conversioni dei tipi di dati nelle tue istruzioni DB, consideri l’utilizzo di un DB incorporato, lo imparo troppo tardi.

Ultime conversioni dei tipi di dati della versione Derby

Se sono corretto, H2 proviene dagli stessi ragazzi che hanno scritto HSQLDB. È molto meglio se ti fidi dei benchmark sul loro sito. Inoltre, c’è qualche idea che la comunità dei sun saltasse troppo velocemente in Derby.

Io personalmente preferisco HSQLDB, ma soprattutto perché è stato il primo che ho provato.

H2 è detto per essere più veloce e fornisce un frontend GUI più bello (che è generico e funziona con qualsiasi driver JDBC, tra l’altro).

Almeno HSQLDB, H2 e Derby forniscono modalità server che sono ottime per lo sviluppo, perché è ansible accedere al DB con l’applicazione e alcuni strumenti contemporaneamente (la modalità incorporata di solito non consente).

Mi rendo conto che hai menzionato la navigazione SQL, ma tutto il resto nella tua domanda mi fa venire voglia di suggerirti di prendere in considerazione anche DB4O , che è un DB object semplice e di grandi dimensioni .

Immagino di essere un po ‘in ritardo (molto tardi ;-)) per questo post, ma vorrei aggiungere Perst, un database integrato orientato agli oggetti open source per Java e .NET. per la tua considerazione. Perst è un database embedded con licenza open source / doppia per Java. La distribuzione è compatibile con la piattaforma Android di Google e include anche Perst Lite per Java ME. Abbiamo persino creato un benchmark Android e prodotto un white paper sull’argomento … puoi dare un’occhiata qui: http://www.mcobject.com/index.cfm?fuseaction=download&pageid=581&sectionid=133

Tutto il meglio, Chris