Elenco dei database in memoria

1. Panoramica

I database in memoria si basano sulla memoria di sistema anziché sullo spazio su disco per l'archiviazione dei dati. Poiché l'accesso alla memoria è più veloce dell'accesso al disco, questi database sono naturalmente più veloci.

Naturalmente, possiamo utilizzare un database in memoria solo in applicazioni e scenari in cui i dati non devono essere persistenti o allo scopo di eseguire test più velocemente. Spesso vengono eseguiti come database incorporati, il che significa che vengono creati all'avvio di un processo e scartati quando il processo termina, il che è molto comodo per i test perché non è necessario configurare un database esterno.

Nelle sezioni seguenti, daremo uno sguardo ad alcuni dei database in memoria più comunemente usati per l'ambiente Java e alla configurazione necessaria per ciascuno di essi .

2. Database H2

H2 è un database open source scritto in Java che supporta SQL standard sia per database integrati che autonomi. È molto veloce e contenuto in un JAR di soli 1,5 MB circa.

2.1. Dipendenza da Maven

Per utilizzare i database H2 in un'applicazione, è necessario aggiungere la seguente dipendenza:

 com.h2database h2 1.4.194 

L'ultima versione del database H2 può essere scaricata da Maven Central.

2.2. Configurazione

Per connettersi a un database in memoria H2 , possiamo utilizzare una stringa di connessione con il protocollo mem, seguito dal nome del database. Le proprietà driverClassName, URL, nome utente e password possono essere inserite in un file .properties per essere lette dalla nostra applicazione:

driverClassName=org.h2.Driver url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1 username=sa password=sa

Queste proprietà assicurano che il database myDb venga creato automaticamente all'avvio dell'applicazione.

Per impostazione predefinita, quando viene chiusa una connessione al database, viene chiuso anche il database. Se vogliamo che il database duri per tutto il tempo in cui la JVM è in esecuzione, possiamo specificare la proprietà DB_CLOSE_DELAY = -1

Se stiamo usando il database con Hibernate, dobbiamo anche specificare il dialetto Hibernate:

hibernate.dialect=org.hibernate.dialect.H2Dialect

Il database H2 viene mantenuto regolarmente e fornisce una documentazione più dettagliata su h2database.com.

3. HSQLDB ( database HyperSQL )

HSQLDB è un progetto open source, scritto anche in Java, che rappresenta un database relazionale. Segue gli standard SQL e JDBC e supporta le funzioni SQL come procedure memorizzate e trigger.

Può essere utilizzato in modalità in-memory oppure può essere configurato per utilizzare l'archiviazione su disco.

3.1. Dipendenza da Maven

Per sviluppare un'applicazione utilizzando HSQLDB , abbiamo bisogno della dipendenza Maven:

 org.hsqldb hsqldb 2.3.4 

È possibile trovare l'ultima versione di HSQLDB su Maven Central.

3.2. Configurazione

Le proprietà di connessione di cui abbiamo bisogno hanno il seguente formato:

driverClassName=org.hsqldb.jdbc.JDBCDriver url=jdbc:hsqldb:mem:myDb username=sa password=sa

Ciò garantisce che il database venga creato automaticamente all'avvio, risieda in memoria per la durata dell'applicazione e venga eliminato al termine del processo.

La proprietà del dialetto Hibernate per HSQLDB è:

hibernate.dialect=org.hibernate.dialect.HSQLDialect

Il file JAR contiene anche un Database Manager con una GUI. Ulteriori informazioni possono essere trovate sul sito web hsqldb.org.

4. Database di Apache Derby

Apache Derby è un altro progetto open source contenente un sistema di gestione di database relazionali creato da Apache Software Foundation .

Derby si basa sugli standard SQL e JDBC ed è utilizzato principalmente come database incorporato, ma può anche essere eseguito in modalità client-server utilizzando il framework Derby Network Server .

4.1. Dipendenza da Maven

Per utilizzare un database Derby in un'applicazione, è necessario aggiungere la seguente dipendenza Maven:

 org.apache.derby derby 10.13.1.1 

L'ultima versione del database Derby può essere trovata su Maven Central.

4.2. Configurazione

La stringa di connessione utilizza il protocollo di memoria :

driverClassName=org.apache.derby.jdbc.EmbeddedDriver url=jdbc:derby:memory:myDb;create=true username=sa password=sa

Affinché il database venga creato automaticamente all'avvio, dobbiamo specificare create = true nella stringa di connessione. Il database viene chiuso e rilasciato per impostazione predefinita all'uscita da JVM.

Se si utilizza il database con Hibernate , è necessario definire il dialetto:

hibernate.dialect=org.hibernate.dialect.DerbyDialect

Puoi leggere di più sul database Derby su db.apache.org/derby.

5. Database SQLite

SQLite è un database SQL che viene eseguito solo in modalità incorporata, in memoria o salvato come file. È scritto in linguaggio C ma può essere utilizzato anche con Java.

5.1. Dipendenza da Maven

Per utilizzare un database SQLite , è necessario aggiungere il JAR del driver JDBC:

 org.xerial sqlite-jdbc 3.16.1 

La dipendenza sqlite-jdbc può essere scaricata da Maven Central.

5.2. Configurazione

Le proprietà di connessione utilizzano la classe driver org.sqlite.JDBC e il protocollo di memoria per la stringa di connessione:

driverClassName=org.sqlite.JDBC url=jdbc:sqlite:memory:myDb username=sa password=sa

Questo creerà automaticamente il database myDb se non esiste.

Attualmente, Hibernate non fornisce un dialetto per SQLite , anche se molto probabilmente lo farà in futuro. Se vuoi usare SQLite con Hibernate , devi creare la tua classe HibernateDialect .

Per saperne di più su SQLite , vai su sqlite.org.

6. Database in memoria in Spring Boot

Spring Boot rende particolarmente facile l'utilizzo di un database in memoria, poiché può creare automaticamente la configurazione per H2 , HSQLDB e Derby .

Tutto quello che dobbiamo fare per utilizzare un database di uno dei tre tipi in Spring Boot è aggiungere la sua dipendenza al pom.xml . Quando il framework incontra la dipendenza dal classpath, configura automaticamente il database.

7. Conclusione

In questo articolo, abbiamo dato una rapida occhiata ai database in memoria più comunemente usati nell'ecosistema Java, insieme alle loro configurazioni di base. Sebbene siano utili per i test, tieni presente che in molti casi non forniscono esattamente le stesse funzionalità di quelli standalone originali.

Puoi trovare gli esempi di codice usati in questo articolo su Github.