インメモリデータベースのリスト

1概要

インメモリデータベースは、データを格納するためのディスクスペースではなく、システムメモリに依存しています。メモリアクセスはディスクアクセスより速いので、当然これらのデータベースは速いです。

もちろん、データを永続化する必要がないアプリケーションやシナリオ、またはテストをより迅速に実行する目的でのみ、インメモリデータベースを使用できます。これらは埋め込みデータベースとして実行されることが多く、プロセスの開始時に作成され、プロセスの終了時に破棄されるため、外部データベースを設定する必要がないため、テストに非常に快適です。

次のセクションでは、Java環境で最も一般的に使用されるインメモリデータベースと、それぞれに必要な設定について説明します。

2 H2データベース

H2 は、組み込みデータベースとスタンドアロンデータベースの両方に対して標準SQLをサポートする、Javaで書かれたオープンソースデータベースです。これは非常に高速で、わずか1.5 MBのJAR内に含まれています。

2.1. Mavenの依存関係

アプリケーションで H2 データベースを使用するには、次の依存関係を追加する必要があります。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.194</version>
</dependency>

H2 database の最新バージョンをダウンロードすることができます。 Maven Centralから。

2.2. 構成

H2 インメモリデータベースに接続するには、プロトコル mem、 の後にデータベース名が続く接続 String を使用できます。 driverClassName、URL、username 、および password の各プロパティを .properties ファイルに配置して、アプリケーションで読み取ることができます。

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

これらのプロパティにより、アプリケーションの起動時に myDb データベースが自動的に作成されます。

デフォルトでは、データベースへの接続が閉じられると、データベースも閉じられます。 JVMが実行されている限りデータベースを存続させたい場合は、プロパティ DB CLOSE DELAY = -1 を指定できます。

データベースをHibernateで使用している場合は、Hibernateの方言も指定する必要があります。

hibernate.dialect=org.hibernate.dialect.H2Dialect

H2 データベースは定期的に管理されており、http://www.h2database.com/html/main.html[h2database.com]でより詳細なドキュメントを提供します。

3 HSQLDB HyperSQL データベース)

HSQLDB は、リレーショナルデータベースを表すオープンソースプロジェクトで、これもJavaで書かれています。 SQLおよびJDBCの標準に準拠しており、ストアドプロシージャやトリガなどのSQL機能をサポートしています。

インメモリモードで使用することも、ディスクストレージを使用するように設定することもできます。

3.1. Mavenの依存関係

HSQLDB を使用してアプリケーションを開発するには、Maven依存関係が必要です。

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.3.4</version>
</dependency>

__httpsの最新バージョンを見つけることができます。 Maven Central

3.2. 構成

必要な接続プロパティは次の形式です。

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

これにより、データベースは起動時に自動的に作成され、アプリケーションの実行中メモリに常駐し、プロセスの終了時に削除されます。

HSQLDB Hibernate 方言プロパティは次のとおりです。

hibernate.dialect=org.hibernate.dialect.HSQLDialect

JARファイルには、GUI付きのデータベースマネージャも含まれています。詳細については、http://hsqldb.org/[hsqldb.org]Webサイトを参照してください。

4 Apache Derbyデータベース

Apache Derby は、 Apache Software Foundation によって作成されたリレーショナルデータベース管理システムを含む別のオープンソースプロジェクトです。

Derby はSQLおよびJDBC標準に基づいており、主に組み込みデータベースとして使用されますが、 Derby Network Server フレームワークを使用してクライアントサーバーモードで実行することもできます。

4.1. Mavenの依存関係

アプリケーションで Derby データベースを使用するには、次のMaven依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.13.1.1</version>
</dependency>

最新バージョンのhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22derby%22%20AND%20g%3A%22org.apache.derby%22[ Derby database]Maven Centralで見つけました。

4.2. 構成

接続文字列は memory プロトコルを使用します。

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

データベースが起動時に自動的に作成されるようにするには、接続文字列に create = true を指定する必要があります。データベースはJVMの終了時にデフォルトでクローズされ、ドロップされます。

データベースを Hibernate で使用する場合は、方言を定義する必要があります。

hibernate.dialect=org.hibernate.dialect.DerbyDialect

Derby データベースの詳細についてはhttps://db.apache.org/derby/[db.apache.org/derby]をご覧ください。

5 SQLiteデータベース

SQLite は、メモリ内またはファイルとして保存された埋め込みモードでのみ実行されるSQLデータベースです。 C言語で書かれていますが、Javaでも使用できます。

5.1. Mavenの依存関係

SQLite データベースを使用するには、JDBCドライバJARを追加する必要があります。

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.16.1</version>
</dependency>

sqlite-jdbc 依存関係はダウンロード可能です。 Maven Centralから。

5.2. 構成

接続プロパティは、接続文字列に org.sqlite.JDBC ドライバクラスと memory プロトコルを使用します。

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

データベースが存在しない場合は、 myDb データベースが自動的に作成されます。

現在、 Hibernate SQLite の方言を提供していませんが、将来的にはそうなるでしょう。 SQLite Hibernate と一緒に使用したい場合は、 HibernateDialect クラスを作成する必要があります。

SQLite の詳細については、https://www.sqlite.org/index.html[sqlite.org]を参照してください。

6. Spring Bootのインメモリデータベース

Spring Bootは、インメモリデータベースの使用を特に簡単にします - H2 HSQLDB、 、および Derby の設定を自動的に作成できるためです。

Spring Bootで3つのタイプのいずれかのデータベースを使用するために必要なことは、その依存関係を pom.xml に追加することだけです。フレームワークがクラ​​スパスへの依存関係に遭遇すると、データベースを自動的に設定します。

7. 結論

この記事では、Javaエコシステムで最も一般的に使用されているメモリー内データベースとその基本構成について簡単に説明しました。

これらはテストには役立ちますが、多くの場合、元のスタンドアロンの機能とまったく同じ機能を提供しないことに注意してください。

Githubについて で使用しているコード例を見つけることができます。