Справді, в додаток регулярно хочеться мати якусь базу даних, до якої і вимог вообщем-то ніяких не висувається, ні по продуктивності, але по стійкості. Поширені рішення, подібні перерахованим вище, незручні тим, що вимагають додаткової установки і настройки. Добре б мати базу, яка поширюється прямо всередині програми. У світі C / C ++ існують SQLite і MySQL embedded, а в світі Java - бази даних, написані на pure java.
Pure java databases не так добре масштабуються, не надто швидко працюють і не так вже й багато функціоналу мають. З іншого боку, вони маленькі (в середньому додають 1-2 мегабайта до вашого додатком), вбудовуються прямо в додаток і мають можливість працювати з даними прямо в пам'яті. Типових областей застосування у таких баз даних декілька: заміна основній базі в інтеграційних тестах, власна база даних програми для внутрішніх данни, механізм обробки даних в додатку і т.д.
Найбільш поширені три java бази даних і кожну з них ми випробуємо.
- Підтримується і вбудований режим роботи і окремий сервер. У вбудованому режимі підтримуються зовнішні з'єднання.
- Підтримка баз в пам'яті і на диску, шифрування даних.
- MVCC ідвофазні транзакції.
- Вбудована консоль для доступу до бази.
Використовувати H2 в додатку вкрай просто: її досить додати в classpath і можна відразу підключатися до неї.
У embedded режимі jdbc url «jdbc: h2: / file» створює (або відкриває) базу даних «/ file» на диску. Jdbc url «jdbc: h2: mem: database» створює в пам'яті базу з ім'ям «database». Якщо параметр імені опустити, то буде створена анонімна база, до якої можна створити лише одне з'єднання. Для з'єднання з віддаленою базою, що працює в серверному режимі, в jdbc url слід вказувати ім'я сервера: «jdbc: h2: tcp: // server / file»
- Підтримується і вбудований режим роботи і окремий сервер.
- Найшвидша з java баз даних, за рахунок зменшення надійності
- Три різні варіанти реалізації транзакцій.
- Підтримка java в sql функціях і тригерах.
- Підтримка csv файлів як джерел даних.
Так само як і H2, для використання досить додати в classpath і можна відразу підключатися:
- Повна сумісність з IBM DB2 SQL
- Підтримка повноцінного вбудованого сервера, який здатний приймати з'єднання з зовнішніх процесів, будучи запущеним всередині програми
- Підтримка in-memory баз даних
Використання Apache Derby, по крайней мере, не складніше інших java баз даних: