Dopo due anni e mezzo di sviluppo, è stato presentato il rilascio del DBMS relazionale Firebird 5.0. Firebird continua a sviluppare il codice del DBMS InterBase 6.0, reso disponibile nel 2000 dalla Borland. Firebird è distribuito sotto licenza libera MPL e supporta gli standard ANSI SQL, comprese funzionalità come trigger, procedure memorizzate e replica. Le versioni binarie sono disponibili per Linux, Windows, macOS e Android.
Novità principali:
- È possibile eseguire operazioni in modalità multithreading. Il parallelismo in più thread è applicabile durante la creazione di indici, la raccolta di spazzatura (operazioni di sweep automatiche e manuali), la creazione di backup e il loro ripristino. gfix -sweep -parallel 4 dbname gbak -b -par 4 -user username -pass password dbname backupname
- È stata aggiunta la supporto per indici parziali, che includono solo le righe selezionate che corrispondono alle condizioni specificate durante la creazione dell'indice. CREATE INDEX IT1_COL ON T1 (COL) WHERE COL < 100;
- Nelle espressioni SELECT WITH LOCK, UPDATE e DELETE è implementata la sintassi «SKIP LOCKED», che consente di escludere le righe per le quali è impostato un blocco al momento dell'invio della richiesta (ad esempio, per evitare di dover attendere il rilascio del blocco durante l'intersezione con un'altra transazione).
- È stata aggiunta la possibilità di aggiornare il database alla versione intermedia attuale della struttura su disco (ODS - On-Disk-Structure) in tempo reale (inline update) senza creare e ripristinare da un backup. Ora, ad esempio, è possibile convertire in tempo reale un database in formato Firebird 4.0 (ODS 13.0) nel formato Firebird 5.0 (ODS 13.1).
- È stato implementato un cache delle espressioni SQL compilate, gestito automaticamente (le voci obsolete vengono rimosse secondo necessità). La dimensione della cache è definita tramite il parametro MaxStatementCacheSize in firebird.conf.
- È stata aggiunta un'interfaccia per il profiling di SQL e PSQL, che consente di valutare il tempo di esecuzione di ciascuna query, accumulare statistiche sul numero di query e identificare problemi di prestazioni.
- Nell'espressione MERGE è stato aggiunto il supporto per il blocco condizionale "WHEN NOT MATCHED BY SOURCE", che scatta quando la registrazione di origine non corrisponde a nessuna registrazione nel set di destinazione. 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
- È stata fornita la possibilità di restituire più righe con l'espressione RETURNING, se l'espressione DML specificata copre più righe (in precedenza in situazioni simili veniva restituito un errore "multiple rows in singleton select").
- Sono state aggiunte nuove funzioni integrate: UNICODE_CHAR per restituire il carattere unicode corrispondente al codice specificato, e UNICODE_VAL per restituire il codice per il carattere specificato. Nelle funzioni EXTRACT, FIRST_DAY e LAST_DAY è stato aggiunto il parametro QUARTER per determinare il numero del trimestre.
- È stato aggiunto un nuovo pacchetto di sistema RDB$BLOB_UTIL con una raccolta di operazioni con BLOB per i moduli PSQL.
- È stato migliorato l'algoritmo di compressione delle registrazioni, che ora applica un contatore di lunghezza variabile per un'imballaggio più efficace delle sequenze di dati ripetute. L'ottimizzazione ha permesso di aumentare significativamente il tasso di compressione dei campi VARCHAR lunghi non completamente riempiti con dati in codifica UTF-8.
- È stata aggiunta la possibilità di utilizzare cursori bidirezionali (scrollable) durante l'accesso remoto al database.
- Ottimizzata la performance per la copia dei blob.
- Aggiunto il supporto completo per la sintassi della definizione delle stringhe, come descritto nello standard SQL. Ad esempio, le stringhe possono ora essere interrotte da commenti o spazi: select ‘ab’ /* comment */ ‘cd’ from RDB$DATABASE; select ‘ab’ ‘cd’ from RDB$DATABASE;
Fonte: opennet.ru
