NewSQL: Was ist neu an der NoSQL Nachfolge?

NoSQL-Datenbanken haben uns gezeigt, wie skalierbare performante Datenbanken aufgebaut werden können. Leider oft auf Kosten von Transaktionssicherheit, relationaler Joins und anderen Features, welche relationale Datenbanken über die Jahre berechtigterweise zu einem in der Welt der Business-Anwendungen nicht mehr wegzudenkenden Grundpfeiler werden ließ. Auch die proprietären Client-Bibliotheken der gängigen NoSQL-Datenbanken stellen eine Hürde dar, denn auch was vor über 10 Jahren als einer der Hauptargumente für SQL-Datenbanken diente — kurze Einarbeitungszeiten und kompatibles Tooling durch eine weitestgehend standarisierte Abfragesprache — hat auch heute noch Gültigkeit und wird von gängigen NoSQL-Datenbanken oft nicht bedient, wenngleich dies die Anhänger oft nicht hören wollen. Darüber hinaus hat sich SQL über die letzten Jahrzehnte als Abfragesprache bewährt und bewiesen, dass die Konzepte dahinter tragfähig und überaus flexibel sind.

Daher verwundert es nicht, dass der nächste logische Schritt die Vermählung der beiden Platzhirsche SQL und NoSQL darstellt — der Begriff NewSQL ist geboren.

Wir bekommen die Skalierbarkeit und Performance von NoSQL-Konzepten, wie Sharding und In-Memory-Cluster, ohne auf ACID-kompatible Transaktionen verzichten zu müssen oder eine neue Abfragesprache lernen zu müssen. Auch die Datenbankmodelle lehnen sich an den klassischen relationalen Ansätzen mit Tabellen an, was den gedanklichen Umstieg vereinfacht.

Ein Blick auf die ersten Implementierungen lässt uns am besten verstehen, was es hiermit auf sich hat.

VoltDB

Volt DB ist eine ACID-kompatible In-Memory Datenbank. Die Datenbank ist von Hause aus für den Clusterbetrieb ausgelegt und ermöglicht das Hinzufügen beliebiger Cluster-Nodes. Die Entwickler versprechen hierbei eine nahezu lineare Skalierung der DB. Schon bei den ersten Versuchen fühlt man sich als SQL-Entwickler zu Hause, da für Queries und DDL die SQL-Syntax verwendet wird, die keinen Unterschied zu herkömmlichen SQL-Datenbanken erkennen lässt.

Das Einfügen von Datensätzen erfolgt über ein Insert-Statement:

insert into person values ('Hannelore','Müller','W');

Auch die Möglichkeiten der Abfragen lässt uns nicht erkennen, dass wir hier mit einer verteilten In-Memory Datenbank arbeiten.

select count(*) as total from towns;

Auch Indizes, Order-by-, und Group-by-Statements können wie gewohnt genutzt werden. Aber auch komplexere Funktionen wie partitionierte Tabellen und Stored Procedures stehen zur Verfügung.

SAP Hana

Der Software-Riese hat vor einiger Zeit mit der Veröffentlichung seiner neuen Datenbanklösung SAP Hana überrascht. Die Lösung basiert ebenfalls auf einer In-Memory-Datenbank, welche über ein SQL-Layer abgefragt werden kann. Besonders gelungen hierbei ist die Cloud-Lösung, welche die Verwendung von Java, HTML5 oder ABAP für Oberflächen ermöglicht.

Einen interessanten Ansatz verfolgt SAP, indem sie die Vorteile von spalten- und zeilenorientierten Datenbanken vereint. Eine Tabelle kann entweder zeilen- oder spaltenorientiert sein und dies auf dem gleichen Datenbankschema. Ein Join zwischen Tabellen der beiden Welten ist problemlos möglich. Dies eröffnet gerade im Bereich von Business Intelligence Lösungen und statistischen Auswertungen ganz neue Möglichkeiten, sind hier doch spaltenorientierte Ansätze häufig klar im Vorteil.

MemSQL

The fastest In-Memory Database, so begrüßt uns die Homepage dieses Unternehmens. Ähnlich wie SAP Hana beschränkt auch MemSQL sich nicht auf ein bestimmtes Datenmodell, sondern vereint unter einer Haube mehrere Data Storage-Konzepte. You have the choice!

So bietet sich die Verwendung des Disk-Based Column Stores für Daten, welche häufig durch Aggregate-Funktionen gelesen werden, zeilenbasierte In-Memory-Tabellen zur schnellen Verarbeitung von klassischen Datensätzen an.

MemSQL eignet sich besonders für Realtime-Abfragen, wobei die Abfragen in SQL erfolgen. Auch geospatiale Abfragen wurden in die SQL-Syntax integriert. Transaktionen werden natürlich auch geboten. Eine interessante Idee ist auch, dass MemSQL protokollkompatibel zu MySQL ist. D. h., MySQL-Datenbank/JDBC-Treiber sowie das Tooling aus dem MySQL-Umfeld funktionieren mit MemSQL zusammen. Die Migration einer Application von MySQL zu MemSQL gestaltet sich somit auch recht einfach. Die Datenbank skaliert horizontal im Cluster, wie alle anderen Vertreter der neuen Generation. Eine beeindruckende Demo zeigt, wie MemSQL mit einem horizontal skalierten 6 Node Cluster eine Oracle Demo nachstellt, welche auf beeindruckend teurer Hardware basiert.

NuoDB

NuoDB ist ein weiterer Verfechter der NewSQL-Philosophie. Wobei der Hersteller hier den Fokus auf global verteilte Datenbanken legt. Die Datenbank unterstützt wie alle Vertreter, trotz der Möglichkeit, diese auf mehrere Standorte zu verteilen, ACID-kompatible Transaktionen und wird über SQL abgefragt. Die Skalierbarkeit wird über eine Multi-Tier-Architektur erreicht, bei der Transaktionen und Storage in zwei unterschiedliche Schichten ausgelagert werden (zusätzlich hierzu besteht noch eine Administrationsschicht). Die beiden Schichten sind getrennt skalierbar. Einzelne Knoten des Clusters übernehmen die Aufgaben von Transaction Manager und/oder Storage Managern und sind on-the-fly austauschbar (Fail-over).

Um Konflikte bei datacenter-übergreifenden, verteilten Transaktionen in den Griff zu bekommen, setzt NuoDB darüber hinaus einen Multi-Version Concurrency Control Mechanismus ein, um Konflikte bei Transaktionen zu handeln. Durch ein asynchrones Messaging zwischen den Peers werden Änderungen bereits vor dem Commit gegen andere Transaktionen geprüft.

Fazit

Sollten Sie auf NewSQL setzen? Nun, wenn Sie zufrieden sind mit Ihrer relationalen Datenbanklösung, dann sollten Sie hieran festhalten. Verändert sich Ihr Business in eine neue Richtung, in denen relationale Datenbanken nicht mehr ausreichend skalieren, dann ist der Blick auf die neuen Vertreter der NewSQL-Zunft ganz sicher empfehlenswert, speziell wenn Sie bereits SQL-Wissen in Ihrem Unternehmen aufgebaut haben oder auf ACID-konforme Transaktionen angewiesen sind. Aber auch hier gilt: eine Lösung passt nie auf alle Probleme.

Short URL for this post: http://wp.me/p4nxik-2C2
This entry was posted in Java Persistence and tagged , , , , . Bookmark the permalink.

Leave a Reply