Teil 4: Wichtige Datenbanksysteme im Überblick

Grundkurs Datenbanken: Den Überblick behalten
Keine Kommentare

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

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:

  • Unterstützung von Transaktionen: Die Datenbank ist so konzipiert, dass es zu allen Zeitpunkten einen konsistenten Datenbestand gibt. Hierzu braucht es ein mächtiges Konzept um Anfragen, Veränderungen und Löschvorgänge zu gruppieren und gemeinschaftlich zu verarbeiten. Eine Transaktion ist stets durch einen Anfang und ein Ende gekennzeichnet. Alle Datenbankoperationen einer Transaktion werden gemeinsam ausgeführt (COMMIT) oder zurückgenommen (ROLLBACK).
  • Native Unterstützung von Cluster: Das Ziel ist es, eine Lastverteilung auf mehrere Rechner zu erreichen, um eine große Zahl von Datenbankoperationen bearbeiten zu können.
  • Unterstützung von Sequenzen: Eine Sequenz ist ein Datenbankobjekt, mit dem eine eindeutige und fortlaufende Nummerierung (bei künstlichen Primärschlüsseln) erzeugt werden kann.
  • Unterstützung des Embedded Mode: Ein weiteres Feature ist die Möglichkeit, die Datenbank innerhalb einer Anwendung zu starten und mittels API-Zugriffen auf die Datenbank zuzugreifen. Dieser so genannte Embedded Mode ist nützlich für datenintensive Applikationen. Die Datenbank ist unmittelbar an das Programm gebunden und wird mit ihm gemeinsam gestartet bzw. beendet. Dieser Modus ist auf kleinere Datenbestände begrenzt.

Mit diesem Wissen sehen wir uns in den folgenden Textabschnitten einige relationale DBMS an. Weitere Informationen enthält Tabelle 1.

Die Zugriffsmöglichkeiten auf eine Datenbank (Modi)

Es existieren verschiedene Zugriffsmöglichkeiten, um auf die Daten innerhalb der Datenbank zuzugreifen:

  • Embedded Mode: Die Datenbank dient als strukturierter, schneller und zuverlässiger Speicher für Daten, die zur Laufzeit der Anwendung entstehen und wo schnelle Zugriffe gefordert werden. Dieser Modus findet vor allem in Applikationen Anwendung, die sehr große Mengen an Daten verwalten und in denen schnelle Zugriffe gefordert sind, zum Beispiel bei einer Bildverwaltungssoftware.
  • Bei einer Remote-Verbindung handelt es sich um eine klassische Client/Server-Kommunikation. Die Kommunikation erfolgt zum Bespiel über die ODBC-Schnittstelle. Hierzu läuft das DBMS in einem eigenen Prozess und stellt seine Dienstleistungen den anderen Anwendungen zur Verfügung.
  • Mixed Mode: Die Datenbank wird als embedded DBMS gestartet. In diesem Modus ist es jedoch möglich, von weiteren Anwendungen auf die Daten innerhalb der Datenbank zuzugreifen.

MySQl

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

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.

DevOps Docker Camp

Sie lernen die Konzepte von Docker und bauen Schritt für Schritt eine eigene Infrastruktur für und mit Docker auf.

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

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.

Derby

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:

  • Größe: Die Jar-Datei ist unter einem Megabyte groß
  • Plattformunabhängig: Derby ist vollständig in Java implementiert und daher einfach auf andere Plattformen portierbar
  • Standardbasiert: Derby unterstützt die Standards SQL92 und SQL99 vollständig

Derby wird unter dem Projekt „The Apache DB Project“ entwickelt. Unterstützt wird auch ein Embedded-Modus für Java-Anwendungen.

Oracle DB (oder auch Oracle RDBMS)

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:

  • Implementierung der ACID-Eigenschaften
  • Plattformübergreifende Unterstützung verteilter Datenbanken
  • Data-Warehouse-Funktionalität
  • Java Message Service
  • OLAP- und Data-Mining
  • Intelligente Datensicherung (wahlweise mit Block oder Row Change Tracking)
  • Stored Procedures in PL/SQL oder Java
  • Unterstützung regulärer Ausdrücke in Abfragen
  • Versionierung von Tabellen (Langzeittransaktionen)

HSQLDB

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.

H2 Database Engine

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

NoSQL-Datenbanken

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:

  • Map/Reduce: Dieser Ansatz ist aus der Notwendigkeit entstanden, die immer weiter wachsende Menge an Daten besser und schneller verarbeiten zu können. Ein so genanntes Map/Reduce-Framework ermöglicht eine effiziente und parallele Verarbeitung großer Mengen an Daten. Es wurde 2004 von Google entwickelt und im Jahr 2010 patentiert. Betrachten wir nun diesen Algorithmus an einem Beispiel: Ziel ist es, aus einer Menge von Textdokumenten Wortlisten mit Häufigkeitsangaben zu generieren. Die Eingabedaten für diesen Algorithmus bestehen aus einem Schlüssel (zum Beispiel einem Dokumentennamen) und dem Dokument selber. Dabei geht es meist um sehr viele Dokumente, die simultan zu verarbeiten sind. Das soll verteilt auf mehreren Rechnern geschehen. Das Verfahren besteht aus zwei Phasen. Als erstes kommt die Map-Phase. In dieser Phase werden die Daten in der Form verarbeitet, dass am Ende eine Liste von Schlüssel-Wert-Paaren für jedes Dokument vorhanden ist. Es handelt sich um Zwischenergebnisse, die jeweils das Wort und die Anzahl der Vorkommen enthalten. In der Reduce-Phase werden alle zusammengehörigen Zwischenergebnisse addiert und damit die gesamte Anzahl der Vorkommen je Wort ermittelt.
  • BASE (Basically Available, Soft State, Eventually Consistent): Ein Unterschied zwischen den SQL- und NoSQL-Datenbanken ist die unterschiedliche Sichtweise der Konsistenz innerhalb der Datenbank. Nahezu alle SQL-basierten Datenbanken verfolgen das so genannte ACID-Paradigma (Kasten: ACID). Im Gegensatz dazu setzen viele NoSQL-Datenbanksysteme auf BASE. Hier geht es in erster Linie um eine hohe Verfügbarkeit der Daten. Diese ist vorrangig vor der absoluten Konsistenz der Daten.

ACID

ACID ist ein Akronym. Es beschreibt erwünschte Eigenschaften von Transaktionen in Datenbankmanagementsystemen und verteilten Systemen:

  • Atomicity: Eine Transaktion soll entweder ganz oder gar nicht ausgeführt werden
  • Consistency: Eine Datenbank soll von einem konsistenten Zustand in einen anderen durch eine Transaktion überführt werden, also zu keinem Zeitpunkt inkonsistent sein
  • Isolation: Jede Transaktion soll isoliert durchgeführt werden
  • Durability: Jedes Ergebnis einer Transaktion soll dauerhaft gespeichert werden

CouchDB

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:

  • Konsistenz: Alle Datenbanknutzer sehen die gleichen Daten, selbst bei konkurrierenden Updates
  • Verfügbarkeit: Alle Datenbanknutzer können auf eine Version der Daten zugreifen
  • Partitionstoleranz: Die Datenbank kann über mehrere Server verteilt sein

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

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

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

REST(ful)

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.

Fazit

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.

Entwickler Magazin

Entwickler Magazin abonnierenDieser Artikel ist im Entwickler Magazin erschienen.

Natürlich können Sie das Entwickler Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -