Datenbanken

SQL-Datenbanken

Oracle Database Server

Zusammen mit DB2 und MS SQL-Server gehört der Oracle Database Server zu den Marktführern im RDBMS-Segment. Im Großrechner-Bereich sind Sun-Fire-Maschinen mit dem Unix-System Solaris oder IBM-Maschinen häufig verwendete Plattformen. Im Midrange-Bereich werden nahezu alle Unix-Systeme unterstützt und eingesetzt, daneben aber auch OpenVMSLinux wurde neben Solaris als strategische Hauptplattform längere Zeit favorisiert und findet sehr starke Verbreitung. Windows wird aufgrund der hohen Verbreitung ebenfalls strategisch unterstützt.
Oracle ist laut dem DB-Engines Ranking das populärste Datenbankmanagementsystem.

Das Oracle-Datenbankmanagementsystem kann als Express-Edition (XE) kostenlos genutzt werden. Diese Version ist jedoch stärker eingeschränkt als die kostenlose DB2-Version, weil sie u. a. das Laden von Javaklassen in die Datenbank selbst nicht unterstützt (der JDBC-Treiberzugriff ist jedoch möglich). Zusätzlich gibt es eine Beschränkung von 1 GiB RAM, Nutzung maximal eines CPU-Kerns sowie eine maximale Datenbankgröße von 11 GiB für Anwenderdaten.

Für Studienzwecke ist die Oracle-Datenbank auf der Herstellerseite frei erhältlich. Technische Hemmnisse, wie Lizenz-Server oder Lizenzschlüssel, sind nicht vorhanden. Auch die anderen Produkte des Unternehmens Oracle stehen dort zur Verfügung.

Mit dem Release 10g wurde die Vision eines Oracle-Grid (siehe auch Grid-Computing) weiter umgesetzt: Auch das kleine „g“ im Release-Namen steht für Grid. Kernstück des Oracle-Grid ist der Aktiv/Aktiv-Cluster, der von Oracle unter dem Namen Real Application Cluster (RAC) vertrieben wird. Oracle bietet seit 10g eine eigene Cluster Manager-Software unter dem Namen Oracle Cluster Ready Services an. Diese wurde erstmals in 9i zunächst für Linux, später auch für Windows freigegeben. Seit Oracle 10g steht diese für jede von Oracle unterstützte Plattform zur Verfügung. Mit der Buchstabenerweiterung „c“ in der Version 12c wird nach eigener Aussage der Fokus auf Cloud-Produkte betont.

Da SQL nur eine deskriptive Sprache ist, wurde eine proprietäre prozedurale Erweiterung von SQL mit dem Namen PL/SQL entwickelt. PL/SQL steht für Procedural Language / Structured Query Language. PL/SQL-Kommandos können ad hoc als anonyme Blöcke eingegeben werden oder in Form von sogenannten „Stored Procedures“ in der Datenbank abgelegt werden.

Es können XML-Datenstrukturen (XMLDB, XDK) gespeichert werden. Das Speichern nichtrelationaler Daten (Video, Musik, Dokumente, Fax etc.) wird mit BLOBs (binary large objects) und CLOBs(character large objects) unterstützt. Die Indizierung von zahlreichen nichtrelationalen Datenformaten wird bereits mitgeliefert. Die Erweiterung um eigene programmatische Indizierungen wird unterstützt. Raumbezogene Daten können relational abgelegt werden, räumliche Indizierungen und Abfragen werden unterstützt (SPATIAL Option).

Die Standardeinstellung der Isolationsebene einer Oracle-Datenbank ist „Read committed“, d. h. eine Abfrage sieht alle Daten konsistent in dem Zustand, in dem sie zu Beginn der Abfrage festgeschrieben waren. Man kann auch die Isolationsebenen „Serialize“ oder „Read only“ (kein SQL-Standard) für eine Session oder eine Transaktion festlegen. Die anderen beiden im SQL-Standard definierten Isolationsebenen („Read uncommitted“, „Repeatable read“) werden nicht explizit unterstützt. Durch die Speicherung von Rollback-Informationen führen lesende Zugriffe nie zu Sperren der schreibenden Zugriffe (non-blocking reads) und umgekehrt (non-blocking writes).

Microsoft SQL Server

Der Microsoft SQL Server ist ein relationales Datenbankmanagementsystem, das sich am Standard der aktuellen SQL-Version orientiert. Der Microsoft SQL Server liegt in verschiedenen Editionen vor, die ein vielfältiges Angebot abdecken. Die Editionen unterscheiden sich vor allem im Preis, ihren Funktionen und  Hardwareeinschränkungen. Der MSSQL-Server kann auch als Data-Warehouse genutzt werden, indem es den Mitarbeitern in einem Unternehmen eine Sicht auf das Geschäft und dessen Daten ermöglicht. Durch seine Business-Intelligence-Plattform bietet er eine skalierbare Infrastruktur, die es der IT ermöglicht, die Nutzung von Business Intelligence im gesamten Unternehmen zu fördern und Business Intelligence dort bereitzustellen, wo Anwender es wünschen. Der SQL Server besteht aus vielen Services, wie z. B. Analysis Services, Reporting Services und Integration Services, und Tools, z. B. den SQL Server Data Tools (SSDT).

MSSQLServer verwendet für Datenbankabfragen die SQL-Variante T-SQL (Transact-SQL). T-SQL fügt hauptsächlich zusätzliche Syntax zum Gebrauch in Stored Procedures und Transaktionen hinzu. Weiterhin unterstützt MSSQL OLE DB und ODBC (Open Database Connectivity).

Seit SQL Server 2005 (Codename „Yukon“) werden unter anderem Programmiersprachen, welche auf der .NET CLR laufen, für das Erstellen von Stored Procedures unterstützt. Mit Visual Studio wird seit 2005 auch eine passende IDE mitgeliefert.

MySQL & MariaDB

MySQL ist eines der populärsten Datenbank-Systeme, welches oft mit PHP verwendet wird. Inzwischen gilt MySQL als die meistverbreitete Datenbank für Web-Content Systeme, wie zum Beispiel auch für WordPress.

MariaDB ist eine jeweils kompatible Version, jedoch zu 100% Open Source.
Da inzwischen Oracle die Markenrechte an MySQL hält, mussten neue Namen für das Datenbanksystem und dessen Storage-Engines gefunden werden. Seit Ende 2012 haben einige Linux-Distributionen MySQL durch MariaDB als Standard-Installation ersetzt, dazu gehören FedoraCentOSopenSUSESlackware und Arch Linux. Auch die Wikimedia Foundation, die unter anderem die Server für die Wikipedia bereitstellt, hat ihre Produktivsysteme im April 2013 auf MariaDB umgestellt. Damit hat sich eine der weltweit größten Web-Plattformen nun ebenfalls für MariaDB entschieden.

Facts zu MySQL & MariaDB
  • MySQL/MariaDB verwendet Standard-SQL
  • MySQL/MariaDB ist ein Server-Datenbanksystem
  • MySQL/MariaDB ist ideal für kleine und große Anwendungen
  • MySQL/MariaDB ist kostenlos herunterzuladen und zu verwenden
  • MySQL/MariaDB ist sehr schnell, zuverlässig und einfach zu bedienen
  • MySQL wird weiter entwickelt, vertrieben und unterstützt von der Oracle Corp.
  • MySQL ist nach Mitbegründer Monty Widenius 1. Tochter namens: “My” benannt
  • MariaDB ist nach Mitbegründer Monty Widenius 2. Tochter namens: “Maria” benannt
  • MySQL/MariaDB unterstützt und kompiliert auf einer ganzen Reihe von Plattformen
  • MySQL/MariaDB ist ein Datenbanksystem welches sehr häufig auf Web-Servern verwendet wird

Die Daten in einer MySQL/MariaDB-Datenbank werden in Tabellen gespeichert. Eine Tabelle ist eine Sammlung von zugehörigen Daten, und es besteht aus Spalten und Zeilen.

NoSQL-Datenbanken

Der Aufstieg von NoSQL-Datenbanken stellt das traditionelle relationale Datenbankmodell als Lösung für alle Probleme in Frage – nicht nur in der Theorie, sondern auch in der Praxis. In seinem Kern bedeutet NoSQL allerdings keine grundsätzliche Ablehnung von SQL: NoSQL steht eher für “Not Only SQL” (nicht nur SQL) als für “No SQL” (kein SQL). Die neue Strömung greift interessanterweise Datenbankmodelle auf, die in der Vergangenheit aus verschiedensten Gründen in Vergessenheit geraten sind. Dabei erfolgt die Innovation in erster Linie durch praktische Entwicklungen – häufig auf der Basis von Open-Source-Software –, nicht in Form datenbanktheoretischer Überlegungen. NoSQL, das schon vorweg, ist jedoch kein Wundermittel für alle Datenbankansprüche.

