Etwas NoSQL fĂĽr MariaDB
Der freie MySQL-Fork soll in der nächsten Version "dynamische Spalten" enthalten. Sie ermöglichen das Speichern unterschiedlicher Attribute für jeden Datensatz innerhalb einer Tabelle.
- Christian Kirsch
Mit den jetzt eingeführten "dynamischen Spalten" weicht MariaDB das herkömmliche relationale Datenmodell etwas auf. Der freie MySQL-Abkömmling soll in seiner nächsten Version (5.3) solche Dynamic Columns enthalten, die einen Hauch von NoSQL bringen. Ein Ziel bei ihrer Entwicklung war, diese Spalten genauso wie herkömmliche in SQL-Befehlen verwenden zu können.
Hinter den neuen Spalten steckt eine BLOB-Spalte (Binary Large Object), die man beim Erzeugen der Tabelle vorsehen muss. Beim Eintragen von Datensätze lassen sich dort mit der Funktion COLUMN_CREATE
Daten hinterlegen:
insert into t1 (name, type, price, dynstr) values
("Funny shirt", "shirt", 10.0, COLUMN_CREATE(1, "blue", 10, "XL")),
("nokia", "phone", 649, COLUMN_CREATE(1, "black", 2, "touchscreen")),
("htc Desire hd", "phone", 579, COLUMN_CREATE(1, "black", 3, "Android")),
("BM/Lenovo Thinkpad X60s", "computer", 419, COLUMN_CREATE(1, "black", 3, "Linux"));
In diesem Beispiel hat jeder Eintrag einen Namen, einen Preis und einen Typ ("shirt", "phone" oder "computer"). Je nach Bedarf werden in der Spalte dynstr
dynamische Attribute angelegt, etwa für die Farbe oder das Betriebssystem. Anders als bei herkömmlichen haben dynamische Attribute keine Namen, sondern nur eine Spaltennummer. Das wollen die Entwickler jedoch noch ändern. Zum Aktualisieren und Löschen dient die Funktion COLUMN_ADD
in einem herkömmlichen UPDATE
-Statement:
UPDATE t1 SET dynstr=COLUMN_ADD(dynstr, 1, "red")
WHERE COLUMN_GET(dynstr, 1 as char(10)) = "black";
Dies illustriert auch die Verwendung von COLUMN_GET
in WHERE
-Klauseln. EIne Liste der vorhandenen dynamischen Spalten liefert COLUMN_LIST(dynstr)
. Neben diesen SQL-Funktionen gibt es eine C-API fĂĽr die Arbeit mit dynamischen Spalten.
Bislang ist der Code nur im Quellcode-Repository von MariaDB verfĂĽgbar, den Interessenten ĂĽbersetzen mĂĽssen. (ck)