Teil 4: Wichtige Datenbanksysteme im Überblick
Teil 4: Wichtige Datenbanksysteme im Überblick
In den letzen Teilen unserer Artikelserie haben wir recht umfassend in die Grundlagen der Datenbanken eingeführt. Neben dem Aufbau eines relationalen Datenbanksystems haben wir uns mit der Abfragesprache SQL beschäftigt. Und jetzt? Wir stellen eine Auswahl einiger typischer Vertreter aus der Datenbankszene vor und blicken auf deren wesentliche Eigenschaften. Und als Zusatz erhalten Sie einen Blick auf die nichtrelationalen Datenbanksysteme, also auf die so genannten NoSQL-Datenbanken.
Dieser Artikel gibt einen Überblick über einige der am Markt verfügbaren Datenbank-Management-Systeme (DBMS) und die zugrunde liegenden Techniken, die von den Systemen verwendet werden. Es werden sowohl relationale (SQL-basierte) als auch nichtrelationale (NoSQL) DBMS vorgestellt. Im konkreten Einzelfall sind die Einsatzmöglichkeiten abzuwägen. Bei den SQL-Datenbanken benötigt man ein Schema, das den Verwendungszweck der Datenbank im Betrieb beschreibt. Ein Beispiel: Eine Personaldatenbank benötigt eine Tabelle Person mit den entsprechenden Spalten, welche die Eigenschaften einer Person näher kennzeichnen. Bei NoSQL-Datenbanken ist das in der Regel nicht der Fall. Sie arbeiten weitgehend ohne Schema und meist dokumentenbasiert, d. h. alle Informationen werden in Dokumenten gespeichert. Voraussetzung ist eine komplexere Logik in der Anwendung, um mit dieser Art der Datenverwaltung umgehen zu können. Informationen zu den grundsätzlichen Zugriffsmöglichkeiten auf eine Datenbank gibt der Kasten „Überblick über die Artikelserie“.
Relationale Datenbanken basieren auf einem Schema. Ein Schema ist eine abstrakte Abbildung der Beziehungen (Relationen) zwischen den Daten, bzw. eine Art Modell. Es gibt eine Vielzahl von relationalen DBMS, die sich durch ihre zur Verfügung gestellten Funktionen unterscheiden. Mögliche Eigenschaften eines relationalen DBMS sind:
Mit diesem Wissen sehen wir uns in den folgenden Textabschnitten einige relationale DBMS an. Weitere Informationen enthält Tabelle 1.
Es existieren verschiedene Zugriffsmöglichkeiten, um auf die Daten innerhalb der Datenbank zuzugreifen:
Im Jahre 1994 wurde MySQL zunächst als Nachimplementierung (Clone) für mSQL entwickelt. Sie wurde damals dazu verwendet, Datenbanken des maskengesteuerten Datenbanksystems UNIREG in Webanwendungen verfügbar zu machen. MySQL war daher sowohl zu mSQL als auch UNIREG kompatibel. Die Software wurde im Jahr 1997 unter der Versionsnummer 3.21 veröffentlicht. Diese Versionsnummer sollte signalisieren, dass sie auf einem schon weiterentwickelten Kern basiert. Sie war von Anfang an für große Datenmengen und sehr gute Performance ausgelegt. Kritisch waren gelegentlich die Stabilität und die Verfügbarkeit. Heute ist MySQL eines der bekanntesten Datenbanksysteme, die als Open-Source entwickelt werden. Das System genießt eine sehr weite Verbreitung bei Webanwendungen. Ein Vorteil ist die sehr gute Integration in verschiedensten Systemen. Zum Beispiel verfügen die Content-Management-Systeme wie Joomla oder WordPress über eine native Anbindung an MySQL. Die Datenbank unterstützt den Embedded- und den Server-Mode.
PostgreSQL wird vor allem im professionellen Umfeld verwendet. Der große Vorteil hier ist die Tatsache, dass dieses System als Open Source zur Verfügung steht, aber dennoch einen Umfang an Funktionalitäten bietet, der sich mit kommerziellen Systemen messen kann. Dieses DBMS gehört exakt betrachtet zu den objektrelationalen Datenbankmanagementsystemen (ORDBMS). Sie stellen eine Art Bindeglied zwischen den relationalen Datenbanken und Objektdatenbanken dar und kommen überall dort zum Einsatz, wo Mengen von Objekten in Beziehung zu anderen Daten oder Objekten zu bringen sind. Seit der Version 9.0 unterstützt PostgreSQL nativ den Support für Replikation über das Netzwerk. Das DBMS wird als Open-Source-Projekt von der PostgreSQL Global Development Group entwickelt und existiert unter diesem Namen seit 1996.
Postgres entstand ursprünglich aus einer Datenbankentwicklung der University of California in Berkeley. Den Anfang stellte dabei das Ingres-Projekt dar, wobei der Hauptverantwortliche Michael Stonebraker 1982 die Universität verließ, um Ingres kommerziell zu vertreiben. Als Stonebraker 1985 zur Universität zurückkehrte, startete er Post-Ingres, um die Probleme der damaligen Datenbankmanagementsysteme zu beseitigen. Im Jahre 1989 wurde die erste Version von Postgres fertiggestellt und im Jahr 1994 von den Studenten Andrew Yu und Jolly Chen um einen SQL-Interpreter erweitert. Die Software wurde als Open Source unter dem Namen Postgres95 freigegeben. Der Postgres95-Code entsprach dem ANSI-C-Standard und wurde um 25 Prozent verkleinert, weiterhin wurden Performance und Zuverlässigkeit verbessert. Im Zuge der Entwicklung des World Wide Webs verstärkte sich das Interesse an Datenbanken. Die Entwicklung von PostgreSQL hat 1996 begonnen, zusammen mit dem Wechsel auf den heutigen Namen. Die erste veröffentlichte Version unter diesem Namen ist 6.0. Seitdem wurde PostgreSQL fortlaufend weiterentwickelt.
Nachfolgend einige technische Fakten zu PostgreSQL: Neben einem umfassenden Transaktionskonzept, dem Multiversion Concurrency Control (Kasten: Multiversion Concurrency Control), unterstützt das DBMS ebenfalls komplexe Abfragen inklusive Unterabfragen. Die referenzielle Integrität wird sichergestellt, Mengenoperationen sind möglich. Die maximale Datenbankgröße ist nur durch den zur Verfügung stehenden Speicher begrenzt. Die Programmierung von Triggern und Prozeduren ist in verschiedenen Sprachen möglich, Import- und Exportmöglichkeiten von Datenbankschemata sind vorhanden.
Multiversion Concurrency Control (MVCC) ist eine Technik, die konkurrierende (gleichzeitige) Zugriffe auf eine relationale Datenbank möglichst effizient ermöglicht, ohne zu blockieren oder die Konsistenz der Datenbank zu gefährden.
Das DBMS wurde ursprünglich von der Firma Cloudscape Inc. unter dem Namen JBMS entwickelt. Eine erste Version wurde 1997 veröffentlicht. Das Produkt wurde später in „Cloudscape“ umbenannt und im Jahr 1999 von der Firma Informix Software Inc. gekauft. Deren Datenbanksparte wurde wiederum 2001 von IBM übernommen. 2004 übereignete IBM die Cloudscape-Software der Apache Software Foundation unter dem Namen „Derby“ als freie Software. Ab Anfang 2005 beteiligte sich auch Sun Microsystems an Derby. 2006 wurde Derby in das Java DB Development Kit integriert. Derby selbst ist komplett in Java implementiert. Wesentliche Eigenschaften der Datenbank sind:
Derby wird unter dem Projekt „The Apache DB Project“ entwickelt. Unterstützt wird auch ein Embedded-Modus für Java-Anwendungen.
Dieses DBMS gehört zu den Platzhirschen unter den Datenbanken und bietet so ziemlich alles an Funktionen in einem Sorglospaket, was von einem DBMS erwartet wird. Einige wichtige Funktionen sind:
HSQL ist eine vollständig in Java programmierte relationale SQL-Datenbank (RDBMS) und steht unter einer modifizierten BSD-Lizenz zur Verfügung. Das System ist sehr weit verbreitet, da es in einigen Projekten als Embedded-Datenbank verwendet wird, u. a. wird es in OpenOffice.org als Standalone-Datenbank verwendet. HSQL unterscheidet sich dabei von anderen Datenbanksystemen in vielerlei Hinsicht. Die Java-Datei ist lediglich 700 KB groß. Kennzeichnend ist eine hohe Integrierbarkeit, da HSQL einen eigenen Server beinhaltet. Damit kann die Datenbank Anfragen über das Netzwerk entgegennehmen oder in die betreffende Anwendung eingebettet werden (der Zugriff erfolgt dann über API-Aufrufe). Es wird ein so genannter „Memory only“-Modus unterstützt. Hier werden alle Daten nur im Speicher vorgehalten und nicht auf dem Datenträger gespeichert. Änderungen gehen beim Beenden des Servers (bzw. der Applikation im Standalone-Modus) verloren. HSQL bietet die Möglichkeit, alle SQL-Befehle, welche die Tabellendaten modifizieren (CREATE, ALTER, INSERT, UPDATE) in einer Logdatei zu speichern. Die Größe einer Tabelle/eines Felds ist derzeitig auf 8 GB begrenzt.
Die H2-Engine existiert seit 2004. Im Dezember 2005 wurde dann H2 erstmals veröffentlicht. Der Name steht für „Hypersonic 2“. Das H2-DBMS gehört ebenfalls zu den schlankeren Systemen, die zugrunde liegende Java-Datei umfasst nur 1,2 MB. Dennoch bietet das System einen guten Funktionsumfang. Die Datenbank ist ohne Installation lauffähig (so genanntes „Rapid Prototyping“). Das H2 DBMS unterstützt sowohl einen Embedded Mode als auch einen Server Mode. Ebenfalls kann die Datenbank komplett im Arbeitsspeicher betrieben werden. Der Funktionsumfang entspricht dem System HSQLDB, wurde jedoch neu implementiert und optimiert.
MySQL | PostgreSQL | H2 | Derby | Oracle DB | |
---|---|---|---|---|---|
API | Java | C, Delphi, C++, Java/JDBC, Tcl, PHP, Perl, Python, Ruby, .NET | Java | Java nativ, C, C++ über ODBC | Java |
Geschrieben in | C, C++ | C | Java | Java | C,C++ |
Lizenz | Duales Lizenzsystem (Proprietär und GPL) | BSD-Lizenz | Duales Lizenz-system (Eclipse- und Mozilla Public License) | Apache Lizenz 2.0 | Proprietär |
Natives Clustering | ja | ja | ja | ja | ja |
Fulltext Search | ja | ja | ja | nein | ja |
Row Level Locking | ja | ja | ja | ja | ja |
Multi Version Concurrency | ja | ja | ja | nein | ja |
Role Based Security | ja | ja | ja | ja | ja |
Custom Aggregate Functions | ja | ja | ja | nein | ja |
Sequences | nein | ja | ja | nein | ja |
Transaktionen | |||||
CLOB/BLOB Kompression | nein | nein | ja | nein | nein |
Tabelle 1: Überblick über einige relationale DBMS
Kommen wir nun zu den NoSQL-Datenbanken. Tabelle 2 gibt dabei eine komprimierte Übersicht. Diese Datenbanken entstanden durch die sich ändernden Ansprüche an eine Datenbank im Web und die immer loser werdenden Anforderungen an das zugrunde liegende Schema einer Datenbank. NoSQL sollte nicht als „No SQL“ verstanden werden, sondern eher als „Not only SQL“. Zitat aus dem Buch NoSQL [1]: „NoSQL will neue Alternativen zum allgegenwärtigen relationalen Datenmodell und zu üblichen Datenbanktechnologien wie Transaktionsmanagement herausstellen, die für bestimmte Anwendungsklassen hinsichtlich der Betriebskosten, Anwendungsentwicklung oder Skalierbarkeit der eierlegenden Wollmilchsau ‚relationales Datenbanksystem’ überlegen sind“.
NoSQL-Datenbanken basieren auf den folgenden Grundlagen:
ACID ist ein Akronym. Es beschreibt erwünschte Eigenschaften von Transaktionen in Datenbankmanagementsystemen und verteilten Systemen:
Eine der bekanntesten Datenbanken in diesem Umfeld ist CouchDB. Sie ist entwickelt worden, um den neuen Anforderungen des Webs 2.0 gerecht zu werden. Sie zählt zu den dokumentenbasierten Datenbanken, orientiert sich an Googles BigTable und folgt dem Prinzip von Map/Reduce. Inspiriert durch die Vorteile dieser neuen Technologien hat der ehemalige Entwickler von Lotus Notes – Damien Katz – im Jahr 2005 mit der Entwicklung von CouchDB begonnen. Es wurde später als Apache-Projekt fortgeführt. CouchDB legt den Fokus auf eine unkomplizierte Nutzung der Datenbank. In CouchDB können Dokumente beliebiger Syntax abgelegt werden. Die Dokumente werden in B-Bäumen gespeichert und erhalten zur Indexierung eine Dokument-ID und eine Revisions-ID. Bei jedem Update einer Instanz wird eine neue Revisions-ID erzeugt, die später ein inkrementelles Auffinden der Änderungen ermöglicht. Der API-Zugriff erfolgt über ein REST-Interface. Das CAP-Theorem (CAP – Consistency, Availability, Partition Tolerance) beschreibt einige Strategien, um Anwendungslogik über ein Netzwerk zu verteilen. CouchDB verwendet Replikationen, um Änderungen zwischen den einzelnen Knoten zu synchronisieren und nutzt dabei das CAP-Theorem:
Ein weiteres interessantes Detail ist, dass CouchDB in der Programmiersprache Erlang geschrieben ist und daher viele spezifische Vorteile dieser Sprache nutzt, wie zum Beispiel parallele Verarbeitung, hohe Verfügbarkeit, Fehlertoleranz und die Möglichkeit, Module zur Laufzeit zu wechseln.
MongoDB wurde mit dem Ziel einer hohen Leistung entwickelt, d. h. sehr kurzen Reaktionszeiten auch bei großen Datenmengen. Die Datenbank ist in der Programmiersprache C++ erstellt. Als dokumentenorientierte Datenbank ist sie für umfangreiche Datenstrukturen wie beispielsweise einem Blogpost mit Kommentaren ohne relationale Beziehungen zu anderen Datenstrukturen gut geeignet. Für Abfragen stehen sowohl eine eigene Syntax als auch eine Implementierung des Map/Reduce-Algorithmus zur Verfügung.
Neo4J ist in Java geschrieben und die Datenbank implementiert das ACID-Paradigma komplett. Die Strukturen werden auf ein Netzwerk (Graph) im Dateisystem abgebildet. Eine Graphdatenbank speichert neben den Daten auch die Beziehungen in strukturierter Form ab. Graphen setzen sich aus Knoten und Kanten zusammen und enthalten Zusatzinformationen, z. B. über Abhängigkeiten und Richtungen. Diese Datenbank wurde in ihrer ersten Variante schon 2003 in einem Content-Management-System eingesetzt. Im Jahre 2007 wurde sie dann als einzelnes Projekt ausgegliedert und in ein Open-Source-Projekt umgewandelt.
Neo4J | MongoDB | CouchDB | |
---|---|---|---|
API | Java, REST, JRuby, Ruby, Python, Jython, Scala, Clojure, | C, C++, Java, PHP, Ruby, Perl, Python | RESTful (siehe Kasten) JSON API, JavaScript, Plug-in-Architektur PHP, Perl, Ruby |
Geschrieben in | Java | C++ | Erlang |
Lizenz | AGPL und kommerziell | GNU AGPL v3.0 | Apache Lizenz 2.0 |
Transaktionsmodell | Nebenläufige Lesezugriffe, Synchronisierung auf Knoten-Niveau bei Schreiboperationen | Update-in-Place | MVCC (Multiversion Concurrency Control) |
Replikation | Master-Slave | Master-Slave | inkrementelle Replikation mit bidirektionaler Konflikterkennung und -management. Master-Master, Master-Slave |
Tabelle 2: Überblick über einige NoSQL-Datenbanken
Das Akronym REST steht für Representational State Transfer und bezeichnet einen Softwarearchitekturstil für verteilte Hypermedia-Informationssysteme wie das World Wide Web. Restful bezeichnet ein API oder eine Technik, die sich auf REST als Gedankenmodell beziehen. Meist sind hier die RESTful Web Services (JSR 311) gemeint.
Wir sind am Ende unserer vierteiligen Artikelserie über Datenbanken. Das Ziel war es, Ihnen eine kompakte Einführung in die Datenbanktechnologien zu vermitteln. Neben grundlegenden Aspekten des Datenbankentwurfs haben wir auch das Thema SQL zur Verarbeitung der Daten betrachtet. SQL kann dabei im Bezug auf relationale Datenbanken weiterhin als zentrales Arbeitsmittel beim Umgang mit den Daten aufgefasst werden. Aber die Entwicklung geht weiter. Auf der Agenda stehen heute neben den relationalen Datenbanken auch so genannte NoSQL-Datenbanken. Mittels dieser Ansätze soll es insbesondere gelingen, die Datenflut des Webs in den Griff zu bekommen. Einen kleinen Überblick über diesen zunächst noch sehr ungewöhnlich erscheinenden Ansatz haben wir in diesem abschließenden Teil gegeben. Wir sind sicher, dass in ein bis zwei Jahren die Entwicklung in diesem Bereich noch einen Schritt nach vorne machen wird und es wieder Neues zu berichten gibt.