Der derzeitige NoSQL-Trend bringt die relationalen SQL-Datenbank allerdings nicht zum ersten Mal unter Beschuss. In den neunziger Jahren zum Beispiel machten die objektorientierten Datenbanken von sich reden. Sie boten Entwicklern auf den ersten Blick einen Ausweg aus der mühseligen Konvertierung ihrer Datenobjekte in Reihen und Spalten. In der Praxis waren die Implementierungen von objektorientierten Datenbanken jedoch häufig sehr komplex und fragil, sodass desillusionierte Entwickler sich erneut auf die Suche nach besseren Möglichkeiten begaben. In der Folge entstanden die objektrelationalen Mapper (ORM), die einen Großteil der Konvertierungsarbeit von Datenobjekten zwecks Speicherung in einer SQL-Datenbank erledigten.

Die aktuellen NoSQL-Datenbanken haben einige Eigenschaften gemeinsam: Sie verzichten in der Regel auf die starren Schemata der Tabellen ihrer relationalen Pendants. Als schemafreie Datenbanken setzen sie auf flexiblere Techniken, um festzulegen, wie Daten gespeichert werden; oder sie überlassen das gleich komplett den Anwendungen. Namensgebend ist der Einsatz anderer Protokolle für die Kommunikation mit den Clients als SQL. Die Architektur vieler NoSQL-Datenbanken ist auf Skalierbarkeit ausgelegt, sodass sich große Datenbestände in einem Cluster aus Standardsystemen verwalten lassen, statt sie auf einem einzigen Superserver zu speichern.

Bei näherer Betrachtung lassen sich die verschiedenen NoSQL-Ausprägungen in vier Hauptkategorien aufteilen: dokumentenorientierte Datenbanken (“document stores”), Key-Value-Datenbanken, spaltenorientierte Datenbanken und Graphendatenbanken.

Key-Value-Stores sind vom Prinzip her noch einfacher: Ein bestimmter Schlüssel verweist auf einen Wert, der in seiner einfachsten Form eine willkürliche Zeichenkette sein kann. Key-Value-Datenbanken sind seit jeher Bestandteil von diversen Anwendungen, etwa in Form traditioneller Embedded-Datenbanken der Unix-Welt wie dbm, gdbm und Berkley DB. Ihre modernen NoSQL-Pendants laufen meistens als Standalone-Datenbankdienst und lassen sich über Web-Techniken wie REST ansteuern.

Key-Value-Stores lassen sich wiederum in zwei Untergruppen unterteilen: Die In-Memory-Variante behält die Daten im Speicher und sorgt dadurch für eine hohe Performanz. Die On-Disk-Versionen speichern ihre Daten direkt auf der Festplatte. In-Memory-Datenbanken bieten sich als verteilte Cache-Speichersysteme an; On-Disk-Datenbanken werden als Datenspeicher genutzt.

Redis ist ein Beispiel für eine On-Disk-Datenbank. Mit dem System können nicht nur einfache Strings gespeichert werden, sondern auch Listen, Sets und sortierte Sets. Redis hält das ganze Dataset im RAM vor, speichert es aber flexibel auf der Platte, wenn bestimmte Bedingungen erfüllt sind. Für jeden Datentyp, den Redis unterstützt, gibt es eine Serie von speziellen Befehlen, die mittels APIs für eine Reihe von Sprachen zur Verfügung stehen. Redis kommt unter anderem zum Einsatz bei Engine Yard, Github und Craigslist. Für mehr Informationen siehe die Redis-Website.

Eine typische SQL-Datenbank besteht aus Zeilen, wobei jede Zeile einen Datensatz mit verschiedenen Feldern repräsentiert. Für Menschen ist diese Sicht bequem. Sie passt zu der Art wie wir selbst Informationen speichern, zum Beispiel in einer Kartei. Wenn man jedoch eine Kartei als Beispiel nimmt, in der jede Karte einen Verkauf pro Vertriebsmitarbeiter enthält, und man möchte den Gesamtumsatz ermitteln, muss man sich jede einzelne Karte anschauen, das Verkaufsergebnis zur Gesamtsumme hinzuaddieren und zur nächsten Karte wechseln. Herkömmliche SQL-Datenbanken lassen sich durchaus für ein solches Vorgehen optimieren. Jedoch dauert der Vorgang umso länger, je mehr Daten es gibt.

