Выпуск СУБД Firebird 5.0

После двух с половиной лет разработки представлен релиз реляционной СУБД 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