След две години и половина разработка, е представена версия 5.0 на релационната СУБД Firebird. 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) при отдалечен достъп до базата данни.
- Извършена е оптимизация на производителността при копиране на BLOB обекти.
- Добавена е пълна поддръжка на синтаксиса за дефиниране на низове, описан в SQL стандарта. Например, низовете вече могат да бъдат прекъсвани от коментари или интервали: select 'ab' /* comment */ 'cd' from RDB$DATABASE; select 'ab' 'cd' from RDB$DATABASE;
Източник: opennet.ru
