NoSQL: Datenbanksysteme im Vergleich

Im Gegensatz zu der Erwartung von vielen Menschen steht die Definition von NoSQL für „Not only SQL“ und nicht für „No SQL“.  Somit stellt NoSQL keinen direkten Widerspruch zu SQL dar. Was es genau mit NoSQL auf sich hat und welche Systeme aktuell am beliebtesten sind und warum erklären wir euch heute.

Warum überhaupt NoSQL?

Warum sollte ich NoSQL für mein Projekt in Betracht ziehen? Wo genau liegen die Vorteile? Jedes Datenbankmodell besitzt verschiedene Vor und Nachteile. Eine genaue Prüfung des jeweiligen Anwendungsszenarios ist daher sinnvoll. Relationale Datenbanken wie der SQL Server oder Oracle RDBMS besitzen Beschränkungen (Constraints) auf Spalten und gewährleisten somit eine hohe Datenqualität. In eine “Integer” (Ganzzahl) Spalte kann kein Text geschrieben werden. Der große Unterschied zu NoSQL besteht genau darin. Diese Beschränkungen werden häufig weggelassen. Die Performancevorteile können dadurch enorm sein. Die daraus resultierenden Freiheiten bedeuten eine höhere Verantwortung für die Entwickler, die dann Aufgaben der Datenbank übernehmen müssen. Bei Datenbanken geht es eigentlich immer nur um ein Thema: Performance! Und deswegen kommt NoSQL ins Spiel!

Skalierbarkeit

Stop! Einer der wichtigsten Kriterien bei der Auswahl von einem Datenbanksystem ist die Datenmenge und die daraus resultierende Notwendigkeit der Skalierbarkeit. Dieser Bereich unterteilt sich in 2 Konzepte: „Scale-up“ und „Scale-out“.

„Scale-up“ bedeutet, dass es wenige aber Rechenleistungsstarke Server gibt. Ein Vorteil gegenüber „Scale-out“ ist, dass durch die geringe Anzahl an Servern (häufig nur einer) komplizierte Synchronisationsmechanismen wegfallen. Ist die Leistung nicht mehr ausreichend müssen die Komponenten durch leistungsstärkere getauscht werden. Dies ist mit hohen Kosten verbunden und kann Ausfallzeiten zur Folge haben. Dies macht vor allem auch dann Sinn, wenn die Lizenzierungskosten pro System sehr hoch sind.

„Scale-out“ setzt hingegen auf eine Vielzahl von Servern die nicht besonders leistungsstark sein müssen. Ein System mit über hundert Knoten ist daher kein Einzelfall. Die Erweiterung des Systems mit neuen Knoten ist daher ebenfalls günstig.  Bei Bedarf können schnell neue Server dem System hinzugefügt oder entfernt werden, falls die Leistung nicht mehr benötigt wird. Aufgrund der Masse an Knoten ist eine hohe Ausfallsicherheit und Verfügbarkeit gewährleistet.  Als Nachteil wäre zu nennen, dass die Knoten auch gewartet und konfiguriert werden müssen, was bei der Anzahl der Knoten einen Mehraufwand bedeutet. Des Weiteren ist es komplex die Konsistenz der Daten auf allen Knoten zu gewährleisten. Mittlerweile haben sich hier bereits einige Konzepte etabliert.

Publikumsliebling “MongoDB”

Tada: Das meistverwendete NoSQL-System Weltweit ist “MongoDB”. Der Name kommt von dem Wort „Humongous“ was gigantisch bedeutet. Im Gegensatz zu den Tabellen/Spalten orientierten Datenbanksystemen baut MongoDB auf JSON-ähnlichen Dokumenten auf. Um in einer relationalen Datenbank verschachtelte Listen (N zu M Beziehungen) darzustellen, werden außer den Tabellen für die Daten noch weitere Zuordnungstabellen benötigt. In MongoDB können hingegen verschachtelte Listen innerhalb eines Dokumentes dargestellt werden. Die Dokumente entsprechen den Objekten die in modernen Anwendungen verwendet werden. Die Daten können somit direkt in dem Format geladen werden, in der die Anwendung Verwendung finden. Dadurch spart man sich beim Laden und Speichern die Transformationen und das Auflösen von Beziehungen, die benötigt werden um die Daten in einer Spaltenstruktur zu speichern.

Wenn wir schon bei MongoDB sind müssen wir auch CouchDB erwähnen. Das war es jedoch auch schon. CouchDB und mongoDB unterscheiden sich nur in kleinen Details. Das speichern der Daten funktioniert auf gleiche Weise. In mongoDB finden alle Operationen auf dem Server statt. Bei CouchDB gibt es mehr Möglichkeiten für Offline-Apps.

Der Aussenseiter “Apache Cassandra”

Apache Cassandra ist ein Spaltenorientiertes Datenbanksystem. Daten werden nicht zeilenweise, sondern spaltenweise gespeichert. Jeder Eintrag besteht aus dem Namen der Spalte, dem Eintrag selbst und einem Zeitstempel. Spalten mit ähnlichen oder verwandten Inhalten schaffen sogenannte „Column Families“. Diese sind vergleichbar mit Tabellen aus einer relationalen Datenbank. Diese Struktur hat vor allem Vorteile in Sachen Geschwindigkeit. Im Gegensatz zu relationalen Datenbanken wo eine ganze Tabelle ausgelesen werden muss, werden hier nur die Spalten ausgelesen, die für den lesenden Zugriff benötigt werden. Solange es nur um eine Spalte geht, ist das schreiben auch sehr schnell. Wenn größere Datenmengen geschrieben werden müssen (equivalent eine Zeile einer relationalen Datenbank) muss auf alle relevanten Spalten zugegriffen werden, was zeitlich dem Schreibvorgang einer relationalen Datenbank entspricht. Cassandra eignet sich somit nur für kleinere bis mittelgroße Projekte. MongoDB ist für große Datenbanken geschaffen.

Das Universum “Azure Cosmos DB”

Anders als der Name es vermuten lässt, ist die Azure Cosmos DB kein Datenbanksystem im eigentlichen Sinn, sondern ein Dienst. Es ist möglich innerhalb der Cosmos DB verschiedene Datenbanksysteme wie Relationale Datenbanken, MongoDB oder Cassandra zu nutzen. Azure Cosmos DB stellt die Infrastruktur zur Verfügung die benötigt wird um verschiedenste Systeme zu betreiben. Das Preismodell richtet sich nach der zu speichernden Menge der Daten sowie der Anzahl der Anfragen, die an eine Datenbank gesendet werden. Wird mehr Leistung benötigt, kann diese flexibel nachgebucht werden. Ein großer Teil der Wartungs- und konfigurationsaufgaben werden von Microsoft übernommen. So ist Durchsatz und die Verfügbarkeit garantiert.

So weit so gut — was nun?

Natürlich gibt es noch viel mehr NoSQL-Datenbanksysteme als diese beiden. Es gibt mind. noch ein ganzes dutzend. MongoDB könnt ihr ganz einfach ausprobieren, Cassandra ist OpenSource und somit nur einen Klick entfernt. Freunde: Wagt einen Blick über den Tellerrand. Es gibt mehr als nur den Microsoft SQL-Server. Und wer weiß: Vielleicht steht das erste NoSQL-Projekt schon kurz bevor. Ihr wisst es nur noch nicht…