Eine andere Möglichkeit wäre, die jeweilige Verkaufszahl für einen Mitarbeiter auf eine Karte zu notieren, sie aber gleichzeitig auch auf eine Liste mit Verkaufszahlen aufzunehmen. Dann müsste man nur die Zahlen auf dieser Liste zusammenrechnen um den Gesamtbetrag zu errechnen. Diese viel schnellere Taktik ist im Wesentlichen das, was bei einer spaltenorientierten Datenbank passiert: Sie speichert die Daten so, dass sie schnell und mit weniger I/O-Aktivität zusammengerechnet werden können. Spaltenorientierte Datenbanken werden daher gerne von Data-Mining- und Analyse-Programmen verwendet, bei denen diese Speichermethode für die üblichen Operationen optimal ist.

Cassandra, seit Anfang 2010 Top-Level-Projekt bei Apache, ist eine Mischung aus dem spaltenorientierten und dem Key-Value-Ansatz. Das Ergebnis ist eine dezentralisierte und “letztendlich konsistente“ verteilte Datenbank.

Cassandra wurde ursprünglich von Facebook entwickelt, wird inzwischen jedoch als Apache-Projekt weiterentwickelt und ist als hoch skalierende, verteilte Datenbank unter anderem bei Digg, Twitter und Reddit im Einsatz. Cassandras Spalten haben einen Namen, einen Wert und einen Zeitstempel. Die Spalten lassen sich – analog zu einer Tabelle in einer relationalen Datenbank – als sogenannte Spaltenfamilien gruppieren. Spalten können auch als “Superspalte” gekennzeichnet werden. Damit lassen sie sich nicht nur nach Schlüsselnamen, sondern auch nach Zeitstempel sortieren.

Durch das Hybrid-Modell und die gute Skalierbarkeit bietet sich Cassandra für Situationen an, in denen große, sich ständig ändernde Datenmengen gespeichert werden sollen. Das beste Beispiel hierfür dürften die bereits genannten sozialen Netzwerke sein. Mehr Informationen zu Cassandra findet man auf der Projekt-Website.

Wie die obigen Beispiele zeigen, spielen NoSQL-Datenbanken ihre Stärken vor allem in bestimmten Bereichen aus. Dazu gehören der flexible Umgang mit variablen Daten (dokumentorientierte Datenbanken), das Abbilden von Beziehungen (Graphen-Datenbanken) oder auch die Reduzierung einer Datenbank auf einen Behälter für Schlüssel-Werte-Paare (Key-Value-Datenbanken).

Für traditionelle Speicheranwendungen wird das relationale SQL-Modell noch lange Zeit maßgebend sein. Zum Teil durch ihr quelloffenes Entwicklungsmodell, zum Teil auch durch die Tatsache, dass sie in der Praxis für die Praxis entstanden sind, können die schnell besser werdenden NoSQL-Datenbanken aber eine gute Alternative oder Ergänzung sein.

SQL-Datenbanken haben Vorteile, wenn es auf ACID (Atomarität, Konsistenz, Isolation, Dauerhaftigkeit) und relationale Fähigkeiten ankommt. In vielen Bereichen sind sie daher nach wie vor die erste Wahl. Auch steht die Entwicklung von SQL nicht still: So implementiert Ingres zum Beispiel die VectorWise-Technologie in seine SQL-Datenbank, um damit im Bereich Datenanalyse einen Vorsprung gegenüber spaltenorientierten Datenbanken zu erlangen.

Viele NoSQL-Datenbanken, etwa CouchDB und Cassandra, weichen die Konsistenzgarantien ein Stück weit auf und gewinnen dafür Vorteile, was die Skaliernbarkeit angeht. Andere sind, wie etwa die Graphen-Datenbanken, auf die Speicherung spezieller Daten optimiert, die sich in relationen Datenbanksystemen nur mühsam abbilden lassen.

So mischen die NoSQL-Systeme den Datenbankmarkt auf – oft auf Techniken, die lange Zeit ignoriert wurden, weil sie nicht in das Schema von SQL passten. Für das Datenspeicher-Ökosystem sind die neuen Entwicklungen auf jeden Fall ein Gewinn.

Siehe dazu auch: