1. Общ преглед
Базите данни в паметта разчитат на системната памет, за разлика от дисковото пространство за съхранение на данни. Тъй като достъпът до паметта е по-бърз от достъпа до диска, тези бази данни са естествено по-бързи.
Разбира се, можем да използваме база данни в паметта само в приложения и сценарии, при които не е необходимо данните да се запазват или с цел по-бързо изпълнение на тестовете. Те често се изпълняват като вградени бази данни, което означава, че се създават при стартиране на процеса и се изхвърлят, когато процесът приключи, което е супер удобно за тестване, защото не е необходимо да настройвате външна база данни.
В следващите раздели ще разгледаме някои от най-често използваните бази данни в паметта за Java среда и конфигурацията, необходима за всяка от тях .
2. H2 база данни
H2 е база данни с отворен код, написана на Java, която поддържа стандартен SQL както за вградени, така и за самостоятелни бази данни. Той е много бърз и се съдържа в JAR от само около 1,5 MB.
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
Това гарантира, че базата данни ще бъде създадена автоматично при стартиране, ще се намира в паметта за цялото време на приложението и ще бъде изтрита, когато процесът приключи.
В хибернация диалект имота за HSQLDB е:
hibernate.dialect=org.hibernate.dialect.HSQLDialect
JAR файлът съдържа и Database Manager с GUI. Повече информация можете да намерите на уебсайта 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 може да бъде намерена на 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 , трябва да добавим JDBC драйвер JAR:
org.xerial sqlite-jdbc 3.16.1
Зависимостта 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.