После двух с половиной лет разработки представлен релиз реляционной СУБД 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 для определения номера квартала.
- Улучшен алгоритм сжатия записей, который теперь применяет счётчик переменной длины для более эффективной упаковки повторяющихся последовательностей данных. Оптимизация позволила значительно повысить степень сжатия не полностью заполненных длинных полей VARCHAR с данными в кодировке UTF-8.
- Добавлена возможность работы с двунаправленными курсорами (scrollable) при удалённом сетевом обращении к БД.
Источник: http://www.opennet.ru/opennews/art.shtml?num=60430