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
