Lijst met in-memory-databases

1. Overzicht

In-memory databases vertrouwen op systeemgeheugen in plaats van schijfruimte voor de opslag van gegevens. Omdat geheugentoegang sneller is dan schijftoegang, zijn deze databases natuurlijk sneller.

Natuurlijk kunnen we een in-memory database alleen gebruiken in applicaties en scenario's waar gegevens niet persistent hoeven te worden of om tests sneller uit te voeren. Ze worden vaak uitgevoerd als ingesloten databases, wat betekent dat ze worden gemaakt wanneer een proces start en worden verwijderd wanneer het proces eindigt, wat supercomfortabel is om te testen omdat u geen externe database hoeft op te zetten.

In de volgende secties, we zullen enkele van de meest gebruikte in-memory databases voor de Java-omgeving bekijken en de configuratie die voor elk ervan nodig is.

2. H2-database

H2 is een open source database geschreven in Java die standaard SQL ondersteunt voor zowel embedded als standalone databases. Het is erg snel en bevat een JAR van slechts ongeveer 1,5 MB.

2.1. Afhankelijkheid van Maven

Gebruiken H2 databases in een applicatie, moeten we de volgende afhankelijkheid toevoegen:

 com.h2database h2 1.4.194 

De nieuwste versie van het H2 database kan worden gedownload vanaf Maven Central.

2.2. Configuratie

Om verbinding te maken met een H2 in-memory database, kunnen we een verbinding gebruiken Draad met het protocol mem, gevolgd door de databasenaam. De driverClassName, URL, gebruikersnaam en wachtwoord eigenschappen kunnen in een .eigendommen bestand dat door onze applicatie moet worden gelezen:

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

Deze eigenschappen zorgen voor de myDb database wordt automatisch aangemaakt bij het opstarten van de applicatie.

Wanneer een verbinding met de database wordt verbroken, wordt de database standaard ook gesloten. Als we willen dat de database zo lang meegaat als de JVM actief is, kunnen we de eigenschap specificeren DB_CLOSE_DELAY = -1

Als we de database met Hibernate gebruiken, moeten we ook het Hibernate-dialect specificeren:

hibernate.dialect = org.hibernate.dialect.H2Dialect

H2 database wordt regelmatig onderhouden en biedt een meer gedetailleerde documentatie op h2database.com.

3. HSQLDB (HyperSQL Database)

HSQLDB is een open source-project, ook geschreven in Java, dat een relationele database vertegenwoordigt. Het volgt de SQL- en JDBC-standaarden en ondersteunt SQL-functies zoals opgeslagen procedures en triggers.

Het kan worden gebruikt in de modus in het geheugen, of het kan worden geconfigureerd om schijfopslag te gebruiken.

3.1. Afhankelijkheid van Maven

Om een ​​applicatie te ontwikkelen met HSQLDB, we hebben de Maven-afhankelijkheid nodig:

 org.hsqldb hsqldb 2.3.4 

U kunt de nieuwste versie van HSQLDB op Maven Central.

3.2. Configuratie

De verbindingseigenschappen die we nodig hebben, hebben het volgende formaat:

driverClassName = org.hsqldb.jdbc.JDBCDriver url = jdbc: hsqldb: mem: myDb gebruikersnaam = sa wachtwoord = sa

Dit zorgt ervoor dat de database automatisch wordt aangemaakt bij het opstarten, in het geheugen blijft voor de duur van de toepassing en wordt verwijderd wanneer het proces eindigt.

De Slaapstand dialect eigenschap voor HSQLDB is:

hibernate.dialect = org.hibernate.dialect.HSQLDialect

Het JAR-bestand bevat ook een Database Manager met een GUI. Meer informatie is te vinden op de website hsqldb.org.

4. Apache Derby-database

Apache Derby is een ander open source-project met een relationeel databasebeheersysteem gemaakt door de Apache Software Foundation.

Derby is gebaseerd op SQL- en JDBC-standaarden en wordt voornamelijk gebruikt als een embedded database, maar het kan ook worden uitgevoerd in client-server-modus met behulp van de Derby netwerkserver kader.

4.1. Afhankelijkheid van Maven

Om een Derby database in een applicatie, moeten we de volgende Maven-afhankelijkheid toevoegen:

 org.apache.derby derby 10.13.1.1 

De nieuwste versie van Derby database is te vinden op Maven Central.

4.2. Configuratie

De verbindingsreeks gebruikt de geheugen protocol:

driverClassName = org.apache.derby.jdbc.EmbeddedDriver url = jdbc: derby: geheugen: myDb; create = echte gebruikersnaam = sa wachtwoord = sa

Om de database automatisch aan te maken bij het opstarten, moeten we specificeren create = true in de verbindingsreeks. De database wordt standaard gesloten en verwijderd bij het afsluiten van JVM.

Als u de database gebruikt met Slaapstand, we moeten het dialect definiëren:

hibernate.dialect = org.hibernate.dialect.DerbyDialect

U kunt er meer over lezen Derby database op db.apache.org/derby.

5. SQLite-database

SQLite is een SQL-database die alleen in ingesloten modus wordt uitgevoerd, in het geheugen of opgeslagen als een bestand. Het is geschreven in de C-taal, maar kan ook met Java worden gebruikt.

5.1. Afhankelijkheid van Maven

Om een SQLite database, moeten we de JDBC-driver JAR toevoegen:

 org.xerial sqlite-jdbc 3.16.1 

De sqlite-jdbc-afhankelijkheid kan worden gedownload van Maven Central.

5.2. Configuratie

De verbindingseigenschappen gebruiken de org.sqlite.JDBC chauffeursklasse en de geheugen protocol voor de verbindingsreeks:

driverClassName = org.sqlite.JDBC url = jdbc: sqlite: geheugen: myDb gebruikersnaam = sa wachtwoord = sa

Hierdoor wordt het myDb database automatisch als deze niet bestaat.

Momenteel, Slaapstand biedt geen dialect voor SQLite, hoewel dit in de toekomst zeer waarschijnlijk zal gebeuren. Als je wilt gebruiken SQLite met Slaapstand, je moet je HibernateDialect klasse.

Voor meer informatie over SQLite, ga naar sqlite.org.

6. In-Memory-databases in Spring Boot

Spring Boot maakt het bijzonder gemakkelijk om een ​​in-memory database te gebruiken - omdat het de configuratie automatisch voor kan maken H2, HSQLDB, en Derby.

Het enige wat we hoeven te doen om een ​​database van een van de drie typen in Spring Boot te gebruiken, is de afhankelijkheid ervan toevoegen aan het pom.xml. Wanneer het framework de afhankelijkheid van het klassenpad tegenkomt, zal het de database automatisch configureren.

7. Conclusie

In dit artikel hebben we kort gekeken naar de meest gebruikte in-memory databases in het Java-ecosysteem, samen met hun basisconfiguraties. Hoewel ze handig zijn bij het testen, moet u er rekening mee houden dat ze in veel gevallen niet exact dezelfde functionaliteit bieden als de originele zelfstandige versies.

Je kunt de codevoorbeelden vinden die in dit artikel worden gebruikt op Github.