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, rilasciato nel 2000 dall'azienda Borland. Firebird è distribuito con la licenza MPL e supporta gli standard ANSI SQL, comprese funzionalità come trigger, procedure memorizzate e replicazione. Le compilazioni binarie sono preparate per Linux, Windows, macOS e Android.
Novità principali:
- È stata implementata la possibilità di eseguire operazioni in modalità multi-thread. Il parallelismo in più thread è applicabile nella creazione di indici, nella raccolta dei rifiuti (operazioni automatiche e manuali sweep), nella creazione di backup e nel ripristino da essi. 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 selettive che soddisfano le condizioni specificate al momento della creazione dell'indice. CREATE INDEX IT1_COL ON T1 (COL) WHERE COL < 100;
- Nelle espressioni SELECT WITH LOCK, UPDATE e DELETE è stato implementato il sintassi "SKIP LOCKED", che consente di escludere le righe per le quali, al momento dell'invio della richiesta, è impostato un blocco (ad esempio, per non dover aspettare il rilascio del blocco durante l'intersezione con un'altra transazione).
- È stata aggiunta la possibilità di aggiornare il DB alla versione intermedia attuale della struttura di archiviazione (ODS — On-Disk-Structure) on-the-fly (inline update) senza creare e ripristinare da un backup. Ad esempio, ora è possibile convertire on-the-fly un DB nel formato Firebird 4.0 (ODS 13.0) nel formato Firebird 5.0 (ODS 13.1).
- È stato implementato un cache per le espressioni SQL compilate, gestito automaticamente (le voci obsolete vengono rimosse all'occorrenza). La dimensione della cache è impostata 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 ogni query, accumulando statistiche sul numero di query e identificando problemi di prestazioni.
- Nell'espressione MERGE è stata aggiunta la supporto per il blocco condizionale "WHEN NOT MATCHED BY SOURCE", che si attiva quando il record sorgente non corrisponde a nessun record 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 garantita la possibilità di restituire più righe utilizzando l'espressione RETURNING, se l'espressione DML specificata copre più righe (in precedenza, in situazioni simili, veniva visualizzato l'errore «multiple rows in singleton select»).
- Sono state aggiunte nuove funzioni incorporate: UNICODE_CHAR per restituire il carattere unicode corrispondente al codice specificato, e UNICODE_VAL per restituire il codice per il carattere specificato. Nella funzione EXTRACT, sono stati aggiunti i parametri FIRST_DAY, LAST_DAY e QUARTER per determinare il numero del trimestre.
- È stato aggiunto un nuovo pacchetto di sistema RDB$BLOB_UTIL con una raccolta di operazioni su BLOB per i moduli PSQL.
- È stato migliorato l'algoritmo di compressione dei record, che ora applica un contatore a lunghezza variabile per un'imballaggio più efficiente delle sequenze di dati ripetute. L'ottimizzazione ha consentito di aumentare significativamente il tasso di compressione dei campi VARCHAR lunghi non completamente popolati con dati in codifica UTF-8.
- È stata aggiunta la possibilità di lavorare con cursori bidirezionali (scrollable) durante l'accesso remoto a un database.
- È stata ottimizzata la performance di copia dei BLOB.
- È stato aggiunto il supporto completo per la sintassi di definizione delle righe, come descritto nello standard SQL. Ad esempio, le righe ora possono essere interrotte da commenti o spazi: select ‘ab’ /* comment */ ‘cd’ from RDB$DATABASE; select ‘ab’ ‘cd’ from RDB$DATABASE;
Fonte: opennet.ru
