Лучшие вопросы
Таймлайн
Чат
Перспективы
H2
Из Википедии, свободной энциклопедии
Remove ads
H2 — открытая кроссплатформенная СУБД, полностью написанная на языке Java.
Несмотря на малый размер (чуть более 1 МБ) H2 поддерживает следующие возможности «из коробки»:
- Два режима работы (клиент-сервер, встроенный)
- Два режима хранения данных (файловая система, память)
- Поддержка планов выполнения запросов
- Поддержка кластеризации и репликации
- Шифрование данных
- Внешние (связанные) таблицы
- Драйвер ODBC
- Полнотекстовый поиск
- Определение доменов
- Мультиверсионный конкурентный доступ
- Поддержка последовательностей
- Поддержка ключевых слов LIMIT и OFFSET в запросах
- Временные таблицы
- Вычисляемые столбцы
- Пользовательские агрегатные функции
- Пользовательские хранимые процедуры
- Сжатие CLOB/BLOB объектов
- Работа с CSV файлами на чтение и запись
- Браузерная консоль управления
- Запуск как сервис Windows
Что ещё не реализовано:
- Оконные функции (реализована только функция ROW_NUMBER() OVER())
- Многопоточная обработка запросов
- Полная поддержка стандарта SQL 2003
Применяется H2, например, в проекте Grails как базовая СУБД для разработки.
Remove ads
История создания
Разработка 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)[3], что может привести к потере данных завершённых транзакций при отключении электропитания.
В документации заявлено, что в системе не используются вызовы FileDescriptor.sync(), FileChannel.force() и fsync, поскольку они существенно замедляют работу системы: при их использовании достижимы только 60 операций записи в секунду.
Другая причина, по которой не используется fsync, состоит в том, что многие диски поставляются со включенной опцией кэширования записи.
Для обеспечения durability в документации предлагается использовать дополнительные команды SET WRITE_DELAY и CHECKPOINT SYNC, которые доступны только с правами администратора.
Оригинальный текст (англ.)
Trying to flush hard drive buffers is hard, and if you do the performance is very bad. First you need to make sure that the hard drive actually flushes all buffers. Tests show that this can not be done in a reliable way. Then the maximum number of transactions is around 60 per second. Because of those reasons, the default behavior of H2 is to delay writing committed transactions.
In H2, after a power failure, a bit more than one second of committed transactions may be lost. To change the behavior, use SET WRITE_DELAY and CHECKPOINT SYNC. Most other databases support commit delay as well. In the performance comparison, commit delay was used for all databases that support it.
In H2, after a power failure, a bit more than one second of committed transactions may be lost. To change the behavior, use SET WRITE_DELAY and CHECKPOINT SYNC. Most other databases support commit delay as well. In the performance comparison, commit delay was used for all databases that support it.
Remove ads
Планируемые нововведения
- Улучшение производительности
- Серверные курсоры
Новые версии
Над СУБД продолжается активная работа, новые версии выпускаются практически каждый месяц.
Примечания
Ссылки
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
