Nach zweieinhalb Jahren Entwicklung wird die Veröffentlichung des relationalen DBMS Firebird 5.0 vorgestellt. Firebird setzt die Entwicklung des DBMS InterBase 6.0 fort, das 2000 von Borland geöffnet wurde. Firebird wird unter der MPL-Lizenz veröffentlicht und unterstützt die ANSI SQL-Standards, einschließlich Funktionen wie Trigger, gespeicherte Prozeduren und Replikation. Die Binärversionen sind für Linux, Windows, macOS und Android verfügbar.
Schlüsselneuheiten:
- Die Möglichkeit zur Ausführung von Operationen im Multithreading-Modus wurde implementiert. Die Parallelisierung in mehrere Threads ist anwendbar beim Erstellen von Indizes, bei der Garbage Collection (automatische und manuelle Sweep-Operationen), beim Erstellen von Backups und bei der Wiederherstellung daraus. gfix -sweep -parallel 4 dbname gbak -b -par 4 -user username -pass password dbname backupname
- Die Unterstützung für partielle Indizes wurde hinzugefügt, die nur ausgewählte Datensätze umfassen, die den beim Erstellen des Index angegebenen Bedingungen entsprechen. CREATE INDEX IT1_COL ON T1 (COL) WHERE COL < 100;
- In den SELECT WITH LOCK-, UPDATE- und DELETE-Ausdrücken wurde die Syntax „SKIP LOCKED“ implementiert, die es ermöglicht, Datensätze auszuschließen, für die zum Zeitpunkt der Anfrage eine Sperre gesetzt ist (zum Beispiel, um nicht auf die Freigabe der Sperre zu warten, wenn sie mit einer anderen Transaktion kollidiert).
- Die Möglichkeit, die Datenbank während des Betriebs auf die aktuelle Zwischenversion der Speicherstruktur (ODS — On-Disk-Structure) zu aktualisieren, wurde hinzugefügt (Inline-Update) ohne Erstellen und Wiederherstellen aus einem Backup. Zum Beispiel kann die Datenbank im Firebird 4.0-Format (ODS 13.0) nun im Firebird 5.0-Format (ODS 13.1) aktualisiert werden.
- Ein Cache für kompilierte SQL-Ausdrücke wurde implementiert, der automatisch verwaltet wird (veraltete Einträge werden bei Bedarf gelöscht). Die Größe des Caches wird über den Parameter MaxStatementCacheSize in der firebird.conf festgelegt.
- Eine Schnittstelle zur Profilerstellung von SQL und PSQL wurde hinzugefügt, die es ermöglicht, die Ausführungszeit jedes Antrags zu beurteilen, Statistiken über die Anzahl der Anfragen zu sammeln und Leistungsprobleme zu identifizieren.
- In den MERGE-Ausdruck wurde die Unterstützung für den bedingten Block „WHEN NOT MATCHED BY SOURCE“ integriert, der aktiviert wird, wenn der ursprüngliche Datensatz mit keinem Datensatz im Zielset übereinstimmt. 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
- Es wurde die Möglichkeit geschaffen, mehrere Zeilen mit dem RETURNING-Ausdruck zurückzugeben, wenn der angegebene DML-Ausdruck mehrere Zeilen umfasst (früher wurde in solchen Fällen der Fehler „multiple rows in singleton select“ ausgegeben).
- Neue integrierte Funktionen wurden hinzugefügt: UNICODE_CHAR zur Rückgabe des Unicode-Zeichens, das dem angegebenen Code entspricht, und UNICODE_VAL zur Rückgabe des Codes für das angegebene Zeichen. In den Funktionen EXTRACT, FIRST_DAY und LAST_DAY wurde der Parameter QUARTER hinzugefügt, um die Quartalsnummer zu bestimmen.
- Ein neues Systempaket RDB$BLOB_UTIL wurde mit einer Sammlung von Operationen für BLOBs für PSQL-Module hinzugefügt.
- Der Algorithmus zur Komprimierung von Datensätzen wurde verbessert, indem jetzt ein Zähler variabler Länge verwendet wird, um wiederholte Datenfolgen effizienter zu verpacken. Diese Optimierung hat zu einer erheblichen Steigerung der Kompressionsrate von nicht vollständig gefüllten langen VARCHAR-Feldern mit Daten in UTF-8-Codierung geführt.
- Die Möglichkeit zur Arbeit mit bidirektionalen (scrollable) Cursor bei entfernten Netzwerkaufrufen zur Datenbank wurde hinzugefügt.
- Die Leistung der BLOB-Kopie wurde optimiert.
- Die vollständige Unterstützung der in SQL definierten String-Syntax wurde hinzugefügt. Zum Beispiel können Strings jetzt durch Kommentare oder Leerzeichen unterbrochen werden: select ‘ab’ /* comment */ ‘cd’ from RDB$DATABASE; select ‘ab’ ‘cd’ from RDB$DATABASE;
Quelle: opennet.ru
