Neue Funktionen in MariaDB 10.2

7. Juli 2017

Mit der Version 10.2 ihrer Open Source Datenbank hat die MariaDB Corporation Ab einige wichtige Neuerungen gebracht, die sich verstärkt an Anwendungsentwickler wenden und damit neue Anwendungsmöglichkeiten und Optimierungen bieten. Zusammen mit der Vollintegration der Galera Cluster Funktionalität in Version 10.1 wird MariaDB die Open Source Alternative für geschäftskritische Anwendungen in Unternehmen jeglicher Größenordnung.

Aber auch für Datenbank-Administratoren biete die neue Version interessante Neuerungen. Die wichtigste dürfte die Flashback-Funktion sein, mit der basierend auf den Binary Logs eine gezielte Rücksetzung der Datenbank möglich ist.

Hinzu kommen die neuen Features des unter der Business Source License stehenden MaxScale Database Proxies. Diese Komponente macht hochverfügbare Datenbank Backends ncoh einfacher nutzbar und eröffnet durch seine flexible Konfigurierbarkeit, die weitgehend dynamisch im laufenden Betrieb möglich ist, auch ganz neue Anwendungsfelder.

Schließlich steht mit der Column Store Engine eine hochperformante Storage Engine für Analytical Data Processing zur Verfügung.

JSON-Erweiterungen

JSON (JavaScript Object Notation), gewinnt in der Entwicklung von Web-basierten Anwendungen immer mehr Bedeutung als plattform-unabhängiges Datenaustauschformat. Es ist damit ähnlich wie Mitte der 1990 Jahre XML geeignet, die Art wie Anwendungen entwickelt werden und miteinander kommunizieren deutlich zu verändern und insbesondere zu flexibilisieren. MariaDB Server 10.2 ermöglicht mit mehr den neuen JSON Funktionen die Abfrage, Änderung, Validierung und Indizierung von Daten im JSON-Format. Durch die Möglichkeit der Indizierung über virtuelle Spalten können JSON Daten auf der Basis der Werte definierter Keys innerhalb des JSON-Strings indiziert werden, womit sich ein extrem schneller Zugriff auf JSON-Daten ergibt. Enthalten z.B. alle JSON-Strings einen Key category, so können die Daten nach den Werten für diesen Key indiziert werden und aus einer Volltextsuche, wird so eine gezielte Indexsuche, die dann exakt nach den category-Werten filtert.

Window Functions

Die Window Funktion aus dem SQL Standard ist insbesondere interessant, wenn es um die Extraktion von Daten für statistische Analysen geht. Wie ermitteln Sie heute z.B. für Ihren Vertrieb das gleitende Mittel der Umsätze über die letzten drei oder sechs Monate um Trends zu erkennen.

Vielfach hilft man sich hier mit Sub-Queries oder der Ermittlung von Zwischenergebnissen in temporären Tabellen. Mit den Window Funktionen werden nicht nur die Abfragen übersichtlicher sondern zusätzlich ist der Optimizer in der Lage diese Anfragen besser aufzubereiten, so dass auch ein Performance-Gewinn entsteht.

Common Table Expressions

Kennen Sie Stücklistenauflösungen? Hierbei handelt es sich um rekursive, hierarchische Abragen auf die gleiche Tabelle. Dies wird herkömlich oft mit Sub-Queries im FROM-Clause gelöst. Verwendet man stattdessen das Schlüsselwort WITH, dann erstellt der Optimzer ein temporäres RESULT set, dass innerhalb der aktuellen Query mehrfach darauf zugegriffen werden kann. Nach Abarbeitung der Query wird das RESULT set automatisch verworfen.

Beispiel:

WITH parts_list (partno, amount, description, price) AS
  (
   SELECT partno, amount, description,price FROM PARTS WHERE group_partno = ...
  )
SELECT partno, description, amount, sum(price) AS price_per_part

  FROM parts_list GROUP BY partno

Binary Log Based Rollback - Flashback

[13:15] Anruf eines Database Owners: "Ich habe mir aus meiner Tabelle mit den Vertriebszahlen den ganzen letzten Monat gelöscht. Ich dachte ich wäre auf dem Entwicklugnsserver. Könnt Ihr die wieder herstellen?"

"Wann war denn das?"

"Vor ca. 10 Minuten."

Bisher hieß dies meistens

  • den Server stoppen,
  • das letzte Backup einspielen,
  • alle Binary Logs seit dem Backup und vor dem fraglichen Zeitpunkt nachverarbeiten,
  • im fraglichen Binary Log die DELETE-Anweisung suchen,
  • alle Einträge davor nachverarbeiten,
  • falls möglichauch die danach aufgelaufenen Anweisungen nachverarbeiten (Voraussetzung: keine Abhängigkeiten von den gelöschten Daten).

