След две години и половина разработка е представена версията на релационната СУБД Firebird 5.0. Firebird продължава развитието на кода на СУБД InterBase 6.0, освободен през 2000 година от компанията Borland. Firebird се разпространява под свободна лицензия MPL и поддържа стандартите ANSI SQL, включително функции като тригери, съхранени процедури и репликация. Бинарните сборки са подготвени за Linux, Windows, macOS и Android.
Ключови нововъведения:
- Реализирана е възможност за изпълнение на операции в многонишков режим. Паралелизацията в няколко потока е приложима при създаване на индекси, събиране на отпадъци (автоматични и ръчни операции sweep), създаване на резервни копия и възстановяване от тях. gfix -sweep -parallel 4 dbname gbak -b -par 4 -user username -pass password dbname backupname
- Добавена е поддръжка за частични индекси, включващи само селективни записи, отговарящи на зададените условия при създаване на индекса. CREATE INDEX IT1_COL ON T1 (COL) WHERE COL < 100;
- В изразите SELECT WITH LOCK, UPDATE и DELETE е внедрен синтаксисът „SKIP LOCKED“, който позволява изключване на записи, за които към момента на изпращане на заявката е наложена блокировка (например, за да не се чака освобождаването на блокировка при пресичане с друга транзакция).
- Добавена е възможност за актуализиране на БД до актуалната междинна версия на хранилището (ODS — On-Disk-Structure) на лету (inline update) без създаване и възстановяване от резервно копие. Например, вече могат на лету да се преобразуват БД в формат Firebird 4.0 (ODS 13.0) в формат Firebird 5.0 (ODS 13.1).
- Реализиран е кеш на компилираните SQL-изрази, обслужван автоматично (остарелите записи се почистват при необходимост). Размерът на кеша се задава чрез параметъра MaxStatementCacheSize в firebird.conf.
- Добавен е интерфейс за профилиране на SQL и PSQL, позволяващ оценяване на времето за изпълнение на всяка заявка, съхранение на статистика за броя на заявките и откриване на проблеми с производителността.
- В израза MERGE е добавена поддръжка на условния блок „WHEN NOT MATCHED BY SOURCE“, който се задейства, когато изходният запис не съответства на нито един запис в целевия набор. MERGE INTO customers c USING new_customers nc ON (c.id = nc.id) WHEN MATCHED THEN UPDATE SET name = nc.name WHEN NOT MATCHED BY SOURCE THEN DELETE
- Осигурена е възможност за връщане на множество редове с израза RETURNING, ако зададеното DML-изразение обхваща множество редове (преди в подобни случаи се извеждаше грешка „multiple rows in singleton select“).
- Добавени са нови вградени функции: UNICODE_CHAR за връщане на unicode символа, съответстващ на зададения код, и UNICODE_VAL за връщане на кода за зададения символ. Функциите EXTRACT, FIRST_DAY и LAST_DAY са допълнени с параметър QUARTER за определяне на номера на квартала.
- Добавен е нов системен пакет RDB$BLOB_UTIL с набор от операции за работа с BLOB-ове за модулите PSQL.
- Оптимизиран е алгоритъмът за компресия на записи, който сега прилага брояч с променлива дължина за по-ефективно опаковане на повтарящи се последователности от данни. Оптимизацията позволи значително повишаване на степента на компресия на непълно запълнени дълги полета VARCHAR с данни в кодировката UTF-8.
- Добавена е възможност за работа с двупосочни курсори (scrollable) при отдалечен достъп до базата данни.
- Извършена е оптимизация на производителността при копиране на блобове.
- Добавена е пълна поддръжка на синтаксиса за определяне на низове, описан в стандарта SQL. Например, низовете сега могат да се разкъсват от коментари или интервали: select ‘ab’ comment *‘cd’ from RDB$DATABASE; select ‘ab’ ‘cd’ from RDB$DATABASE;
Източник: opennet.ru
