1. Обзор
Базы данных в оперативной памяти полагаются на системную память, а не на дисковое пространство для хранения данных. Поскольку доступ к памяти быстрее, чем доступ к диску, эти базы данных, естественно, быстрее.
Конечно, мы можем использовать базу данных в памяти только в приложениях и сценариях, где данные не нужно сохранять или для более быстрого выполнения тестов. Они часто запускаются как встроенные базы данных, что означает, что они создаются при запуске процесса и отбрасываются, когда процесс завершается, что очень удобно для тестирования, поскольку вам не нужно настраивать внешнюю базу данных.
В следующих разделах мы рассмотрим некоторые из наиболее часто используемых баз данных в памяти для среды Java и конфигурацию, необходимую для каждой из них .
2. База данных Н2
H2
— это база данных с открытым исходным кодом, написанная на Java, которая поддерживает стандартный SQL как для встроенных, так и для автономных баз данных. Он очень быстрый и содержится в JAR-файле размером всего около 1,5 МБ.
2.1. Зависимость от Maven
Чтобы использовать базы данных H2
в приложении, нам нужно добавить следующую зависимость:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.194</version>
</dependency>
Последнюю версию базы данных H2
можно загрузить с Maven Central.
2.2. Конфигурация
Чтобы подключиться к базе данных H2 в памяти, мы можем использовать
строку
подключения с протоколом mem,
за которым следует имя базы данных. Свойства driverClassName, URL, имя пользователя
и пароль
можно поместить в файл .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. Зависимость от Maven
Для разработки приложения с использованием HSQLDB
нам понадобится зависимость Maven:
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.4</version>
</dependency>
Вы можете найти последнюю версию HSQLDB
на Maven Central.
3.2. Конфигурация
Нужные нам свойства подключения имеют следующий формат:
driverClassName=org.hsqldb.jdbc.JDBCDriver
url=jdbc:hsqldb:mem:myDb
username=sa
password=sa
Это гарантирует, что база данных будет создана автоматически при запуске, будет находиться в памяти на время работы приложения и будет удалена по завершении процесса.
Свойство диалекта Hibernate для
HSQLDB
:
hibernate.dialect=org.hibernate.dialect.HSQLDialect
Файл JAR также содержит диспетчер базы данных с графическим интерфейсом. Дополнительную информацию можно найти на веб-сайте hsqldb.org .
4. База данных Apache Derby
Apache Derby
— еще один проект с открытым исходным кодом, содержащий систему управления реляционными базами данных, созданную Apache Software Foundation
.
Derby
основан на стандартах SQL и JDBC и в основном используется как встроенная база данных, но его также можно запускать в режиме клиент-сервер с помощью инфраструктуры сетевого сервера Derby .
4.1. Зависимость от Maven
Чтобы использовать базу данных Derby
в приложении, нам нужно добавить следующую зависимость Maven:
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.13.1.1</version>
</dependency>
Последнюю версию базы данных Derby
можно найти на Maven Central.
4.2. Конфигурация
Строка подключения использует протокол памяти :
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
можно прочитать на странице db.apache.org/derby .
5. База данных SQLite
SQLite
— это база данных SQL, которая работает только во встроенном режиме, либо в памяти, либо сохраняется в виде файла. Он написан на языке C, но может использоваться и с Java.
5.1. Зависимость от Maven
Чтобы использовать базу данных SQLite
, нам нужно добавить JAR-файл драйвера JDBC:
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.16.1</version>
</dependency>
Зависимость sqlite-jdbc можно загрузить с Maven Central.
5.2. Конфигурация
В свойствах подключения используется класс драйвера org.sqlite.JDBC и протокол
памяти
для строки подключения:
driverClassName=org.sqlite.JDBC
url=jdbc:sqlite:memory:myDb
username=sa
password=sa
Это автоматически создаст базу данных myDb
, если она не существует.
В настоящее время Hibernate
не предоставляет диалект для SQLite
, хотя, скорее всего, он появится в будущем. Если вы хотите использовать SQLite
с Hibernate
, вам нужно создать свой класс HibernateDialect .
Чтобы узнать больше о SQLite
, перейдите на sqlite.org .
6. Базы данных в памяти в Spring Boot
Spring Boot особенно упрощает использование базы данных в памяти, поскольку она может автоматически создавать конфигурацию для H2
, HSQLDB
и Derby
.
Все, что нам нужно сделать, чтобы использовать базу данных одного из трех типов в Spring Boot, — это добавить ее зависимость в pom.xml
. Когда фреймворк обнаруживает зависимость от пути к классам, он автоматически настроит базу данных.
7. Заключение
В этой статье мы кратко рассмотрели наиболее часто используемые базы данных в памяти в экосистеме Java, а также их базовые конфигурации. Хотя они полезны для тестирования, имейте в виду, что во многих случаях они не обеспечивают точно такую же функциональность, как исходные автономные.
Вы можете найти примеры кода, использованные в этой статье , на Github .