H2

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
H2
H2 logo.png
Логотип H2
Тип

Реляционная СУБД

Разработчик

Томас Мюллер

Написана на

Java

Операционная система

Кроссплатформенное программное обеспечение

Последняя версия

1.3.175 (18 января 2014 года)

Лицензия

MPL, EPL

Сайт

h2database.com

H2 — открытая кроссплатформенная СУБД, полностью написанная на языке Java.

Несмотря на малый размер (чуть более 1 МБ) H2 поддерживает следующие возможности «из коробки»:

  • Два режима работы(клиент-сервер, встроенный)
  • Два режима хранения данных(файловая система, память)
  • Поддержка планов выполнения запросов
  • Поддержка кластеризации и репликации
  • Шифрование данных
  • Внешние(связанные) таблицы
  • Драйвер ODBC
  • Полнотекстовый поиск
  • Определение доменов
  • Мультиверсионный конкурентный доступ
  • Поддержка последовательностей
  • Поддержка ключевых слов LIMIT и OFFSET в запросах
  • Временные таблицы
  • Вычисляемые столбцы
  • Пользовательские агрегатные функции
  • Пользовательские хранимые процедуры
  • Сжатие CLOB/BLOB объектов
  • Работа с CSV файлами на чтение и запись
  • Браузерная консоль управления
  • Запуск как сервис Windows

Что ещё не реализовано

  • Оконные функции(реализована только функция ROW_NUMBER() OVER())
  • Многопоточная обработка запросов
  • Полная поддержка стандарта SQL 2003

Применяется H2, например, в проекте Grails как базовая СУБД для разработки.

История создания[править | править исходный текст]

Разработка H2 началась в мае 2004 года, первый релиз состоялся в 14 декабря 2005 года. Главным разработчиком является Томас Мюллер, один из разработчиков Hypersonic SQL (HSQLDB). Сокращение H2 означает Hypersonic 2 однако H2 не использует код HSQLDB и была написано заново.

Почему выбрана платформа Java[править | править исходный текст]

  • Легкая интеграция с Java приложениями
  • Кроссплатформенность
  • Большая защищенность, чем у нативных приложений
  • Пользовательские функции и триггеры работают очень быстро
  • Поддержка Юникода

Сравнения с существующими СУБД[править | править исходный текст]

На сайте H2 расположены результаты сравнения тестов производительности H2 и некоторых других популярных СУБД (в частности HSQLDB, PostgreSQL и MySQL), в которых указано, что H2 в целом более производительна, чем указанные СУБД. Сравнения с коммерческими СУБД (Oracle, DB2, MSSQL) не проводились ввиду ограничений, наложенных лицензиями на эти продукты.

Проблемы надёжности[править | править исходный текст]

В документации по H2 указано на имеющиеся проблемы с ACID в части надёжности (durability)[1], что может привести к потере данных завершённых транзакций при отключении электропитания.
В документации заявлено, что в системе не используются вызовы FileDescriptor.sync(), FileChannel.force() и fsync поскольку они существенно замедляют работу системы: при их использовании достижимы только 60 операций записи в секунду.
Другая причина, по которой не используется fsync в том, что многие диски поставляются со включенной опцией кэширования записи.
Для обеспечения durability в документации предлагается использовать дополнительные команды SET WRITE_DELAY и CHECKPOINT SYNC, которые доступны только с правами администратора.

Планируемые нововведения[править | править исходный текст]

  • Улучшение производительности
  • Серверные курсоры

Новые версии[править | править исходный текст]

Над СУБД продолжается активная работа, новые версии выпускаются практически каждый месяц.

Примечания[править | править исходный текст]

Весьма примечателен факт того, что несмотря на богатую функциональность при разработке СУБД не используются сторонние библиотеки. Весь необходимый функционал реализован разработчиками самостоятельно с целью облегчения развертывания приложения. Фактически вся СУБД умещается в файле размером 1 МБ, а весь архив включая примеры и исходный код в 5 МБ (для сравнения дистрибутив СУБД Oracle 11 для Microsoft Windows занимает 1,7 ГБ).

СУБД весьма полезна в разработке, так как позволяет создавать тестовые наборы данных прямо в памяти, имеет развитые возможности запросов, многочисленные функции совместимые с более тяжеловесными БД, легко настраивается, имеет подробную, но понятную документацию. Для небольших программ СУБД возможно использовать саму по себе, так как она легко встраивается в приложение.

  1. [1]  (англ.)

Ссылки[править | править исходный текст]