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