インメモリデータベースのリスト
1. 概要
インメモリデータベースは、データを保存するためのディスク領域ではなく、システムメモリに依存しています。 メモリアクセスはディスクアクセスよりも高速であるため、これらのデータベースは当然高速です。
もちろん、インメモリデータベースは、データを永続化する必要がないアプリケーションやシナリオで、またはテストをより高速に実行する目的でのみ使用できます。 多くの場合、組み込みデータベースとして実行されます。つまり、プロセスの開始時に作成され、プロセスの終了時に破棄されます。これは、外部データベースをセットアップする必要がないため、テストに非常に快適です。
次のセクションでは、we will take a look at some of the most commonly used in-memory databases for the Java environment and the configuration necessary for each of them。
2. H2データベース
H2は、Javaで記述されたオープンソースデータベースであり、組み込みデータベースとスタンドアロンデータベースの両方で標準SQLをサポートします。 非常に高速で、約1.5 MBのJARに含まれています。
2.1. メーベン依存
アプリケーションでH2データベースを使用するには、次の依存関係を追加する必要があります。
com.h2database
h2
1.4.194
H2 databaseの最新バージョンは、MavenCentralからダウンロードできます。
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データベースは定期的に維持され、h2database.comに関するより詳細なドキュメントを提供する。
3. HSQLDB(HyperSQLデータベース)
HSQLDBはオープンソースプロジェクトであり、これもJavaで記述されており、リレーショナルデータベースを表します。 SQLおよびJDBC標準に準拠し、ストアドプロシージャやトリガーなどのSQL機能をサポートします。
インメモリモードで使用することも、ディスクストレージを使用するように構成することもできます。
3.1. メーベン依存
HSQLDBを使用してアプリケーションを開発するには、Mavenの依存関係が必要です。
org.hsqldb
hsqldb
2.3.4
Maven CentralでHSQLDBの最新バージョンを見つけることができます。
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を備えたデータベースマネージャーも含まれています。 詳細については、hsqldb.orgのWebサイトを参照してください。
4. ApacheDerbyデータベース
Apache Derbyは、Apache Software Foundationによって作成されたリレーショナルデータベース管理システムを含む別のオープンソースプロジェクトです。
DerbyはSQLおよびJDBC標準に基づいており、主に組み込みデータベースとして使用されますが、Derby Network Serverフレームワークを使用してクライアントサーバーモードで実行することもできます。
4.1. メーベン依存
アプリケーションでDerbyデータベースを使用するには、次のMaven依存関係を追加する必要があります。
org.apache.derby
derby
10.13.1.1
Derby databaseの最新バージョンは、MavenCentralにあります。
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
db.apache.org/derbyでDerbyデータベースの詳細を読むことができます。
5. SQLiteデータベース
SQLiteは、メモリ内またはファイルとして保存された埋め込みモードでのみ実行されるSQLデータベースです。 C言語で書かれていますが、Javaでも使用できます。
5.1. メーベン依存
SQLiteデータベースを使用するには、JDBCドライバーJARを追加する必要があります。
org.xerial
sqlite-jdbc
3.16.1
sqlite-jdbcの依存関係は、MavenCentralからダウンロードできます。
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の詳細については、sqlite.orgにアクセスしてください。
6. SpringBootのインメモリデータベース
Spring Bootを使用すると、H2、HSQLDB,、およびDerbyの構成を自動的に作成できるため、インメモリデータベースを特に簡単に使用できます。
Spring Bootで3つのタイプのいずれかのデータベースを使用するために必要なのは、その依存関係をpom.xmlに追加することだけです。 フレームワークがクラスパスへの依存関係を検出すると、データベースが自動的に構成されます。
7. 結論
この記事では、Javaエコシステムで最も一般的に使用されるインメモリデータベースとその基本構成について簡単に説明しました。 これらはテストには便利ですが、多くの場合、元のスタンドアロンの機能とまったく同じ機能を提供しないことに注意してください。
この記事over on Githubで使用されているコード例を見つけることができます。