Da konnten schnell einmal ein paar Stunden vergehen – Stunden, in denen die Datenbank nicht verfügbar ist. Leider ist das kein theoretischer Fall sondern tatsächlich auch schon erlebte Erfahrung.

Mit den erweiterten Funktionen des neuen mysqlbinlog Utilities kann aus dem Binary Log eine inverse Anweisungsfolge erstellt werden, die die Änderungen rückgängig macht. Für die Rekonstruktion müssen also nur alle seit dem DELETE aufgetretenen Anweisungen einschließlich des DELETE selbst revidiert werden. Anschließend können ggf. die Anweisungen nach dem DELETE wieder vorwärts gerollt werden.

Delayed Replication

MariaDB 10.2 führt eine neue Klausel im CHANGE MASTER TO Statement ein:

CHANGE MASTER TO master_delay=<in-seconds>;

Damit ist es möglich den SLAVE gezielt zeitversetzt nachlaufen zu lassen. Diese Funktion kann z.B. benutzt werden für Finanzinformationen auf Online Plattformen. Für die kostenfreie Nutzung werden die Daten typischerweise verzögert – vom Delayed SLAVE gelesen – während zahlende Kunden die Echtzeitwerte vom Master erhalten.

Compressed Binary Log

Binary Logs können erfahrungsgemäß sehr groß werden. Wenn die Ursache darin liegt, dass die Transaktionen sehr groß sind – viele Datenänderungen enthalten – dann können durch die Komprimierung sowohl die anfallenden Datenmengen an Binary Logs reduziert werden, wie auch die Netzwerklast bei der Replikation. Beim Verarbeiten komprimierter Binary Logs werden diese von mysqlbinlog wieder dekomprimiert. Bei der Replikation übernimmt dies der IO_Thread des SLAVEs vor dem Schreiben des Relay Logs.

Enforced CHECK constraints

Bei den Tabellendefinition können jetzt CHECK Constraints je Spalte oder auch Bedingungen zwischen Spalten definiert werden, die bei Einfügen oder Ändern geprüft werden. Würde durch die Ausführung der Anweisung einer der CHECKs verletzt wird die Änderung abgewiesen.

Beispiel:

CREATE TABLE t1 (a INT CHECK (a>2), b INT CHECK (b>2), CONSTRAINT a_greater CHECK (a>b));
INSERT INTO t1 VALUES (4,3);
Query OK, 1 row affected (0.02 sec)
INSERT INTO t1 VALUES (2,3);
ERROR 4025 (23000): CONSTRAINT `a` failed for `test_1`.`t1`
INSERT INTO t1 VALUES (3,3);
ERROR 4025 (23000): CONSTRAINT `a_greater` failed for `test_1`.`t1`
INSERT INTO t1 VALUES (3,2);
ERROR 4025 (23000): CONSTRAINT `b` failed for `test_1`.`t1`

Ausdrücke in der DEFAULT-Klausel

In der DEFAULT-Klausel für Attribute können jetzt auch Ausdrücke verwendet werden mit Ausnahme von Stored Functions und Sub-Queries.

Beispiel:

CREATE TABLE t1 (a int DEFAULT (1+1), b int DEFAULT (a+1));
CREATE TABLE t2 (a bigint primary key DEFAULT UUID_SHORT());

Mehrere Trigger Pro Tabelle

Bisher waren je Tabelle nur je ein BEFORE und AFTER Trigger je DML-Statement möglich also jeweils {BEFORE | AFTER} {INSERT | UPDATE | DELETE}. Mit der Version 10.2 können jetzt von jedem Triggertyp mehrere Trigger auftreten.

Window Functions
JSON (JavaScript Object Notation), a text-based and platform independent data exchange format, is used not only to exchange data, but also as a format to store unstructured data. MariaDB Server 10.2 offers more than 24 JSON functions to allow querying, modification, validation and indexing of JSON formated data, which is stored in a text-based field of a database. As a result, the powerful relational model of MariaDB can be enriched by working with unstructured data, where required. Through the use of virtual columns, the JSON function, JSON_VALUE and the newest indexing feature of MariaDB Server 10.2 on virtual columns, JSON values will be automatically extracted from the JSON string, stored in a virtual column and indexed providing the fastest access to the JSON string. Using the JSON function JSON_VALID, the new CHECK CONSTRAINTS in MariaDB Server 10.2 guarantee that only JSON strings of the correct JSON format can be added into a field.

Drucken E-Mail