H2

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

Томас Мюллер

Написана на
Операционная система
Последняя версия
Лицензия
Сайт

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]  (англ.)

Ссылки[править | править вики-текст]