După doi ani și jumătate de dezvoltare, a fost lansată versiunea 5.0 a SGBD-ului relațional Firebird. Firebird continuă dezvoltarea codului SGBD-ului InterBase 6.0, deschis în anul 2000 de compania Borland. Firebird este distribuit sub licența liberă MPL și suportă standardele ANSI SQL, inclusiv funcționalități precum trigger-e, proceduri stocate și replicare. Versiuni binare sunt disponibile pentru Linux, Windows, macOS și Android.
Noutăți cheie:
- A fost implementată posibilitatea de a efectua operații în mod multi-thread. Paraleizarea în mai multe fire este aplicabilă la crearea de indici, curățarea memoriei (operații automate și manuale de sweep), crearea de backup-uri și restaurarea din acestea. gfix -sweep -parallel 4 dbname gbak -b -par 4 -user username -pass password dbname backupname
- A fost adăugată suportul pentru indici parțiali, care includ doar înregistrările selectate, care îndeplinesc condițiile specificate la crearea indexului. CREATE INDEX IT1_COL ON T1 (COL) WHERE COL < 100;
- În expresiile SELECT WITH LOCK, UPDATE și DELETE a fost implementată sintaxa „SKIP LOCKED”, care permite excluderea înregistrărilor pentru care a fost instaurată o blocare în momentul trimiterii cererii (de exemplu, pentru a nu aștepta eliberarea blocării în cazul unei confruntări cu o altă tranzacție).
- A fost adăugată posibilitatea de a actualiza baza de date la o versiune intermediară actualizată a structurii pe disc (ODS — On-Disk-Structure) în timp real (inline update) fără a crea și a restaura dintr-un backup. De exemplu, acum se poate transforma în timp real o bază de date în format Firebird 4.0 (ODS 13.0) în format Firebird 5.0 (ODS 13.1).
- A fost implementat un cache pentru expresiile SQL compilate, gestionat automat (înregistrările învechite sunt eliminate pe măsură ce este necesar). Dimensiunea cache-ului este setată prin parametrul MaxStatementCacheSize din firebird.conf.
- A fost adăgat o interfață pentru profilarea SQL și PSQL, care permite evaluarea timpului de execuție a fiecărei cereri, acumulând statistici despre numărul de cereri și identificând problemele de performanță.
- În expresia MERGE a fost adăugată suportul pentru blocul condițional „WHEN NOT MATCHED BY SOURCE”, care se activează atunci când înregistrarea sursă nu se potrivește cu nicio înregistrare din setul țintă. 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
- S-a asigurat posibilitatea de a returna mai multe rânduri prin expresia RETURNING, dacă DML-ul specificat acoperă mai multe rânduri (anterior, în astfel de situații, apărea eroarea „multiple rows in singleton select”).
- Funcții noi încorporate: UNICODE_CHAR pentru returnarea simbolului unicode corespunzător unui cod dat și UNICODE_VAL pentru returnarea codului pentru un simbol dat. Funcțiile EXTRACT, FIRST_DAY și LAST_DAY au fost actualizate cu parametrul QUARTER pentru a determina numărul trimestrului.
- A fost adăugat un nou pachet de sistem RDB$BLOB_UTIL cu o colecție de operațiuni cu BLOB-uri pentru modulele PSQL.
- Algoritmul de comprimare a înregistrărilor a fost îmbunătățit, aplicând acum un contor de lungime variabilă pentru o ambalare mai eficientă a secvențelor de date repetitive. Optimizarea a permis creșterea semnificativă a ratei de comprimare pentru câmpurile VARCHAR lungi, care nu sunt complet umplute, cu date în codificarea UTF-8.
- A fost adăugată posibilitatea de a lucra cu cursorii bidirecționali (scrollable) în timpul accesării de la distanță a bazei de date.
- A fost optimizată performanța copierii BLOB-urilor.
- A fost adăugat suport complet pentru sintaxa de definire a stringurilor, așa cum este descrisă în standardul SQL. De exemplu, stringurile pot fi acum întrerupte de comentarii sau spații: select 'ab' /* comment */ 'cd' from RDB$DATABASE; select 'ab' 'cd' from RDB$DATABASE;
Sursa: opennet.ro
