Введение

HSQLDB (Hyper SQL Database) – это реляционная система управления базами данных, написанная на языке Java. Она включает в себя JDBC-драйвер и поддерживает значительную часть стандартов SQL 92, SQL:2008, SQL:2011 и SQL:2016. HSQLDB предлагает быстрый, компактный (около 1300 килобайт в версии 2.2) движок базы данных, обеспечивающий работу как с таблицами в памяти, так и с дисковыми таблицами. Доступны встроенный и серверный режимы работы. Кроме того, в состав входят инструменты, такие как минимальный веб-сервер, средства управления через командную строку и графический интерфейс (могут запускаться как апплеты), а также ряд демонстрационных примеров. HSQLDB может работать на Java Runtime Environment версии 1.1 и выше, включая бесплатные реализации Java, такие как Kaffe. HSQLDB распространяется под лицензией BSD. Она используется в качестве базы данных и механизма хранения данных во многих проектах с открытым исходным кодом, например, в производных от OpenOffice.org Base (таких как Apache OpenOffice Base, LibreOffice Base и др.), а также в VoIP и видеоконференц-клиенте Jitsi, начиная с версии 2.6. HSQLDB также применяется в коммерческих продуктах, таких как Mathematica и InstallAnywhere (начиная с версии 8.0).

Поддержка транзакций

HSQLDB версии 2.0 имеет три режима управления транзакциями. Она поддерживает уровни изоляции транзакций "read committed" и "serializable" с использованием блокировок на уровне таблицы или с многоверсионным управлением конкурентным доступом (MVCC), либо комбинации блокировок и MVCC. Версия 1.8.1 поддерживает только уровень изоляции транзакций 0 ("read uncommitted").

Хранение данных

HSQLDB имеет два основных типа таблиц, используемых для надежного хранения данных с возможностью чтения и записи, то есть, если транзакция успешно зафиксирована, гарантируется, что данные переживут сбой системы и сохранят свою целостность. Тип MEMORY по умолчанию сохраняет все изменения данных на диске в виде SQL-скрипта. При запуске движка эти команды выполняются, и данные восстанавливаются в памяти. Другой тип таблицы – CACHED, который позволяет хранить больше данных, но с более низкой производительностью. Движок HSQLDB загружает их только частично и синхронизирует данные с диском при фиксации транзакций. Однако движок всегда загружает в память все строки, затронутые при обновлении. Это делает невозможным выполнение очень больших обновлений без разделения задачи на более мелкие части. Другие типы таблиц обеспечивают доступ к файлам со значениями, разделенными запятыми (CSV). Эти таблицы могут участвовать, например, в запросах с использованием JOIN и упрощают обработку электронных таблиц, а также обеспечивают чтение и запись временных данных в памяти.

Особенности SQL

HSQLDB 2.0 поддерживает все основные и многие дополнительные возможности SQL:2008. К расширенным возможностям относятся определяемые пользователем SQL-процедуры и функции, схемы, интервалы дат и времени, обновляемые представления, массивы, большие объекты (LOB), полные и латеральные соединения, а также операции над множествами. Поддерживаются также многие нестандартные функции, такие как TO CHAR и DECODE. Расширения стандарта SQL включают в себя определяемые пользователем агрегатные функции.

Релизы

С 2001 года было выпущено несколько версий HSQLDB. Ранние версии были основаны на устаревшем движке базы данных HypersonicSQL. Версия 2.0, выпущенная в 2010 году, представляет собой в основном новый код, написанный в соответствии со стандартом SQL и спецификацией JDBC 4. Версия 2.3.2 (выпущена в 2014 году) полностью многопоточная и поддерживает высокопроизводительные двухфазные блокировки и модели управления транзакциями MVCC (multiversion concurrency control).