it-novum White Paper Februar 2011 Open Source Datenbanken für analytische Systeme im strukturierten Vergleich ©it-novum GmbH 2010 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Kurzfassung Datenbanksysteme für analytische Anwendungen unterliegen speziellen Anforderungen. In diesem Whitepaper evaluieren wir anhand eines Kriterienkatalogs die beiden Open Source-Datenbanksysteme MySQL und PostgreSQL hinsichtlich ihrer Einsatztauglichkeit für eine BI-Architektur und unterziehen sie einem Leistungstest. Fragen, Anmerkungen, Kritik Sie haben Fragen zum vorliegenden Whitepaper, Anmerkungen, Kritik? Dann schreiben Sie uns an [email protected]. Webinar Wir bieten regelmäßig Webinare zu Open Source-Datenbanken und weiteren BI-bezogenen Themen an. Bei Interesse schreiben Sie an [email protected]. © it-novum GmbH 2010 2 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Inhalt 1. Einleitung: Open Source Datenbanken für analytische Systeme 5 2. Definition der Anforderungen an Datenbanken im analytischen Einsatz ......................................................... 6 2.1. Herstellerbezogene Anforderungen .................................... 6 2.2. Produktbezogene Anforderungen ........................................8 2.3 Kriterienübersicht .................................................................. 20 3. Marktüberblick Open Source-Datenbanken ........................ 23 3.1 Weitere Auswahlkriterien ......................................................... 24 4. Die Teststellung: Performancetest mit dem Pentaho Analyzer ...................................................................26 5. Produktübersicht und -vergleich ............................................31 5.1 Evaluierung von MySQL ...........................................................31 Allgemeine Kriterien ....................................................................... 33 Systemanforderungen und Software-Anbindung...................... 35 Datenbankobjekte ........................................................................... 38 Unterstützung des SQL/OLAP-Standards .................................... 40 Performance und Skalierbarkeit ................................................... 41 Datenintegrität und -sicherheit ................................................... 46 Administration und Wartung....................................................... 48 Zukünftige Entwicklungen ............................................................50 5.2 Evaluierung von PostgreSQL ................................................. 52 Allgemeine Kriterien ....................................................................... 53 © it-novum GmbH 2010 3 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Systemanforderungen und Software-Anbindung...................... 55 Datenbankobjekte ........................................................................... 57 Unterstützung des SQL/OLAP-Standards .....................................59 Performance ..................................................................................... 61 Datenintegrität und -sicherheit ....................................................67 Administration / Wartung ............................................................ 69 Zukünftige Entwicklungen .............................................................71 6. MySQL und PostgreSQL im direkten Vergleich ................... 72 7. Sonderbetrachtung: Infobright ..............................................79 8. Fazit .............................................................................................. 81 Anhang: TestQueries ..................................................................... 83 Weiterführende Informationen /Links: ........................................ 85 Kontaktadressen ............................................................................. 86 © it-novum GmbH 2010 4 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 1. Einleitung: Open Source Datenbanken für analytische Systeme Innerhalb einer Business Intelligence-Architektur ist ein leistungsstarkes und sicheres Backend mindestens ebenso wichtig wie ein leicht zu bedienendes Frontend. Das gilt insbesondere, wenn man sich für einen klassischen Data Warehouse-Ansatz entscheidet, d.h. alle analyserelevanten Unternehmensdaten in ein zentrales Datenbanksystem geladen werden. Was muss ein solches Datenbanksystem können? Die Anforderungen an eine Datenbank im operativen Einsatz unterscheiden sich von denen an ein Data Warehouse. Datenbanken innerhalb operativer Systeme sind durch eine Vielzahl von Zugriffen durch eine große Zahl an Anwendern gekennzeichnet. Die Daten innerhalb eines solchen Systems ändern sich ständig und liegen in einem sehr hohen Detailgrad vor. Eine analytische Datenbank dagegen wird üblicherweise von einer deutlich geringeren Anzahl von Anwendern verwendet. Die Abfragen gegen ein solches System sind also weniger zahlreich, können aber wesentlich umfangreicher und komplexer sein. Die Daten in einer analytischen Datenbank liegen in speziellen, analyseorientierten Strukturen vor, zum Teil auch aggregiert. Vor diesem Hintergrund haben wir einen generischen Kriterienkatalog entwickelt, mit dem sich Datenbanken hinsichtlich ihres Einsatzes in einem BISzenario vergleichen lassen. Als Vergleichsobjekte haben wir nicht die klassischen Datenbanken, z.B. von Oracle oder Microsoft, herangezogen, sondern zwei Open Source-Systeme. MySQL und PostgreSQL sind die beiden bekanntesten Vertreter des Segments quelloffene Datenbanken. Um auch einen anderen Datenbankenansatz mit einzubeziehen, haben wir zusätzlich die spaltenbasierte Datenbank Infobright einem vergleichenden Test unterzogen. © it-novum GmbH 2010 5 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 2. Definition der Anforderungen an Datenbanken im analytischen Einsatz Die Anforderungen an ein Datenbanksystem (DBS) sind vielfältig und hängen vom Einsatzbereich ab. Bei unserem Vergleich liegt der Fokus auf Datenbanken, die sowohl eine solide Liste an Eigenschaften für einen dauerhaften Einsatz im Unternehmen (in größerem Umfang) bieten, nach Möglichkeit aber auch analytische Funktionen haben. Wir haben diese Aspekte daher in den Katalog der Anforderungen an die DBS mit aufgenommen. Außerdem gibt es bei Open Source-Software bestimmte Punkte, die für die Auswahl des Produktes wichtig sind (z.B. das Lizenzmodell). Bei unserer Recherche haben wir darüber hinaus weitere Kriterien ausgewählt. Daneben werden nicht nur an die DBS selber, sondern auch an die Hersteller gewisse Anforderungen gestellt. Eine Evaluierung von Open Source-Produkten muss daher auch einbeziehen, ob und inwiefern sie sich als „Enterprise-level Application“ eignen. Darunter verstehen wir den Einsatz der Software auf gesamter Unternehmensebene. Dazu gehört nicht nur eine sehr gute Funktionalität, sondern auch ein Hersteller, der strategisch gut positioniert ist und positive mittel- bis langfristige Zukunftsaussichten hat. 2.1. Herstellerbezogene Anforderungen Datenbanken bilden die Grundlage für viele Unternehmensanwendungen und sind essenziell für einen funktionierenden Geschäftsablauf. Die Datenbestände eines größeren Unternehmens können dabei bis weit in den Terabyte-Bereich gehen und komplexe Strukturen aufweisen, die speziell an die gewählte Datenbanklösung angepasst worden sind. Dementsprechend aufwendig ist eine Migration auf ein komplett neues DBS – die Festlegung auf ein DBS hat langfristigen Charakter. Daher ist es notwendig, sich vor der Wahl eines DBS auch eingehend über den Hersteller zu informieren. Bei Open Source Software ist besonders wichtig, weil nur in wenigen Fällen ein großer Hersteller hinter dem Produkt steht. Kleine Hersteller ohne feste Basis in vielen Unternehmen und mit kleiner Entwicklergemeinde können unter Umständen schnell vom Markt verschwinden. Auch kann man nie ausschließen, dass eine Firma mit einem gut laufenden Open Source-Projekt von einem großen proprietären Hersteller aufgekauft und für eigene Zwecke benutzt wird. © it-novum GmbH 2010 6 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Referenzkunden Ein guter Anhaltspunkt für die Verbreitung bzw. Käuferakzeptanz eines Produkts sind die Referenzkunden des Herstellers. Diese werden oft schon auf der Internetseite des Herstellers zur Schau gestellt. Dort finden sich oft auch (häufig eher oberflächliche) Aussagen darüber, in welchem Rahmen das DBS beim Kunden eingesetzt wird. Auch wenn sich damit noch keine genauen Aussagen über die Qualität des Produktes treffen lassen, so stellt doch eine Vielzahl namhafter Referenzkunden einen brauchbaren Anhaltspunkt für die Käuferakzeptanz dar. Produktstrategie Ein weiteres wichtiges Kriterium ist die Produktstrategie des Herstellers: Wo ist das Produkt im Vergleich mit dem Wettbewerb positioniert? In welchen Aspekten differenziert es sich von Konkurrenzprodukten (evtl. sogar von einem Produkt aus dem gleichen Unternehmen)? Positiv zu bewerten ist hier, wenn ein DBS über ein besonderes Leistungsmerkmal verfügt, mit dem es sich von den anderen DBS deutlich abhebt – das sog. Alleinstellungsmerkmal. Auch verschiedene Variationen eines Produktes sind Teil der Produktstrategie. Die Produktstrategie ist mittel- bis langfristig ausgelegt und deshalb von entscheidender Bedeutung für den Erfolg oder Misserfolg eines Produktes. Allerdings ist die Strategie oftmals von außen nur schwer zu beurteilen, wenn der Hersteller sie nicht publik macht. Herstelleraktivität / Produkt-Updates Der Softwaremarkt im Allgemeinen und Open Source-Software im Speziellen unterliegen einem raschen Wandel. Funktionalitäten, die zum Zeitpunkt einer Evaluierung noch nicht Bestandteil eines Produktes waren, können bereits im nächsten Update enthalten sein. Deshalb ist es wichtig, auch die Produkthistorie zu betrachten: In welchen Abständen werden kleinere und größere Updates bereit gestellt? Wie kompliziert ist die Installation dieser Updates? Hat das Aufspielen des Updates möglicherweise tiefgreifende Folgen für den Betrieb des DBS? Dabei sollte man sich aber im Klaren sein, dass es immer einen gewissen Aufwand mit sich bringt, wenn die neuen Funktionen auch sinnvoll genutzt werden sollen. Support Das Thema Support ist bei der Auswahl eines Anbieters immer ein (mit)entscheidendes Kriterium: Über welche Kanäle erhalte ich Hilfe nicht nur bei technischen, sondern auch bei nichttechnischen Fragen (E-Mail, Live Support System, Telefon, Fernwartung usw.)? Welche Konditionen beinhaltet der Support- © it-novum GmbH 2010 7 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Vertrag? Wichtig ist auch, welches der verschiedenen Supportmodelle des Herstellers am besten zu meinen Bedürfnissen passt. Einen bedeutenden Teil des Supports übernimmt bei Open Source-Projekten die Entwickler- und Anwendergemeinde. Hier ist entscheidend, wie aktiv die Community-Kanäle sind (Forum, Mailverteiler) und wie stark die Community in die Abläufe eines möglicherweise hinter dem Projekt stehenden Herstellers eingebunden ist. Dokumentation Datenbanksysteme bieten sehr umfangreiche Konfigurationsmöglichkeiten. Daher ist neben einem funktionierenden Support auch eine detaillierte Dokumentation wichtig. Diese kann bspw. aus Wikis, gebundenen Dokumenten oder Online-Handbüchern bestehen. 2.2. Produktbezogene Anforderungen Lizenzmodelle Bei der Verwendung von Open Source-Software spielt das verwendete Lizenzmodell eine wichtige Rolle. Derzeit gibt es vier Lizenzen, die am häufigsten für Open Source-Projekte eingesetzt werden. Sie sollen an dieser Stelle kurz vorgestellt werden. Die Lizenzen unterscheiden sich vor allem hinsichtlich der Einschränkungen für die Veränderung des Quellcodes und eine anschließende kommerzielle Nutzung in einer Closed Source-Anwendung. Bei manchen Lizenzen ist das streng untersagt, d.h. veränderter Open Source-Code muss ebenfalls unter eine Open Source-Lizenz gestellt werden und zwar dieselbe wie der Ausgangscode. Derartige Bestimmungen werden unter dem Begriff „Copyleft“ zusammengefasst. Andere Lizenzen haben ein nicht so strenges Copyleft und erlauben zumindest das Einbinden von unter Open Source stehenden Bibliotheken für eine Einbindung in proprietären Code. Die dritte Gruppe verzichtet gänzlich auf Copyleft, dort darf der gesamte Quellcode in proprietäre Software eingebunden werden. Die Berkeley Software Distribution License (BSD-Lizenz) wurde ursprünglich an der University of California, Berkeley, entwickelt. Sie erlaubt, Software unter ihrer Lizenz zu kopieren, verändern und zu verbreiten. Die BSD-Lizenz enthält kein Copyleft, weshalb Programme unter ihrer Lizenz interessant sind als Basis für © it-novum GmbH 2010 8 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 kommerzielle Weiterentwicklungen oder Lösungen. Weder muss der Quelltext des kommerziellen Programms offen gelegt noch das Programm selbst unter die BSD-Lizenz gestellt werden. Die Version 2.0 der Apache License wurde 2004 veröffentlicht und gegenüber der Vorgängerversion 1.1 stark erweitert. Wie auch die BSD-Lizenz enthält die Apache License kein Copyleft. Sie umfasst jedoch ein Copyright, d.h. bei der Verteilung von Software unter der Apache License muss eindeutig auf die verwendete Software und deren Abstammung vom Lizenzgeber hingewiesen werden. Daneben muss eine Kopie der Lizenz dem Paket Fall beiliegen, der Quelltext allerdings nicht. Die GNU General Public License (kurz GPL) ist die hauseigene Lizenz der Free Software Foundation und wird derzeit sowohl in Version 2 als auch Version 3 verwendet. Hauptsächlich ist aber Version 2 im Einsatz. Im Gegensatz zu den beiden vorgenannten Lizenzen enthält die GPL ein Copyleft, d.h. unter die GPL gestellte Software muss nach Veränderung wieder unter die GPL gestellt werden. Für die meisten kommerziellen Entwicklungen stellt das ein K.O.-Kriterium dar, da den entwickelnden Firmen wenig daran gelegen ist, dass ihr Quelltext veröffentlicht wird. Ebenfalls entwickelt von der Free Software Foundation, stellt die Lesser General Public LIcence (LGPL) eine geschäftsfreundlichere Variante der GPL dar. Sie verfügt, dass alle Programme, die lediglich extern unter der LGPL stehende Software nutzen (z.B. Programmbibliotheken), unter ihrer eigenen Lizenz bleiben. Die LGPL eignet sich folglich besonders für die Lizenzierung von Bibliotheken, die die Erstellung proprietärer Software erlauben sollen. Allerdings ist nur die Verlinkung dieser Bibliotheken erlaubt, nicht ihre direkte Einbindung in den Programmcode. In diesem Fall greift wieder das Copyleft und das betreffende Programm muss wieder unter die LGPL bzw. eine kompatible Lizenz (wie die GPL) gestellt werden. Plattform-Unterstützung Datenbanksysteme befinden sich technisch gesehen zwischen Anwendungssystemen und dem Betriebssystem. Die unterstützten Systeme spielen je nach Größe und Software-Struktur des jeweiligen Unternehmens eine kleinere oder größere Rolle. Ein wesentliches Kriterium ist daher die Unterstützung von 64-bit Betriebssystemen, da 32-bit Betriebssysteme nur maximal 4 Gigabyte Arbeitsspeicher adressieren können. Gerade bei analytischen Abfragen im Data Warehouse-Bereich fallen schnell sehr große Datenmengen an, die bei Erreichen der 4 GB-Grenze erst auf die Festplatte ausgelagert werden müssen. Die Folge ist häufig ein Flaschenhals, was die Leistung betrifft. © it-novum GmbH 2010 9 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Datenbank-Schnittstellen Datenbanksysteme müssen normalerweise mit mehreren Anwendungsprogrammen kommunizieren. Schnittstellen regeln dabei den Zugriff und den Datenaustausch mit der Datenbank. Gerade im Data WarehouseBereich existiert eine Vielzahl von Programmen, z.B. zur Abwicklung des ETLProzesses oder zur Realisierung analytischer Aufgabenstellungen, u.a. mit OLAPWürfeln. Da für spezielle Einsatzgebiete häufig eigene Anwendungen geschrieben werden, spielen Schnittstellen auch hier eine große Rolle. Zentrales Stichwort in diesem Kontext ist Offenheit: Das Programm muss nicht für jede Datenbankart eine eigene spezielle Schnittstelle enthalten. Deshalb gewinnen standardisierte und sprachunabhängige (d.h. nicht mehr an eine spezielle Programmiersprache gebundene) Schnittstellen immer mehr an Bedeutung (z.B. JDBC). Unterstützt das DBS diese Schnittstellen, stellt das einen erheblichen Vorteil gegenüber Insellösungen dar. Hier haben Open Source-Lösungen einen klaren Vorteil: Selbst wenn das DBS von sich aus wenige Schnittstellen zur Verfügung stellt, so gibt es häufig eine Lösung in Form eines Drittanbieterprodukts (das meistens von den Entwicklern der Anwendungsprogramme selbst stammt). Diese müssen nicht unbedingt kostenlos sein, dennoch ist allein die die Unterstützung von Drittsystemen ein wichtiges Kriterium bei der Entscheidung für ein DBS. Datenbanksprache Benutzer oder Anwendungsprogramme kommunizieren über die Datenbanksprache mit dem Datenbanksystem. Bei den relationalen DBS hat sich SQL als de facto-Standard durchgesetzt. In der mittlerweile drei Jahrzehnte umfassenden Entwicklung von SQL sind mehrere Standards entstanden, die von der Internationalen Organisation für Normung (ISO) verabschiedet wurden. Das ausschlaggebende Kriterium ist also nicht, ob das DBS SQL unterstützt, sondern welchen SQL-Standard es beherrscht (und ob vollständig oder nur teilweise). Unterstützung des OLAP-SQL-Standards Als SQL Mitte der 1970er Jahre entwickelt wurde, lag der Fokus auf der Verarbeitung operationaler Daten. Für eine komplexe Analyse von Daten, die nicht in Clientanwendungen umständlich durchgeführt werden soll, sondern direkt vom DBS unterstützt wird, war SQL ursprünglich nicht ausgelegt. Da dieses Anwendungsgebiet aber bereits Mitte der 90er Jahre immer gefragter wurde, entschloss sich das ISO-Gremium, SQL um analytische Funktionen zu erweitern. Diese Funktionen wurden 1999 von den führenden DBS-Herstellern mit Unterstützung von Client-Anbietern entwickelt und unter dem Namen SQL/OLAP © it-novum GmbH 2010 10 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 verabschiedet (zuerst als Anhang zu SQL99, später wurde es direkt in das Framework von SQL2003 aufgenommen). Relationale DBS beherrschen die in diesem Standard spezifizierten Konzepte, allerdings gibt es auch noch herstellerspezifische Implementierungen für analytische Funktionen. In diesem Rahmen betrachten wir nur die Funktionen im SQL-Standard. Die SQL/OLAP-Erweiterungen lassen sich in drei Teile gliedern: 1. Erweiterung des GROUP BY-Operators Bereits vor den SQL/OLAP-Erweiterungen gab es Funktionen, um sich aggregierte Informationen innerhalb einer Tabelle anzeigen zu lassen (z.B. den maximalen oder minimalen Wert über alle Zeilen). Diese Funktionen fassen mehrere Zeilen zu einer Ergebnismenge zusammen und geben nur noch diese aus. Ist es notwendig, die Werte dieser Funktionen nicht über den gesamten Tabellenbestand, sondern nur über bestimmte Gruppen von Tabellenzeilen zu bilden, wird die „GROUP BY“ Klausel verwendet. Mit der Erweiterung „ROLLUP“ der GROUP BY-Klausel lassen sich zusätzlich zu dieser Ergebnismenge auch noch sogenannte „Super-Aggregate“ ermitteln und ausgeben. Super-Aggregate sind Summen, die durch Aufaddierung nach einem Gruppierungsmerkmal entstehen. Sofern die Ausgabe aller möglichen Super-Aggregate für die Gruppierungsspalten erforderlich ist, verwendet man statt ROLLUP den Operator CUBE. Im Gegensatz zum ROLLUP-Operator ist hier die Reihenfolge der angegebenen Spalten nicht für das Ergebnis ausschlaggebend. Die Erweiterung “Grouping Sets” ist die vielseitigste der bisher aufgeführten. Sie generiert keine Super-Aggregate wie die beiden anderen Erweiterungen, sondern berechnet Gruppen in Bezug auf verschiedene Spaltengruppen in derselben Anfrage. Dadurch kann sie einerseits Ergebnisse generieren, die auch durch Verwendung von GROUP BY ROLLUP oder GROUP BY CUBE möglich wären, es sind allerdings auch andere Ausgaben durch eine feinere Gruppenauswahl möglich. 2. Fensterkonstrukte Eine wichtige Neuerung, die mit SQL/OLAP und im SQL 2003-Standard Einzug gehalten hat, sind die Fensterkonstrukte (auch Window-Konstrukte genannt). Ein Fenster (Window) spezifiziert eine benutzerdefinierte Menge von Reihen, auf die eine Funktion angewendet wird. Die Fenstergröße lässt © it-novum GmbH 2010 11 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 sich beliebig wählen, meist wird ausgehend von der aktuellen Reihe ein Reihenbereich definiert. Mit Hilfe dieser Konstrukte lassen sich beispielsweise kumulative Summen und laufende Durchschnitte innerhalb von spezifizierten Partitionen berechnen. Der SQL-Standard unterstützt zwei verschiedene Formen für die Definition von analytischen Funktionen: die explizite und die implizite Form (auch „in-line“-Form genannt). Bei der expliziten Form wird die Fensterfunktion am Ende der SELECT-Anweisung spezifiziert, die in-line-Form formuliert die Funktion bereits in der Projektion der Anfrage. Die Fensterfunktion besitzt drei verschiedene Subfunktionen, die allerdings nicht alle in einer Abfrage enthalten sein müssen: 1 Window Partitioning 2 Window Ordering 3 Window Framing 3. OLAP-Funktionen Obwohl sich die beschriebenen GROUP-BY Erweiterungen und die Fensterfunktionen für analytische Abfragen nutzen lassen, gibt es darüber hinaus seit dem SQL/OLAP Standard neue SQL-Funktionen, die sich speziell für diese Zwecke nutzen lassen. Eine Gruppe dieser neuen Funktionen sind die Rangfunktionen, sie geben für jede Reihe einer Partition einen Rang als Nummer aus. Der Standard enthält vier verschiedene Rangfunktionen: RANK, DENSE_RANK, PERCENT_RANK und CUME_DIST RANK. Letztere gibt dabei den Rang der aktuellen Reihe einer Partition als natürliche Zahl aus. Das Ergebnis ist die aktuelle Reihe plus Anzahl der Reihen innerhalb derselben Partition mit tatsächlich niedrigeren Sortierkriterien. Folglich haben Reihen mit gleichwertigen Sortierkriterien denselben Rang und der nächsthöhere Rang lässt eine entsprechende Lücke zum vorhergehenden (je nachdem wie viele gleichwertige Reihen es vorher gibt). Im Gegensatz dazu liefert DENSE_RANK im Falle mehrerer gleichwertiger Ränge beim aktuellen Rang nur den kleineren Rang plus 1. Dadurch entstehen bei den Werten von DENSE_RANK keine Lücken. PERCENT_RANK gibt den Rang ebenfalls anhand des Sortierkriteriums zurück, allerdings nicht einen ganzzahligen, sondern einen relativen Wert. Dieser berechnet sich anhand der Formel (RANK − 1)/(n − 1). © it-novum GmbH 2010 12 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 CUME_DIST ermittelt den relativen Rang einer Reihe innerhalb einer Partition. Hierfür wird die relative Anzahl von Reihen bestimmt, deren Rang kleiner gleich dem Rang der aktuellen Reihe ist. In einer Formel ausgedrückt berechnet sie sich wie folgt: (1/n) ∗ AnzahlderReihen <= x (wobei n die Anzahl der Reihen der Partition ist. Außerdem gibt es die Funktion ROW NUMBER, die jeder Reihe innerhalb einer Partition eine eindeutige Nummer zuweist. Für statistische Analysen wurden in den SQL-Standard statistische Funktionen aufgenommen. So berechnet die Funktion STDDEV_POP die Populations-Standardabweichung aller Werte des angegebenen Parameters für jede Reihe der Partition. Auf die gleiche Weise berechnet STDDEV_SAMP die Stichprobenabweichung. Weiterhin gibt es Funktionen zur Berechnung der Varianz sowie für die Regressions-und Korrelationsanalyse. Common Table Expressions Der SQL-Standard enthält allgemeine Tabellenausdrücke (Common Table Expressions, CTE) in zwei Varianten, nicht-rekursiv und rekursiv. CTE kann man sich am besten als abgeleitete Tabellen bzw. temporäre Views vorstellen, da CTE ebenso wie diese nur für die Dauer der Abfrage vorhanden sind. Der Hauptunterschied zu abgeleiteten Tabellen ist, dass eine CTE auf sich selbst verweisen kann. In diesem Fall wird von einer rekursiven CTE gesprochen. Rekursive CTE lassen sich beispielsweise für rekursive Abfragen nutzen. Nicht-rekursive CTE erlauben eine wesentlich vereinfachte Syntax, da sie nur einmal definiert werden müssen und anschließend mehrfach in derselben Abfrage auf sie verwiesen werden kann. Dadurch lassen sich normalerweise tief verschachtelte Abfragen vermeiden. Transaktionskontrolle Transaktionen bündeln mehrere Datenbankoperationen, die innerhalb eines Mehrbenutzersystems fehlerfrei und als Einheit ausgeführt werden sollen, ohne dass sie durch andere Transaktionen beeinflusst werden. Das Transaktionskonzept dient dazu, (teilweise unvermeidliche) Fehlersituationen zu beheben. Das ACID-Prinzip beschreibt die Eigenschaften, die Transaktionen haben sollen: © it-novum GmbH 2010 13 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Atomicity: Transaktion ist die kleinste, nicht weiter zerlegbare Einheit. Das bedeutet, dass sie entweder ganz oder gar nicht ausgeführt wird. Consistency: Die Datenbasis ist nach der Ausführung der Transaktion konsistent, ansonsten wird die Transaktion komplett zurückgesetzt (Rollback). Isolation: Parallel ausgeführte Transaktionen dürfen sich nicht gegenseitig beeinflussen. Jede Transaktion muss logisch so ausgeführt werden, als ob sie die einzig aktive auf dem DBS wäre. Durability: Die Wirkung einer erfolgreich abgeschlossenen Transaktion bleibt dauerhaft in der Datenbank erhalten. Views Ein Datenbankensystem muss sehr anpassungsfähig sein, damit es den individuellen Anforderungen verschiedener Benutzer und Benutzergruppen Rechnung tragen kann. Ein elementares Konzept zur Erfüllung dieser Forderung sind Sichten oder „Views“. Sie stellen eine virtuelle Relation bzw. virtuelle Tabelle dar, die über eine im DBS gespeicherte Abfrage definiert wird. Virtuell bedeutet in diesem Zusammenhang, dass die Tabellen nicht bei jedem Aufruf der Sicht jeweils neu erstellt werden, sondern lediglich neu berechnet. Vereinfacht ausgedrückt, sind also Sichten Aliase von Abfragen. Eine Sicht erfüllt hauptsächlich die Aufgabe, den Zugriff auf das oft sehr komplexe Datenbankschema (mit vielen Tabellen und Relationen zueinander) zu vereinfachen. Sichten implementieren auch eine Art Datenschutzmechanismus, da sie nur einen Ausschnitt des Gesamtmodells darstellen und manchen Nutzern daher bestimmte Daten verborgen bleiben. Als alleiniger Datenschutzmechanismus sind sie aber natürlich nicht geeignet – schließlich können die Nutzer an die Daten gelangen, wenn sie die Abfrage kennen, die hinter der Sicht steht. Sichten können nicht nur bestimmte Zeilen oder bestimmte Spalten aus einer Tabelle herausfiltern, sondern auch mehrere Tabellen miteinander verknüpfen oder Aggregationsfunktionen (MIN, MAX, Count etc.) anwenden. Neben Views, die lediglich den Zugriff auf andere Tabellen erlauben, nicht aber deren Veränderung, gibt es auch noch veränderbare Views. Sie erlauben eine Verwendung in Update-, Delete- und Insert-Anweisungen, um die zugrunde liegende Tabelle zu ändern. © it-novum GmbH 2010 14 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Eine relativ neue Abwandlung der Sichten sind die sogenannten „Materialized Views“. Im Gegensatz zu herkömmlichen Sichten werden Materialized Views tatsächlich und nicht nur virtuell abgespeichert. Dadurch kann man schneller auf sie zugreifen. Das ist gerade bei aufwändigen OLAP-Anwendungen ein klarer Vorteil, z.B. bei der Vorberechnung und Speicherung aggregierter Daten (Dimensions-/Fakttabellen). Materialized Views werden beispielsweise bei einem Update der Basistabellen aktualisiert, was zu einem hohen Aufwand führen kann. Denkbar sind auch log-basierte Updates oder Updates nach bestimmten Zeitintervallen. Zusammengefasst spricht es klar für ein Datenbanksystem, wenn es Materialized Views unterstützt. Skalierungsmöglichkeiten Skalierbarkeit ist die Fähigkeit einer Anwendung, ihre Leistung beizubehalten, wenn sie um ein bestimmtes Maß anwächst. Um das zu erreichen, muss die Anwendung in der Lage sein, ihre Kapazität (d.h. die Gesamtlast, die sie verarbeiten kann) bei Bedarf zu erhöhen. Es reicht deshalb nicht aus, dass ein Datenbanksystem die Fähigkeit zur Skalierung mitbringt, auch die benutzte Anwendung muss skalierbar sein! Das Konzept der Skalierbarkeit hängt eng mit der Fehlertoleranz (Failover) zusammen, da bei der Skalierung von vornherein eingeplant werden sollte, dass Komponenten teilweise ausfallen. Nachfolgend werden die gebräuchlichsten Methoden der Skalierung vorgestellt. • Replikation Als Replikation Speicherung werden von Daten in an der Datenverarbeitung verschiedenen die mehrfache Standorten und die Synchronisation der Datenquellen verstanden. Die Replikation erlaubt es also, einen oder mehrere Server als Slaves bzw. Repliken eines anderen Servers zu benutzen. Es existieren zwei unterschiedliche Arten der Replikation: Synchrone Replikation: Änderungen werden nicht nur auf dem Master, sondern zeitgleich auch auf allen Replikaten durchgeführt. Die Replikate sind damit zu jeder Zeit auf dem Stand des Masters. Die Umsetzung einer synchronen Replikation ist mit viel Aufwand verbunden. Asynchrone Replikation: Bei dieser Art der Replikation liegt eine Latenzzeit zwischen Änderungen auf dem Master und dem Replizierungsvorgang auf den Slaves. Folglich sind die Daten nur zum Zeitpunkt der Replikation synchronisiert. Die meisten DBS beherrschen heute die asynchrone Replikation. Die technischen Verfahren zur Umsetzung sind sehr komplex © it-novum GmbH 2010 15 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 und können von Hersteller zu Hersteller unterschiedlich sein. Replikation dient dabei nicht nur der Ausfallsicherung (Failover), sondern wird auch zur Steigerung der Performance eingesetzt. Gerade bei extrem vielen gleichzeitigen Leseabfragen ist es sinnvoll, sie über mehrere Server zu verteilen, um einen Lastausgleich zu schaffen. Selbstverständlich können (asynchron) replizierte DBS auch dazu genutzt werden, etwa neue Updates zu testen, bevor man sie im Produktivsystem einsetzt. Zu beachten ist, dass die Replikation die herkömmlichen Backup-Verfahren zur langfristigen und vor allem historisch vollständigen Sicherung nicht ersetzen kann, sondern sie lediglich unterstützt und ergänzt. Ungeachtet dessen stellt die Replikation eine wichtige Anforderung dar, die ein DBS erfüllen sollte. • Partitionierung / Sharding Mit Hilfe der Partitionierung ist es möglich, eine Datenbank (oder auch nur einzelne Datenbankelemente, wie z.B. Tabellen) in voneinander unabhängige Teile zu zerlegen und verteilt abzuspeichern. Bei einem verteilten DBS kann jede Partition auf mehrere Rechnerknoten zugreifen und die Benutzer des Rechnerknotens können lokale Transaktionen auf die Partition ausführen. Das führt in der Regel zu einer besseren Performance und Verfügbarkeit. Die Regeln der Partitionierung kann der Nutzer im Rahmen der Möglichkeiten des DBS selbst bestimmen (z.B. durch einen definierten Wertebereich verschiedener oder, Tabellenzeilen Hash-Funktionen). auf Die unterschiedlichen Speicherung physikalischen Partitionen wird als horizontale Partitionierung bezeichnet (Sharding), die Verteilung von Tabellenspalten auf verschiedene Partitionen als vertikale Partitionierung. Ausfallsicherung Ein DBS muss im Unternehmen stets verfügbar sein, deshalb werden Techniken wie die bereits beschriebene Replikation auf mehrere Server eingesetzt. Fällt ein Server aus, muss er entfernt und stattdessen ein anderer benutzt werden. Diesen Vorgang bezeichnet man als Ausfallsicherung oder Failover. Ein anderer Begriff in diesem Zusammenhang ist das “Failback”. Je nach Konfiguration der Replikation stellt es den Gegenschritt von Failover dar, also die Rückkehr zu einem Server, der ausgefallen war und nun repariert ist. Failover kann nicht nur bei einem Ausfall eingesetzt werden, sondern auch zum Ausgleichen von Lastspitzen. Lastausgleich und Failover hängen daher eng zusammen. Die Umsetzung des FailoverKonzeptes ist abhängig von der IT-Infrastruktur der jeweiligen Firma und den Möglichkeiten innerhalb des DBS. © it-novum GmbH 2010 16 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Indizes Dieses Kriterium betrifft die physische Datenorganisation (Speicherung). Abfragen auf eine Datenbank benötigen häufig nur wenige Tupel einer Relation. Sofern die Datensätze ohne zusätzliche Informationen in den einzelnen Tabellen gespeichert wurden, werden die ausgewählten Spalten komplett (sequenziell) nach den zu erfüllenden Kriterien durchsucht. Dazu braucht man bei großen Tabellen sehr viel (unnötige) Zeit, weshalb man Indizes einsetzt. Ein Index besteht aus einer Sammlung von Zeigern auf eine oder mehrere Spalten in einer Tabelle. Die Indexstruktur ist dabei von der Datenstruktur unabhängig. Bei der Erstellung einer Tabelle, die einen Primärschlüssel enthält, wird automatisch für diese Spalte (oder Spalten bei einem zusammengesetzten Primärschlüssel) ein Index gesetzt. Er reicht je nach Komplexität der Tabelle aber nicht aus, weshalb weitere Indizes angelegt werden können. Die meisten DBS unterstützen auch zusammengesetzte Indizes, d.h. mehrere Spalten in einem Index. Es gibt verschiedene Arten von Indizes, die aber nicht alle von jedem DBS-Typ unterstützt werden. Zur Indexumsetzung gibt es unterschiedliche Methoden, nach denen die Indizes auch teilweise benannt sind (z.B. der B-Baum). Besondere Arten von Indizes stellen die beiden folgenden dar: • Bitmap-Index Bitmap-Indizes sind besonders für die Indizierung von multidimensionalen Daten geeignet, da sie gegenüber Bäumen unempfindlicher sind bei einer höheren Anzahl von Dimensionen. Beschränkt eine Anfrage die indizierten Dimensionen stark, kann der Bitmap-Index besonders effektiv sein. Diese Eigenschaften machen Bitmap-Indizes vor allem für den Einsatz in einem Data Warehouse interessant. Der Bitmap-Index speichert ein oder mehrere Attribute in Form eines Bitmusters und hilft daher sehr bei Spalten mit einer geringen Kardinalität (Anzahl der in dieser Spalte vorhandenen unterschiedlichen Werte). Für Spalten, in denen sich die Werte häufig ändern, ist er dagegen nicht geeignet, da der Änderungsaufwand höher ist als bei herkömmlichen Index-Techniken. • Volltext-Index Wie der Name bereits sagt, sind Volltext-Indizes dafür zuständig, das angegebene Dokument (bei Datenbanken eine Tabelle) vollständig nach den vom Benutzer eingegebenen Wörtern zu durchsuchen. Dieses Verfahren findet sich in vielen Programmen, vor allem im Bereich von Office-Software. © it-novum GmbH 2010 17 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Gespeicherte Prozeduren Eine gespeicherte Prozedur ist eine Menge von (SQL-) Anweisungen, die unter einem Namen auf dem Datenbankserver gespeichert werden kann. Die Clients müssen dadurch nicht immer wieder die jeweiligen Einzelanweisungen ausführen, sondern können direkt die gespeicherte Prozedur aufrufen. Neben der reinen Anfragesprache (meist SQL) können sie auch zusätzliche Befehle zur Ablaufsteuerung (z.B. Schleifen) und Auswertung von Bedingungen enthalten. Gespeicherte Prozeduren werden zum einen eingesetzt, um die Leistung zu erhöhen, da weniger Informationen zwischen Client und Server ausgetauscht werden müssen. Allerdings erhöhen sie die Belastung des Datenbankservers, was bei sehr vielen Clients und nur einem oder wenigen Datenbankservern zu Verzögerungen führen kann. Zum anderen sind sie aus Sicherheitsgründen in Gebrauch: Bei konsequenter Nutzung von gespeicherten Prozeduren haben Anwendungen und Benutzer keinen Direktzugriff auf die Datenbanktabellen. Das erleichtert die Protokollierung enorm und führt zu einer sichereren Umgebung, in der auch Angriffe von außen, z.B. durch SQL-Injections, erheblich erschwert werden. Trigger Ein Trigger ist ein benanntes Datenbankobjekt, das mit einer Tabelle verbunden ist. Er wird aktiviert, wenn für die Tabelle ein bestimmtes Ereignis eintritt, d.h., wenn auf dieser Tabelle eine Insert-, Delete- oder Update-Anweisung ausgeführt wird. Verwendung finden Trigger beispielsweise bei der Überprüfung von Werten, die in eine Tabelle eingefügt werden sollen. Dabei kann der Trigger so eingestellt werden, dass er entweder vor oder nach der auslösenden Anweisung aktiviert wird. Sperrverfahren (Locking) In einem Unternehmen greift eine Vielzahl von Personen auf Daten zu, im Extremfall sogar zur gleichen Zeit. Wenn der Zugriff nicht kontrolliert wird, kann es passieren, dass die Daten nicht mehr in einem konsistenten Zustand sind. Man spricht dann von einer Anomalie. Darunter fällt z.B. das Phänomen „lost update“: zwei Benutzer editieren zur gleichen Zeit eine Datei und die Änderungen des einen Benutzers werden von dem, der die Datei zuletzt abspeichert, überschrieben. Moderne DBMS verfügen über Methoden, um solche Anomalien zu verhindern (genannt “Locking”, worauf wir bei der Evaluierung näher eingehen). © it-novum GmbH 2010 18 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Datensicherheit Die Datensicherheit umfasst sowohl den Schutz vor Datenverlust als auch den Schutz vor unberechtigtem Zugriff. Um einen Datenverlust zu verhindern, kann das DBMS in regelmäßigen Abständen Backups anlegen, gegen unberechtigten Zugriff schützen Zugriffsrechte. Charakteristisch für Datenbanksysteme ist, dass Zugriffsrechte sehr flexibel für einzelne Benutzer bzw. Benutzergruppen vergeben werden können. So kann man beispielsweise einstellen, dass Nutzer A eine komplette Tabelle sehen kann, Nutzer B aber nur gewisse Teile / Attribute (z.B. in einer Personaltabelle nur Personalnummer und Name, nicht aber das Gehalt). Migrationsmöglichkeiten Soll ein altes DBS abgelöst und die Datenbestände weiter verwendet werden, müssen sie in das neue DBS migriert werden. Eine solche Migration erfordert in den meisten Fällen einen enormen Aufwand, sowohl finanziell als auch personell. Ein wichtiges Kriterium ist daher, inwieweit das DBS den Anwender bei einer Datenmigration unterstützt. © it-novum GmbH 2010 19 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 2.3 Kriterienübersicht In den folgenden Tabellen sind die Kriterien nach Themengebieten in Kriteriengruppen zusammengefasst und ihre Gewichtung bei der Bewertung der beiden DBS dargestellt. In der Untersuchung erhielten die Datenbanken zwei verschiedene Bewertungen: Einmal eine Punktanzahl und daraus abgeleitet den sogenannten Nutzwert. Der Nutzwert wird gebildet aus der Multiplikation der Punktanzahl mit dem Wert der Gewichtung. Beispiel: PostgreSQL hat von uns beim Kriterium „Dokumentation“ neun Punkte erhalten. Da das Kriterium „Dokumentation“ mit 20 Punkten bewertet ist, ergibt sich ein Nutzwert von 180 Punkten. Kriteriengruppe A: Allgemeine Kriterien Kriterium Gewichtung 1 Lizenz 15 2 Referenzkunden 15 3 Support 25 3.1 Hersteller-Support 3.2 Community-Support 3.2.1 Support-Kanäle 3.2.2 Qualität 0 25 12,5 12,5 4 Dokumentation 20 5 Produkt-Updates 25 Summe 100 Kriteriengruppe B: Systemanforderungen und Softwareanbindung: Kriterium Gewichtung 1 Unterstützte Betriebssysteme/ Architekturen 15 1.1 32-Bit 1.2 64-Bit 5 10 2 Beschränkungen 20 2.1 pro Datenbank 2.2 pro Tabelle 2.3 pro Spalte 2.4 pro Index 5 5 5 5 3 Unicode-Support 15 4 Datentypen 25 5 XML-Support 15 6 Schnittstellen 10 Summe © it-novum GmbH 2010 20 100 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Kriteriengruppe C: Datenbankobjekte Kriterium Gewichtung 1 Schemata 10 2 Views 40 2.1 nichtveränderbar 2.2 updateable 2.3 materialized 10 10 20 3 Stored Procedures / Functions 25 4 Trigger 25 Summe 100 Kriteriengruppe D: Unterstützung des SQL-OLAP-Standards / OLAPFunktionalitäten Kriterium Gewichtung 1 Erweiterung des Group-By-Operators 8,33 8,33 8,33 2 Fensterfunktionen 30 2.1 Partitioning 2.2 Ordering 2.3 Framing 10 10 10 3 OLAP-Funktionen 20 3.1 Rangfunktionen 3.2 Statistische Funktionen 10 10 4 Common Table Expressions 25 Summe © it-novum GmbH 2010 25 1.1 Group By Rollup 1.2 Group By Cube 1.3 Group By Grouping Sets 21 100 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Kriteriengruppe E: Performance Kriterium Gewichtung 1 Skalierbarkeit 40 1.1 Replikation 1.1.1 a) synchrone 1.2.1 b) asynchrone 1.2 Partitionierung 20 10 10 20 2 Indizes 25 2.1 gewöhnliche Indizes 2.2 Bitmapindizes 2.3 Volltextindizes 10 10 5 3 SMP-Support 15 4 Multithreading 10 5 Parallel Query Processing 10 6 Performance-Messung 0 Summe 100 Kriteriengruppe F: Datensicherheit und Datenintegrität Kriterium Gewichtung 1 Skalierbarkeit 35 1.1 Replikation 1.2 Partitionierung 25 10 2 Indizes 40 2.1 gewöhnliche Indizes 2.2 Bitmapindizes 2.3 Volltextindizes 10 10 20 3 SMP-Support 25 Summe 100 Kriteriengruppe G: Administration und Wartung Kriterium Gewichtung 1 Client- und Hilfsprogramme 2 Backup-Möglichkeiten 50 50 Summe © it-novum GmbH 2010 22 100 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 3. Marktüberblick Open Source-Datenbanken Im Bereich der Open Source-Datenbanksysteme gibt es eine fast unüberschaubare Anzahl von Projekten und Anbietern. Eine vollständige Übersicht zu erstellen scheint fast unmöglich, da sich der Markt beinahe wöchentlich verändert und ständig neue Projekte gestartet werden. Am besten illustriert das die Webseite SourceForge.net. Sie dient als zentraler Verwaltungsund Verteilungsort für alle Arten von Open Source-Programmen. Im Bereich Datenbanken listete SourceForge Ende Mai 2010 1.710 Einträge in der Kategorie ’Datenbankserver / Datenbank-Engines’. Diese Zahl beinhaltet allerdings auch Tools und Erweiterungen zu bestehenden Datenbankprojekten. „Echte“ Datenbankprojekte müsste man also manuell zählen. Für die Absicht dieses Whitepapers reicht jedoch die untenstehende Auflistung, die eine gute Übersicht der bekanntesten Open Source-DBS bietet und keinen Anspruch auf Vollständigkeit erhebt. Apache Cassandra Apache CouchDB Apache Derby Apache Xindice Berkeley DB BlackRay CSQL C-Store CUBRID Db40 Drizzle EnterpriseDB eXist Firebird GadflyB5 Gladius DB GNU SQL Server H2 HBase HSQLDB Infini DB Infobright CE Ingres InnoDB LucidDB MaxDB Mnesia Monet DB MongoDB MySQL Neo4j NeoDatis ODB Palo PostgreSQL Sedna SmallSQL SQLite Die meisten Produkte, die die Übersicht enthält, sind relationale DBS. Es gibt jedoch auch Ausnahmen. So sind beispielsweise Apache Xindice und eXist XMLDatenbanken, d.h. alle Datensätze gelangen per XML in die Datenbank und auch die Ausgabe findet im XML-Format statt. Als Abfragesprache einer XMLDatenbank kommen u.a. die vom W3C-Konsortium entwickelten Sprachen XPath sowie das darauf aufbauende XQuery zum Einsatz. Apache Xindice scheint nicht mehr bzw. wenn überhaupt sehr langsam weiterentwickelt zu werden – die letzte stabile Version wurde vor über drei Jahren veröffentlicht. eXist dagegen wird noch aktiv weiterentwickelt, der Projektfortschritt lässt sich auf Sourceforge verfolgen. Für unsere Evaluierung kommt allerdings auch eXist nicht in Betracht, © it-novum GmbH 2010 23 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 da es hauptsächlich im Bereich der Webapplikationen Verwendung findet und ein “herkömmliches” DBS keinesfalls ersetzen kann (und will). Palo nimmt in dieser Liste eine Sonderposition ein, denn es ist der einzige Open Source MOLAPServer bisher. Aufgrund der proprietären Abfragesprache und der nicht gegebenen Vergleichbarkeit zu anderen DBS haben wir uns aber gegen Palo entschieden. Beim Betrachten der Tabelle fällt auf, dass sie einige sogenannte “eingebettete” (embedded) Datenbankensysteme enthält. Embedded DBS sind in Anwendungen integriert und treten nach außen nicht sichtbar als DBS in Erscheinung (beispielsweise Apache Derby und SQLite). Trotzdem lassen sich einige dieser Systeme auch im “klassischen” Client/Server-Modus betreiben, sodass sie für die Auswertung in Betracht kämen. Ausschließlich eingebettet lauffähige DBS kommen jedoch von vornherein nicht in Frage, da wir nur selbständig lauffähige Datenbankensysteme testen wollen. 3.1 Weitere Auswahlkriterien Doch auch durch diese Festlegung bleiben noch zu viele Produkte übrig. Wir müssen daher weitere Kriterien anwenden. Das erste Kriterium ist der Verbreitungsgrad des jeweiligen DBS. Er lässt sich am besten anhand des Marktanteils bestimmen, den das Produkt besitzt. Gerade bei Open SourceProdukten ist das jedoch schwierig bis unmöglich, denn aktuelle und objektive Studien über die Marktanteile von Open Source DBMS existieren schlichtweg nicht. Wir versuchen daher, anhand von Downloadzahlen Rückschlüsse auf den Verbreitungsgrad der DBS zu ziehen. Auf Sourceforge existieren zwar Einträge zu den größten Projekten wie MySQL und PostgreSQL, jedoch gibt es keine validen Downloadzahlen (MySQL lässt sich beispielsweise von SourceForge gar nicht herunterladen). Außerdem laden viele Nutzer die populärsten Anwendungen direkt von den Herstellerseiten und gehen nicht den “Umweg” über ein Portal. MySQL schreibt von sich selbst, dass es das populärste Open Source DBMS der Welt sei mit 65.000 Downloads pro Tag und über 100 Millionen Downloads insgesamt. Inwieweit diese Zahlen aktuell sind und den Tatsachen entsprechen, kann nicht überprüft werden. Viele der anderen DBS-Projekte geben überhaupt keine Informationen zu den Downloadzahlen Preis. Deshalb wird als weiteres Indiz für den Verbreitungsgrad die Entwicklergemeinde herangezogen. Bei MySQL und PostgreSQL ist sie am größten ausgeprägt und den anderen oben aufgeführten Produkten in wichtigen Punkten wie Aktualität, Integration von Entwicklern und Anwendern sowie Struktur (in den Hilfeforen) überlegen. © it-novum GmbH 2010 24 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Als zweites Kriterium für die Vorauswahl der Software haben wir ihren Reifegrad ausgewählt. Dazu haben wir Referenzinstallationen herangezogen. Auch hier zeigt sich, dass die MySQL und PostgreSQL einen Vorsprung gegenüber der Konkurrenz haben. So können beide Projekte in fast allen Wirtschaftsbereichen namhafte Referenzkunden vorweisen. Da wir die vorgestellten Kriterien für wesentlich halten, ist die Evaluierung von MySQL und PostgreSQL aus unserer Sicht am vielversprechendsten. Der Trend im Data Warehouse-Bereich geht eindeutig hin zu anwendungsspezifischen DBS, genauer gesagt spaltenorientierten DBS. Sie weisen deutliche Geschwindigkeitsvorteile beim Laden von sehr großen Datenmengen sowie bei analytischen Abfragen auf. Belegt wird das durch eine Vielzahl neuer Projekte bzw. Produkte in diesem Bereich, z.B. InfiniDB, LucidDB, Infobright (nur die Community Edition ist Open Source). Je nach Wunsch können auch innerhalb des Data Warehouse zeilenorientierte DBS für alle anderen Aufgaben benutzt werden (oder etwa ein spaltenorientiertes DBS speziell für einen DataMart – die Möglichkeiten sind sehr vielfältig). Die meisten der spaltenorientierten DBS setzen auf bekannte DBS wie MySQL oder PostgreSQL auf und erweitern sie um Performance-Features wie erweitertes Multithreading, verbesserte Datenkompression und schnellere Abfrageoptimierer. Da wir dieser Entwicklung auch in dem vorliegenden Whitepaper Rechnung tragen wollen, haben wir Infobright stellvertretend für spaltenorientierte DBS in die Auswahl der zu bewertenden DBS genommen. Infobright setzt allerdings auf MySQL auf und ist gerade in der Community Version nicht als Konkurrenz- sondern als Komplementärprodukt zu sehen. Wir haben uns daher gegen eine vollständige Evaluierung von Infobright entschieden und unterziehen das DBS nach dem Test von MySQL und Postgre nur einer Sonderbetrachtung. © it-novum GmbH 2010 25 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 4. Die Teststellung: Performancetest mit dem Pentaho Analyzer Ziel unserer Auswertung ist es, die ausgewählten Datenbankensystemen u.a. auf ihre Eignung als Data Warehouse zu überprüfen. Wir haben sie daher an eine Business Intelligence-Software angebunden, die zum Zweck der Teststellung mit den Daten aus den DBS arbeitet. Sinnvollerweise haben wir dazu ebenfalls ein Open Source-Produkt ausgewählt, um exemplarisch zu zeigen, wie eine offene, anpassungsfähige und gleichzeitig kostengünstige Data Warehouse-Lösung aussehen kann. Dabei handelt es sich um die Business Intelligence-Plattform Pentaho. Als Grundlage für die Tests wurden die DBS auf einem Server mit folgenden Spezifikationen installiert: Betriebssystem Windows Server 2003 R2 CPU Intel Core2Duo E6700 (2x 2,66 GHz) Arbeitsspeicher 4 Gigabyte Festplatte(n) 2x Western Digital Caviar Blue, 250 GB, 16 MB Cache, Raid 1 Die DBS können ohne Voreinstellungen auf diesem System installiert werden. Die Pentaho BI Suite ist vollständig in Java entwickelt und beinhaltet Komponenten für fast alle Anwendungsbereiche der Business Intelligence, darunter ETL, OLAP/ Reporting und Data Mining. Die Suite ist modular aufgebaut, sodass sich die einzelnen Module auch separat nutzen lassen. So kann beispielsweise das ETLTool (Pentaho Data Integration / PDI, früher Kettle) unabhängig von den anderen Modulen eingesetzt werden. Zudem lassen sich manche Module auch in andere Java-Anwendungen einbinden. Die Administration des BI-Suite-Servers wird über die sogenannte “Administration Console” im Web-Browser durchgeführt. Dort lassen sich auch die Datenbanken einbinden. Für die populärsten DBS bringt Pentaho bereits Konnektoren mit, die anderen DBS lassen sich per JDBC- oder ODBC-Treiber des jeweiligen Herstellers anbinden. Der modulare Aufbau der Suite führt dazu, dass die Administration Console keine globale Konfigurationsmöglichkeit für alle Tools der Suite bietet. Alle erforderlichen Einstellungen bezüglich der DBAnbindung kann man jedoch in den Client-Programmen vornehmen. Den Kern der OLAP-Funktionalität in Pentaho bildet der OLAP-Server Mondrian, der im Jahr 2001 als eigenständiges Open Source-Projekt begann und seit 2006 Teil von Pentaho ist. Mondrian ist (vereinfacht ausgedrückt) dafür zuständig, MDXQueries auszuführen, Daten von einer relationalen DB zu lesen und das Ergebnis in multidimensionaler Form auszugeben. Die Architektur von Mondrian besteht aus vier Schichten oder Layer: © it-novum GmbH 2010 26 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Abbildung 3: Architektur des Mondrian OLAP-Servers. Quelle: http://mondrian.pentaho.org/documentation/architecture.php 1. Presentation Layer: Visualisiert die Ausgabe für den Benutzer. Über diese Schicht kann der Benutzer mit Mondrian interagieren. Sie wird nicht von Mondrian selbst bereitgestellt, sondern durch Frontends anderer Hersteller. Diese lassen sich an Mondrian anbinden, darunter das ebenfalls unter Open Source-Lizenz stehende Web-Frontend jPivot für die Navigation über einen Webbrowser. Darüber hinaus ist die Anbindung an Mondrian u.a. durch XMLA und JOLAP möglich. 2. Dimension Layer: Diese Schicht parst, validiert und führt MDX-Queries aus. Die MDX Queries werden in mehreren Schritten generiert und ausgeführt: zuerst werden die Achsen (Dimensionen) des Würfels berechnet, danach die © it-novum GmbH 2010 27 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich einzelnen Zellen innerhalb der Achsen. Damit Februar 2011 nicht für jede Benutzerinteraktion das MDX-Query komplett neu berechnet werden muss, erlaubt ein sogenannter “Query Transformator” die Manipulation bestehender Queries. Für die Ausführung dieser Schritte ist es zwingend notwendig, dass vorher das relationale Datenbankmodell an das multidimensionale Modell angepasst wurde und diese Logik (d.h. die Zuordnung der einzelnen Dimensionen zur Fakttabelle) Mondrian mitgeteilt wurde. Das passiert über XML-Dateien, die alle notwendigen Informationen für Mondrian beinhalten. Pentaho liefert mit der Schema Workbench ein grafisches Tool, mit dem sich diese Dateien auf relativ einfache Weise erstellen lassen. In der Schema Workbench wird bereits festgelegt, auf welches DBS Mondrian später zugreifen wird. Nach Erstellung wird die XMLDatei dem BI-Server bekannt gegeben (publish). 3. Star Layer: In dieser Schicht werden bereits aggregierte Werte (z.B. die Marketingausgaben für ein bestimmtes Produkt zu einem bestimmten Zeitraum in einem bestimmten Land) im Speicher gehalten. Bei der nächsten Abfrage prüft Mondrian, ob er sie mit Werten aus dem Cache beantworten kann. Nur wenn die Prüfung negativ ausfällt, wird eine Abfrage an die zugrunde liegende Datenbank gesendet. 4. Storage Layer: Hier findet der Zugriff auf die zugrunde liegende Datenbank statt. Es macht aus Performancegründen Sinn, bereits voraggregierte Tabellen zu erstellen, auf die Mondrian zugreifen kann. Sonst kann es sein, dass die gesamte Faktentabelle gelesen werden muss. Die performanteste Variante wären Materialized Views, XML for Analysis, ein Standard für den Datenzugriff in analytischen Systemen, basiert u.a. auf SOAP, XML und http, Java Based OLAP interface, API auf Java-Basis für plattformunabhängigen Zugriff auf OLAP-Systeme sofern sie vom jeweiligen DBS unterstützt werden. Die Beispieldatenbank: World Class Movies Das Buch “Pentaho Solutions” (erschienen im Wiley-Verlag) enthält eine BeispielDatenbank, welche die Daten eines DVD-Verleihunternehmens enthält. Die im Buch enthaltenen Beispiele sowie die Datenbanken als MySQL-Dump lassen sich auf der Webseite des Verlags (http://eu.wiley.com/) herunterladen. Die Datenbank ist im beschriebenen Sternschema angeordnet und besteht aus verschiedenen Dimensionstabellen (z.B. für die Kunden, DVDs, Orte, Zeit) sowie vier Faktentabellen. Für die vorliegende Studie ist aber nur die Faktentabelle “fact_orders” von Relevanz. Sie beinhaltet 1,35 Millionen Datensätze, die © it-novum GmbH 2010 28 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Dimensionstabelle für die Kunden (“dim_customer”) Februar 2011 umfasst 145.000 Datensätze. Die Datenbanken, die wir testen wollen, haben wir an den Pentaho BI-Server über eine entsprechende Konfiguration in der Administration Console angebunden. Im Rahmen der Definition des Mondrian-Schemas wird in der zugehörigen Workbench der zugrundeliegende Datenbestand (die Datenbank) eingestellt, bevor es auf dem BI-Server publiziert wird. Das erlaubt es, den gleichen Cube mehrfach an den BI-Server mit verschiedenen darunterliegenden Datenbanken zu senden, was den Konfigurationsaufwand danach minimiert. Mondrian ist dann in der Lage, auf Grundlage der angegebenen DB die SQLStatements anzupassen (die Kennzeichnung von Werten und Bezeichnern betreffend). So kennzeichnet MySQL Werte teilweise mit einem doppelten Anführungsstrich (nicht ANSI-konform), wohingegen PostgreSQL einfache Anführungsstriche benutzt. Durch Parameter in der Konfigurationsdatei von Mondrian lässt sich das Logging sowohl der gesendeten SQL- als auch der MDX- Anweisungen einschalten. Verschiedene Operationen auf Basis des vorhandenen Würfels wurden ausgeführt, die Queries für die Messung wurden aus der Log-Datei ausgelesen und auf dem jeweiligen DBS direkt ausgeführt. Ergebnisse der Abfragemessung Bei einer Performance-Messung sollten unter anderem folgende Faktoren berücksichtigt werden: • das verwendete Betriebssystem • die Hardware • die Anzahl der (simulierten) Clientverbindungen • die Art der Anwendung (bspw. OLAP versus OLTP) • das Datenbankschema und die darauf simulierte Arbeitslast • das Datenvolumen und • Datenbankkonfiguration Die in der Tabelle dargestellten Ergebnisse haben wir erhalten, indem wir die Queries Q1 bis Q5 jeweils drei Mal nach Neustart des DBS ausgeführt haben (alle Queries sind im Anhang am Ende des Dokuments zu finden). Anschließend wurde der Mittelwert der Antwortzeiten gebildet. Alle Spalten in den SelectAnweisungen der Queries wurden aus Gründen der Vergleichbarkeit auf allen DBS indiziert (außer Infobright, da hier keine Index-Definitionen erlaubt sind). In den jeweiligen Konfigurationsdateien haben wir darauf geachtet, dass kein Query-Cache eingestellt war. Allerdings hält auch das Betriebssystem einige © it-novum GmbH 2010 29 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Daten im Cache. Unserer Kenntnis nach gibt es derzeit aber keinen Befehl, um den Cache in Windows zu leeren. MySQL (MyISAM) PostgreSQL Infobright Q1 39,296 34,265 2,001 Q2 17,359 6,901 2,250 Q3 2,591 2,016 2,281 Q4 23,422 5,172 6,157 Q5 7,907 8,453 1,969 Abbildung 4: Messergebnisse des Abfragetests Bei den Abfragen (auch bei denen, die hier nicht aufgelistet sind) konnten wir eine deutliche Tendenz feststellen: PostgreSQL schnitt durchwegs schneller ab als MySQL. Da es möglich ist, dass man mit einer anderen Hardwareausstattung andere Ergebnisse erzielt, muss man vorsichtig damit sein, die gewonnenen Daten auf alle Betriebssysteme und Hardwarekomponenten zu übertragen. Die Messung soll daher lediglich zur groben Orientierung dienen und fließt nicht in das Evaluationsergebnis ein. © it-novum GmbH 2010 30 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 5. Produktübersicht und -vergleich In diesem Kapitel beschreiben wir die drei untersuchten Datenbanken und ihr Abschneiden im Leistungstest. Die Tabelle enthält die Eckdaten von MySQL, PostgreSQL und Infobright: Hersteller MySQL AB PostgreSQL Infobright Evaluiertes Evaluierte Release- Produkt Version Datum Bemerkung MySQL Server PostgreSQL 5.1.46 April 2010 - 8.4.4 April 2010 - Infobright CE 3.3.2 Nicht betrachtet Nur Kurzbetrachtung 5.1 Evaluierung von MySQL MySQL ist ein relationales DBS und wurde 1994 von den Schweden David Axmark und Allan Larsson und dem Finnen Michael Widenius entwickelt. Es ist sowohl im Client-Server-Modus als auch eingebettet lauffähig. Das erste interne Release von MySQL datiert auf den 23. Mai 1995. Die drei Entwickler gründeten später das Unternehmen MySQL AB, das neben den Produkten auch Dienstleistungen für das Datenbanksystem anbietet. MySQL AB wurde im Februar 2008 von Sun Microsystems übernommen, Sun im Januar 2010 wiederum von der Oracle Corporation. Damit ist Oracle nun Träger des Projekts. Das Alleinstellungsmerkmal von MySQL sind die verschiedenen Speicher-Engines – manche von MySQL selbst entwickelt, andere von Drittanbietern. Die SpeicherEngines sind für verschiedene Einsatzzwecke konzipiert worden und machen MySQL sehr flexibel. Engines lassen sich in MySQL auch selbst erstellen. Für die verschiedenen Tabellen einer DB kann man auch unterschiedliche SpeicherEngines definieren. Durch den Befehl ENGINE=... gibt man bei der Erzeugung der Tabelle den zu verwendenden Speichermanager vor. MySQL enthält folgende Speicher-Engines: • MyISAM: Die Standard-Speicher-Engine von MySQL für nicht- transaktionssichere Tabellen. MyISAM-Tabellen können dafür Daten sehr schnell speichern und abrufen. © it-novum GmbH 2010 31 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich • Februar 2011 InnoDB: Engine für transaktionssichere Tabellen. InnoDB unterstützt COMMIT, ROLLBACK und Datenwiederherstellung. Für einen Mehrbenutzerbetrieb eignet sich sie besser als MyISAM, weil sie u.a. Zeilensperrungen ermöglicht (Features wie Zeilensperrung (engl. Row Level Locking), d.h. Schreibzugriffe in einer Transaktion bewirken eine Schreibsperre der betroffenen Datensätze für alle anderen Transaktionen. Erlaubt zudem die Erstellung von FremdschlüsselConstraints. • Memory: Speichert Tabelleninhalte im Hauptspeicher ab für sehr schnelle Reaktionszeiten. Bei einem Server-Neustart gehen die Inhalte natürlich verloren, dieTabellen selbst bestehen jedoch weiter, da ihre Definitionen auf der Festplatte gespeichert werden. • Merge: Sammlung mehrerer MyISAM-Tabellen, die dann als einziges Tabellenobjekt angesprochen werden können. Die zusammengefügten Tabellen müssen jedoch alle dieselben Spalten- und Indexdaten haben. • BDB: Bietet wie InnoDB Transaktionssicherheit, jedoch im Gegensatz zu dieser auch besondere Vorkehrungen im Falle eines Systemausfalls. • Archive: Geeignet für die Speicherung sehr großer Datenmengen bei möglichst niedrigem Speicherbedarf dank effizienter Kompressionsmethoden. Unterstützt keine Indizes und erlaubt nur Einfüge- und Leseoperationen. Bei der Installation von MySQL Server auf Windows-Rechnern wird bereits während der Installation ein Dialog angezeigt, der eine Bestimmung des Haupteinsatz-Zweckes des DBS erlaubt: • multifunktionales DBS: Aktivierung von MyISAM und InnoDB (Standard: InnoDB), gleichmäßige Verteilung der Serverressourcen auf beide Engines • transaktionales DBS: Aktivierung von MyISAM und InnoDB (Standard: InnoDB), Reservierung der überwiegenden Serverressourcen für InnoDB • nicht-transaktionales DBS: Vollständige Deaktivierung von InnoDB (Standard: MyISAM), Reservierung der gesamten Serverressourcen für MyISAM © it-novum GmbH 2010 32 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Allgemeine Kriterien Lizenz MySQL ist eine freie Software, die unter der General Public License (GPL) steht. Für die Einbettung in kommerzielle Applikationen ist das Produkt allerdings auch mit einer kommerziellen Lizenz erhältlich (MySQL Enterprise). Sie bietet im Gegensatz zur freien Version Gewährleistung und Hersteller-Support, der u.a. Beratungsleistungen und Unterstützung bei Problemlösungen mit festgelegten Reaktionszeiten umfasst. Des Weiteren umfasst sie zusätzliche Tools für Monitoring sowie Lösungen für Hochverfügbarkeit. Der Leistungsumfang der Enterprise-Version ist abhängig vom gewählten Modell, derzeit werden vier Leistungsstufen angeboten. Im Rahmen der Evaluierung kommt jedoch nur die freie Version zum Einsatz. Da die Community-Version von MySQL wegen der GPLLizenz mit einem Copyleft versehen ist, bekommt sie sieben Punkte. Referenzkunden MySQL wird in vielen Branchen eingesetzt und kann dementsprechend viele Referenzkunden vorweisen. So zählen z.B. im Bereich Softwaretechnologie Citrix, im Web/Web 2.0 unter anderem Wikipedia, Facebook, Google, Yahoo und Youtube und im Handel Sears zu den Kunden, um nur eine der Prominentesten zu nennen. Eine Übersicht über die größten Kunden, sortiert nach Branchen, kann auf der Herstellerseite eingesehen werden: http://www.mysql.com/customers/?origref=http://www.oracle.com/us/products /mysql/index.html. Die große Zahl an prominenten Kunden, die MySQL auch in sehr großem Maßstab einsetzen (Datenbanken im Terabyte-Bereich sind keine Seltenheit), führen zu einer Bewertung von 10 Punkten. Support Für die Community-Version des MySQL-Server wird naturgemäß kein HerstellerSupport gegeben. MySQL stellt allerdings eine ganze Reihe von Foren zur Verfügung, sowohl für Neueinsteiger als auch Fortgeschrittene. Durch die Einteilung in verschiedene Kategorien (z.B. Installation, Migration von anderen DBS, Performance) werden dort auf übersichtliche Weise alle Themenkomplexe rund um MySQL abgedeckt, sodass neue Nutzer nach kurzer Zeit einschätzen können, wo sie ihre Frage am besten einstellen. Die Anzahl der Beiträge in diesen Foren und die Antworthäufigkeit deuten auf eine hohe Aktivität der Community hin. Ein weiterer Kommunikationskanal bei MySQL sind Mailinglisten, bei denen der Nutzer nach der Anmeldung Beiträge als E-Mails bekommt. Der Nutzer kann auch © it-novum GmbH 2010 33 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Fragen (und Antworten) an die Liste schicken. Eine Übersicht über die aktiven Listen gibt http://lists.mysql.com/. Außerdem ist es möglich, über den Internet Relay Chat (kurz IRC) in Kontakt mit anderen MySQL-Nutzern zu treten. Dazu dient der IRC-Channel #mysql, mit dem Chats mit einer beliebigen Anzahl von Teilnehmern möglich sind. Für die Enterprise-Edition von MySQL gibt es wie bereits beschrieben Hersteller-Support von Oracle. Da diese Version nicht zur Evaluierung steht, wird der Hersteller-Support aber nicht bewertet. Der Support durch die Community ist als sehr gut einzustufen, da MySQLAnwender über vielfältige Kommunikationskanäle Kontakt zu erfahrenen Benutzern aufnehmen können. Die Community von MySQL ist sehr groß, die Qualität der Antworten in den Foren nach stichprobenartigem Lesen sehr hoch. Aus diesen Gründen erhält MySQL im Bereich Support eine Bewertung von acht Punkten. Dokumentation Zu MySQL Server 5.1 existiert ein Referenzhandbuch, das man in vollem Umfang unter http://dev.mysql.com/doc/refman/5.1/en/index.html einsehen kann. Es ist auch in einer deutschen Übersetzung vorhanden, wobei wir darauf hinweisen möchten, dass sie nicht zwangsläufig so aktuell wie das englische Original sein muss. Außerdem können auf der Entwicklungsseite noch weitere Leitfäden, z.B. zur Benutzung der MySQL Workbench (diese wird später betrachtet) und des Source-Codes, heruntergeladen werden. Die Dokumentation zu MySQL erhält die volle Punktzahl, da sie sowohl in Umfang als auch Verständlichkeit keine Wünsche offen lässt. Produkt-Updates Im Gegensatz zur Enterprise Edition werden für die Community-Version des MySQLServers keine Service Packs bereit gestellt. Dennoch wird auch weiterhin an der Community Edition gearbeitet. In circa einmonatigen Abständen wird eine neue (Minor-)Version zum Download angeboten. Die Änderungen sind im Anhang des Referenzhandbuchs als Zusammenstellung von Patches dokumentiert. Da größere Updates bzw. neue Major-Releases für die CommunityVersion bei MySQL einige Zeit brauchen, um veröffentlicht zu werden, erhält MySQL nur sieben Punkte. © it-novum GmbH 2010 34 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Fazit: Allgemeine Kriterien Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Lizenz 15 7 105 2 Referenzkunden 15 10 150 3 Support 25 9 225 0 25 12,5 12,5 0 9 9 9 0 225 112,5 112,5 4 Dokumentation 20 10 200 5 Produkt-Updates 25 7 175 100 43 855 3.1 Hersteller-Support 3.2 Community-Support 3.2.1 Support-Kanäle 3.2.2 Qualität Summe Systemanforderungen und Software-Anbindung Unterstützte Betriebssysteme Der MySQL Community Server ist für viele Betriebssysteme verfügbar. Namentlich sind das Windows, Mac OS X, Linux-Distributionen (spezielle Versionen für SuSE Linux Enterprise Server und Red Hat Enterprise Linux), HP-UX, Sun Solaris, IBM AIX sowie FreeBSD. Dabei gibt es auch 64-Bit Versionen für die genannten Systeme. Aufgrund der breiten Unterstützung aller gängigen Betriebssysteme, sowohl für 32-Bit und 64-Bit, vergeben wir die volle Punktzahl. Beschränkungen In diesem Kontext beziehen wir “Beschränkungen” nicht auf funktionelle Unzulänglichkeiten, sondern auf die Restriktionen, die das DBS größenmäßig vorgibt. Hinsichtlich der Tabellengröße gibt es bei MySQL kaum nennenswerte Beschränkungen. Vielmehr wird in der Praxis das Betriebssystem die Größe vorgeben. MyISAM unterstützt eine maximale Tabellengröße von 65,56 Terabyte. InnoDB speichert Tabellen in sogenannten Tablespaces ab, wobei ein Tablespace aus mehreren Dateien bestehen kann. Die maximale Größe eines Tablespace beträgt 64 Gigabyte. Sofern die maximale Dateigröße des verwendeten Betriebssystems ein Problem darstellt, kann man es durch Verwendung der © it-novum GmbH 2010 35 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 beschriebenen Merge-Engine umgehen. Eine weitere Möglichkeit ist, bei schreibgeschützten MyISAM-Tabellen das Hilfsprogramm “myisampack” zu verwenden, das diese Tabellen um mindestens 50% komprimieren soll. Bei InnoDB-Tabellen kann der Tablespace so konfiguriert werden, dass er aus mehreren kleinen Dateien besteht. Die maximale Anzahl von Indizes hängt von der verwendeten Speicher-Engine ab. Eine MyISAM-Tabelle kann maximal 64 Indizes haben, diese Zahl lässt sich jedoch durch manuelle Konfiguration des Builds seit Version 5.1.4 auf 128 erhöhen. Ein Index darf dabei aus maximal 16 Spalten bestehen. Wegen den wenigen serverseitigen Beschränkungen und den Möglichkeiten, Betriebssystem-Beschränkungen mit MySQL zu umgehen, erhält MySQL in diesem Kriterium insgesamt 9,75 Punkte. Unicode-Support Mit UTF-8 unterstützt MySQL einen weit verbreiteten Unicode-Zeichensatz, der die Zeichen vieler unterschiedlicher Sprachen enthält. Bereits bei der Installation von MySQL erscheint ein Dialog für die Festlegung des Standardzeichensatzes. Mit der Wahl der Option “Best Support for Multilingualism” wird UTF-8 ausgewählt. Diese Option kann man selbstverständlich im Nachhinein noch verändern. Deshalb erhält MySQL bei diesem Kriterium die volle Punktzahl. Datentypen MySQL unterstützt eine Vielzahl numerischer und zeichenbasierter Datentypen sowie Typen für Datum und Zeit. Bei manchen Datentypen unterscheidet sich ihre Implementierung allerdings vom SQL-Standard. So werden die booleschen Datentypen BOOL und BOOLEAN bei MySQL zurzeit lediglich als Synonym für TINYINT(1) behandelt. Eine vollständige Verarbeitung boolescher Datentypen gemäß dem SQL-Standard ist für die Zukunft geplant. Wegen der ansonsten vollständigen Unterstützung vergeben wir neun Punkte. XML-Unterstützung Seit Version 5.1.5 unterstützt MySQL grundlegende XML-Funktionalitäten nach dem XPath-Standard, allerdings ist die Implementierung noch nicht abgeschlossen. Es ist möglich, die Ausgabe von Clientprogrammen (mysql und mysqldump) in einer XML-Formatierung zu erhalten. Dazu werden beide Programme mit der Variable -xml gestartet. Durch diese Option können bereits existierende Tabellen in ein XML-Format exportiert werden. Es existieren auch verschiedene Techniken für den Import von XML-Dateien. So kann z.B. die Funktion LOAD_FILE() benutzt werden, um ein XML-Dokument zu öffnen, seinen Inhalt in einen String zu konvertieren und ihn in eine Tabellenspalte in MySQL zu schreiben. Eine weitere Möglichkeit ist, einen XML-formatierten MySQL Dump per © it-novum GmbH 2010 36 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Stored Procedures in eine MySQL Tabelle zu importieren. Die dritte Variante betrifft nur MySQL 6.0. In dieser Version gibt es das Statement “Load XML”. Vereinfacht agiert es umgekehrt wie die XML-Ausgabe von mysqldump und soll so einen unkomplizierten Import ermöglichen. Trotz dieser Möglichkeiten, existiert noch kein nativer XML-Datentyp. Da der XML-Support noch weitgehend in der Entwicklung ist und erst Version 6 eine verbesserte Implementation enthält, erhält MySQL in diesem Bereich nur sechs Punkte. Schnittstellen Durch die Schnittstelle Connector/ODBC (MyODBC) liefert MySQL Konnektivität für Clientprogramme, die sich über ODBC mit MySQL verbinden möchten. Die Clients können dabei Clients unter Windows und Unix laufen. Daneben gibt es für JDBC eine Schnittstelle namens Connector/J, die ebenso wie MyODBC quelltext-offen ist. Eine dritte Schnittstelle ist Connector/NET. Damit lassen sich .NET-Applikationen unter Verwendung von MySQL-Datenbankverbindungen entwickeln. Der Connector/MXJ ermöglicht es, eine MySQL-DB als Zusatzparameter in der JDBC-Verbindungs-URL anzugeben. Beim ersten Verbindungsaufbau wird durch diesen Parameter die DB gestartet. Des Weiteren enthält MySQL APIs u.a. für C, C++, Perl, PHP und Python bzw. entsprechende Module. Aufgrund dieser umfassenden Schnittstellenunterstützung vergeben wir die volle Punktzahl. Fazit: Systemanforderungen und Softwareanbindung Kriterium Gewichtung 1 Unterstützte Betriebssysteme/ Architekturen 15 10 150 5 10 10 10 50 100 2 Beschränkungen 20 9,75 195 2.1 pro Datenbank 2.2 pro Tabelle 2.3 pro Spalte 2.4 pro Index 5 5 5 5 10 10 10 9 50 50 50 45 Unicode-Support Datentypen XML-Support Schnittstellen 15 25 15 10 10 9 6 10 150 225 90 100 100 54,75 910 1.1 32-Bit 1.2 64-Bit 3 4 5 6 Summe © it-novum GmbH 2010 Erfüllungsgrad Nutzwert 37 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Datenbankobjekte Schemata MySQL verwendet Schemata synonym zu Datenbanken – die Befehle CREATE DATABASE und CREATE SCHEMA führen zum selben Ergebnis. Eine Datenbank kann also nicht mehrere Schemata besitzen, Schemata sind de facto nicht implementiert. Für jede Datenbank legt MySQL einen Ordner an, in dem die Dateien der dazugehörigen Tabellen abgespeichert werden. Bei neueren Windows-Versionen werden diese aufgrund von Berechtigungsproblemen seit Version 5.1.24 nicht mehr im Programmverzeichnis von MySQL gespeichert, sondern im Anwendungsdatenverzeichnis von Windows, das sich typischerweise im Home-Verzeichnis des Benutzers befindet . Da Schemata nicht unterstützt werden, erhält MySQL hier keine Punkte. Views MySQL erlaubt die Erstellung sowohl gewöhnlicher (nicht veränderbarer) als auch veränderbarer Views. Eine einfache View wird wie folgt erstellt: CREATE VIEW db_name . view_name AS SELECT * FROM table_name ; Ohne Angabe der Datenbank (db_name) wird die View der Standarddatenbank (Standardschema) zugeordnet. Basistabellen und Views teilen sich denselben Namensraum, daher darf eine Datenbank keine Basistabelle und View gleichen Namens enthalten. Eine View kann aus diversen Arten von Select-Anweisungen erstellt werden. Sie kann dabei Basistabellen, andere Views, Joins, Unions und Unterabfragen verwenden. Es ist möglich, bei ihrer Erstellung durch Angabe eines Algorithmus die Verarbeitung der View von MySQL zu beeinflussen. Das ist eine Erweiterung des SQL-Standards durch MySQL. Dabei werden die Algorithmen MERGE und TEMPTABLE unterschieden: • MERGE: Der Text der Anweisung, in der die View benutzt wird, wird mit der View-Definition “verschmolzen”, d.h. Teile der View-Definitionen ersetzen entsprechende Teile der Anweisung. Dieser Algorithmus ist effizienter als der TEMPTABLE-Algorithmus und ermöglicht zudem veränderbare Views. • TEMPTABLE: Die Ergebnisse der View werden in eine temporäre Tabelle geladen, die dann zur Ausführung der Anweisung genutzt wird. TEMPTABLE erlaubt keine veränderbaren Views. Wenn kein Algorithmus bei Erstellung der View angegeben wird, entscheidet MySQL selbst, welchen es für passender hält. Für die Erstellung einer veränderbaren (updateable) View gilt die Einschränkung, dass eine eins-zu-eins- © it-novum GmbH 2010 38 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Beziehung zwischen den Zeilen der View und den Zeilen der zugrunde liegenden Tabelle bestehen muss. Daher darf eine solche View u.a. keine Aggregatfunktionen, Unterabfragen, Joins oder Unions enthalten, andernfalls wird sie unveränderbar. Die anfangs angesprochenen Materialized Views werden gegenwärtig nicht von MySQL unterstützt. Deshalb vergeben wir in der Kategorie “Views“ nur fünf Punkte. Stored Procedures / Stored Functions MySQL unterstützt gespeicherte Prozeduren und gespeicherte Funktionen unter Verwendung der SQL:2003 Standard-Syntax für gespeicherte Routinen. Die Implementierung ist jedoch noch nicht vollständig abgeschlossen. Gespeicherte Routinen sind immer einer bestimmten Datenbank zugeordnet. Allerdings kann man durch die explizite Angabe des Datenbanknamens auch eine gespeicherte Routine aufrufen, die nicht auf der aktuellen Datenbank liegt. Zu beachten ist, dass durch das Löschen einer Datenbank ihre gespeicherten Prozeduren und Funktionen ebenfalls gelöscht werden. MySQL erhält in diesem Bereich acht Punkte. Trigger MySQL unterstützt Trigger. Sie sind mit einer Tabelle verbunden. Es ist nicht möglich, Trigger mit einer als temporär definierten Tabelle oder einer View zu verbinden. Für die Erstellung eines Triggers auf der Tabelle ist in der evaluierten Version das Super-Recht erforderlich. Seit Version 5.1.6 genügt ein spezielles Recht (Trigger-Recht). Die drei Ereignisse (Events), die einen Trigger auslösen, sind Insert, Update und Delete. Die Ereignisse sind dabei nicht automatisch gleichzusetzen mit den gleichnamigen SQL-Anweisungen. So können z.B. neben einer Insert-Anweisung auch Load Data- und Replace-Anweisungen ein Insert-Ereignis sein, weil auch diese beiden Befehle Zeilen in eine Tabelle einfügen. MySQL beschränkt die Anzahl von Triggern insofern, als dass pro Tabelle nicht zwei Trigger dieselbe Aktionszeit (Einschaltung des Triggers entweder vor oder nach dem Ereignis) und dasselbe Trigger-Ereignis haben. Durch die solide Unterstützung von Trigger erhält MySQL die volle Punktzahl. © it-novum GmbH 2010 39 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Fazit: Datenbankobjekte Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Schemata 2 Views 10 40 0 5 0 200 2.1 nichtveränderbar 2.2 updateable 2.3 materialized 10 10 20 10 10 0 100 100 0 3 Stored Procedures/ Functions 4 Trigger 25 8 200 25 10 250 100 43 650 Summe Unterstützung des SQL/OLAP-Standards Erweiterung des Group-By-Operators MySQL erlaubt seit Version 4.1 den Einsatz des Rollup-Operators. Die Syntax entspricht jedoch nicht dem SQL/OLAP-Standard. Anstatt des Aufrufs “Group By Rollup (Name/ n der Gruppierungsspalte/n)” wird bei MySQL der Bezeichner WITH ROLLUP nach Auflistung der Gruppierungsspalte/n angegeben. Die beiden anderen Erweiterungen CUBE und GROUPING SETS sind derzeit nicht in MySQL implementiert und müssen daher weiterhin über verschachtelte Abfragen realisiert werden. Daher erhält MySQL in dieser Kategorie 3,33 Punkte. Fensterfunktionen Fensterfunktionen (Window Functions) werden gegenwärtig nicht von MySQL unterstützt. Es ist zwar möglich, Tabellen zu partitionieren, das liefert jedoch nicht die Funktionalität des Window-Partitioning. Aus diesem Grund gibt es hier keine Punkte. Olap-Funktionen Rangfunktionen werden gegenwärtig nicht von MySQL unterstützt, statistische Funktionen teilweise seit Version 4 – dort waren einige allerdings nicht konform © it-novum GmbH 2010 40 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 zum SQL-Standard. Das hat sich mit Version 5 verbessert: Sie enthält die SQLkonforme Funktion STDDEV_POP, welche die Populationsstandardabweichung des angegebenen Ausdrucks berechnet. Außerdem enthält sie STDDEV_SAMP (Beispielstandardabweichung), VAR_POP (Populationsstandardvarianz) sowie VAR_SAMP (Beispielvarianz). Weitere statistische Funktionen, z.B. zur Korrelations- und Regressionsanalyse, besitzt MySQL derzeit nicht. Aufgrund der rudimentären Unterstützung von statistischen Funktionen und dem Mangel an Rangfunktionen vergeben wir nur 1,5 Punkte. Common Table Expressions / Rekursive Queries CTEs und rekursive Queries werden zum jetzigen Stand nicht von MySQL unterstützt. Aus diesem Grund vergeben wir null Punkte. Fazit: Unterstützung des SQL-OLAP-Standards / OLAP-Funktionalitäten Kriterium Gewichtung Erfüllungs- Nutzwert grad 1 Erweiterung des Group-By Operators 25 3,332 83,3 1.1 Group By Rollup 1.2 Group By Cube 1.3 Group By Grouping Sets 8,33 8,33 8,33 10 0 0 83,3 0 0 30 0 0 10 10 10 0 0 0 0 0 0 20 1,5 30 10 10 0 3 0 30 2 Fensterfunktionen 2.1 Partitioning 2.2 Ordering 2.3 Framing 3 OLAP-Funktionen 3.1 Rangfunktionen 3.2 Statistische Funktionen 4 Common Table Expressions Summe 25 0 0 100 17,832 113,3 Performance und Skalierbarkeit Die Performance von MySQL hängt wie bei jedem DBS von einer ganzen Reihe von Faktoren ab. Teilweise lassen sich die einzelnen Komponenten der DBS nicht einer bestimmten Funktion zuordnen. So kann beispielsweise die Replikation © it-novum GmbH 2010 41 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 gleichermaßen der Ausfallsicherheit als auch der Geschwindigkeitsoptimierung dienen, genauso wie Indizes sowohl ein Objekt der Datenbank als auch ein Geschwindigkeitsfeature darstellen. Ein wesentlicher Punkt bei MySQL ist die Wahl der verwendeten Speicher-Engine. Sie ist ein wesentlicher Faktor bei der Leistungsfähigkeit der Datenbank. Man sollte daher genau abwägen, ob die Anwendung tatsächlich Transaktionssicherheit benötigt, weil MyISAM in der Regel bei vielen Select- und Insertoperationen schneller ist als z.B. das ACIDkompatible InnoDB. Skalierbarkeit Die beiden bereits beschriebenen Techniken der horizontalen Skalierung, Replikation und Partitionierung funktionieren auch in MySQL. In der von uns untersuchten Version unterstützt MySQL lediglich die asynchrone Replikation. Mit MySQL Cluster hat MySQL allerdings ein Datenbanksystem im Portfolio, das als besonderes Merkmal die synchrone Replikation unterstützt. Wie MySQL ist es in einer freien und in einer kommerziellen Version erhältlich. Bei der asynchronen Replikation von MySQL kann man zwischen verschiedenen Konfigurationen auswählen: • Single-Master: Ein Master verteilt die Aktualisierungen auf mehrere Slaves • Erweitertes Single Master: Verkettung von Replikationsservern, indem Slaves als Master agieren. • Multi-Master: Das System verteilt alle Änderungen jeden Mitglieds an die jeweils anderen Mitglieder. Vorteil: Fällt ein Master aus, können die anderen Master die Datenbank weiterhin aktuell halten. Nachteil: Weil der Rechenaufwand und die Netzwerklast bei vielen Knoten enorm steigen, kommt es vermehrt zu Asynchronitätsproblemen (und den daraus resultierenden Folgeproblemen wie Inkonsistenz). MySQL selbst empfiehlt, keine Multi-Master-Replikation unterschiedliche Realisierungen zu der verwenden. Replikation: Es unterstützt zwei Anweisungsbasierte Replikation (“logische Replikation”) und zeilenbasierte Replikation. Der zugrunde liegende Vorgang ist bei beiden Arten derselbe: 1. Der Master zeichnet Änderungen an seinen Daten im Binärlog auf (diese Änderungen werden auch Binärlog-Events genannt). 2. Der Slave kopiert die Binärlog-Events in sein Relay-Log. 3. Der Slave spielt die Änderungen im Relay-Log noch einmal ab und wendet damit die Änderungen auf seine eigenen Daten an. © it-novum GmbH 2010 42 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Bei der anweisungsbasierten Replikation, die es seit MySQL 3.23 gibt, wird die tatsächliche SQL-Abfrage noch einmal ausgeführt. Dieses System ist relativ leicht zu implementieren. Ein weiterer Vorteil ist, dass die Binärlog-Events sehr kompakt sind, sodass die Datenströme innerhalb des Netzwerks zwischen Master und Slaves klein bleiben. Allerdings hat dieses Verfahren auch Nachteile: Das Binärlog-Format von MySQL enthält nicht nur den Abfragetext, sondern auch Metadaten (z.B. Zeitstempel). Manche Anweisungen kann MySQL nicht korrekt replizieren, z.B. Abfragen mit der Funktion CURRENT_USER(). Genauso führen gespeicherte Routinen und Trigger bei der anweisungsbasierten Replikationen häufig zu Problemen. Demgegenüber schreibt der Master bei der zeilenbasierten Replikation alle Ereignisse, die angeben, wie einzelne Datensätze in der Tabelle geändert werden, in sein Binärlog. Dadurch kann jede Anweisung repliziert werden, das Binärlog wird allerdings auch sehr viel größer. MySQL empfiehlt die Verwendung einer möglichst neuen Version für Replikation, weil sie ständig weiter verbessert wird, sowie die Verwendung der gleichen Version auf Master und Slaves. Vor allem bei Versionen unter 5.1 kann es zu Inkompatibilitäten kommen, da das Binärlogformat erheblich verändert wurde. Seit Version 5.1 unterstützt MySQL die horizontale Partitionierung von Tabellen, die Implementierung ist allerdings noch nicht vollständig abgeschlossen. Die Datenzeilen werden dabei anhand einer Partitionierungsfunktion verschiedenen Partitionen zugeordnet, wobei eine Zeile nicht in mehreren Partitionen vorkommen darf. Die verfügbaren Varianten bei der Partitionierungsfunktion sind: • Range-Partitionierung (Bereichspartitionierung): Zuweisung der Zeilen an die Partitionen durch Prüfung, ob ihre Spaltenwerte in einen definierten Wertebereich fallen • List-Partitionierung (Listenpartitionierung): Ähnlich der Range- Partitionierung. Allerdings wird hier geprüft, ob ein Spaltenwert in einer von mehreren definierten Wertelisten (pro Partition eine Liste mit expliziten Werten) vorkommt. • Hash-Partitionierung: Möglichst gleichmäßige Verteilung der Datensätze auf die Partitionen durch das DBS mit Hilfe einer Hash-Funktion. Der Benutzer braucht sich also keine Gedanken über die Aufteilung der Partitionen machen, er gibt lediglich die Anzahl der Partitionen an. • Key-Partitionierung: Ähnlich der Hash-Partitionierung, allerdings dient hier der Primärschlüssel als Eingangsvariable für die Hashfunktion Der Partitionierungsschlüssel muss dabei immer eine Integer-Spalte oder ein Ausdruck sein, der einen Integer-Wert ergibt. © it-novum GmbH 2010 43 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 MySQL unterstützt daneben auch die Definition von Unterpartitionen, d.h. jede Partition kann noch weiter unterteilt werden. Als Unterpartitionen werden nur Hash- oder Keypartitionen akzeptiert. Jede Partition muss zudem dieselbe Anzahl von Unterpartitionen haben. Durch die Partitionierung verringert sich die Datenmenge, die ein Server untersuchen muss, was zu einer besseren Abfrageperformance führen kann. Die Partitionen können auch auf verschiedene physische Datenspeicher verteilt werden. Auch beim Löschen von vielen Zeilen können Partitionen sehr hilfreich sein, da durch das Löschen der Partition auch gleichzeitig alle in ihr enthaltenen Datensätze gelöscht werden. Zu beachten ist, dass partitionierte Tabellen, die mit einer Version vor 5.1.6 erstellt wurden, von einem Server der Version 5.1.6 und höher nicht mehr gelesen werden können. Das spätere Hinzufügen der Partitionierung durch ein ALTER TABLE funktioniert ebenfalls nur ab Version 5.1.6. Davor wird die Anweisung zwar akzeptiert, hat jedoch keinerlei Auswirkung. Partitionierte Tabellen unterstützen keine Fremdschlüssel (auch nicht bei InnoDB) und alle Partitionen und Unterpartitionen müssen dieselbe Engine verwenden (diese Beschränkung soll demnächst beseitigt werden). Vertikale Partitionierung (d.h. Verteilung von Tabellenspalten auf verschiedene physikalische Partitionen) wird nicht von MySQL unterstützt und es gibt derzeit auch keine Bestrebungen, sie zukünftig einzuführen. Insgesamt erhält MySQL von uns 6,5 Punkte – maßgeblich deshalb, weil eine synchrone Replizierung nur mit MySQL Cluster möglich ist. Indizes Indizes sind einerseits Objekte einer Datenbank, andererseits werden sie zur Steigerung der Performance eingesetzt. Die Implementierung von Indizes in MySQL hängt wie beschrieben von der verwendeten Speicher-Engine ab, wobei alle Engines mindestens 16 Spaltenindizes pro Tabelle erlauben. Die Erstellung von zusammengesetzten (d.h. mehrspaltigen) Indizes ist möglich. Außerdem unterstützt MySQL die Erstellung von Volltext-Indizes, allerdings nur für MyISAMTabellen und dort auch nur für Spalten der Datentypen Char, Varchar und Text. Ein Volltext-Index wird durch das Schlüsselwort FULLTEXT entweder bei der Tabellendefinition oder im Nachhinein mit CREATE INDEX erzeugt. Die Volltextsuche wird danach über die Funktion MATCH() ausgeführt. Die meisten Indizes sind in B-Bäumen gespeichert. Ausnahme ist die Memory-Engine, die auch Hash-Indizes unterstützt sowie Indizes auf raumbezogene Datentypen, die mit Hilfe von R-Bäumen indiziert werden. Zum gegenwärtigen Zeitpunkt unterstützt MySQL keine Bitmap-Indizes. Aus diesem Grund und aufgrund der fehlenden Volltext-Indizes in den meisten Speicher-Engines gibt es eine Punktzahl von fünf. © it-novum GmbH 2010 44 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Weitere Performance-Features MySQL ist multithreading-fähig und damit in der Lage, mehrere Prozessoren und Prozessorkerne zu unterstützen. Realisiert wird das über Kernel-Threads des jeweiligen Betriebssystems. Für jede Client-Verbindung auf den Server wird ein eigener Thread angelegt. Die Variable “max_connections” in der MySQLKonfigurationsdatei my.conf regelt folglich auch die Maximalanzahl der Threads auf dem MySQL-Server. Inwieweit MySQL allerdings von mehreren CPUs profitieren kann, hängt stark von der jeweiligen Systemarchitektur (Betriebssystem und Hardware) und der Last (die Art der Zugriffe auf das DBS) ab. Bei vielen Verbindungen, die auf getrennte Tabellen zugreifen, kann MySQL theoretisch mehrere CPUs gut einsetzen, da es wenig Blockierungen durch Locks gibt. Allerdings ist es nicht in der Lage, eine einzelne Abfrage parallel auf mehreren Kernen / CPUs ausführen zu lassen (außer in einem Cluster). Dieses Feature bieten von MySQL abgespaltene Produkte (Forks) wie InfiniDB. Für die Multiprozessor-Unterstützung (SMP) von MySQL vergeben wir acht, für das Multithreading zehn Punkte. Rückschlüsse aus der Performance-Messung Auch wenn die Messergebnisse von MySQL tendenziell schlechter sind als bei PostgreSQL, kann auch MySQL teilweise von den gesetzten Indizes profitieren. MySQL bietet in seiner Konfigurationsdatei my.ini einige Möglichkeiten der Performance-Verbesserung, allen voran natürlich der Query Cache, der für diese Tests deaktiviert war. In den Voreinstellungen wird er für Systeme optimiert, die wenig Leistung haben und/oder auf denen noch viele weitere Dienste außer dem MySQL-Server laufen. Fazit: Performance Kriterium 1 Skalierbarkeit 1.1 Replikation 1.1.1 a) synchrone 1.2.1 b) asynchrone 1.2 Partitionierung 2 Indizes 2.1 gewöhnliche Indizes 2.2 Bitmapindizes 2.3 Volltextindizes 3 SMP-Support 4 Multithreading © it-novum GmbH 2010 Gewichtung Erfüllungsgrad Nutzwert 40 6,5 260 20 10 10 20 4 0 8 9 80 0 80 180 25 5,2 130 10 10 5 10 0 6 100 0 30 15 10 8 10 120 100 45 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich 5 Parallel Query Processing 6 Performance-Messung Summe Februar 2011 10 0 0 0 0 0 100 29,7 610 Datenintegrität und -sicherheit Transaktionen Die Transaktionsunterstützung von MySQL hängt wie beschrieben von der verwendeten Speicher-Engine ab. Die populärste MySQL-Speicherengine für Transaktionsunterstützung, InnoDB, ist voll ACID-kompatibel und implementiert alle vier Isolationsstufen des SQL-Standards. Die Standardisolationsebene von MySQL ist REPEATABLE_READ (die dritthöchste Isolationsebene, die bereits eine sehr hohe Nebenläufigkeit garantiert). InnoDB setzt sie auch als Standardeinstellung ein. Des Weiteren ist die Erstellung von Savepoints möglich, d.h. Stellen, an die bei einem Fehler innerhalb einer Transaktion zurückgesprungen werden kann. Ein Savepoint wird mit der Anweisung SAVEPOINT “savepointname” erstellt. Bei einem Fehler innerhalb der Transaktion geht MySQL mit der Anweisung ROLLBACK TO SAVEPOINT “savepointname” zu diesem gespeicherten Punkt zurück und führt die Transaktion problemlos fort. Für die sehr gut umgesetzte Transaktionsunterstützung erhält MySQL die volle Punktzahl. Locking und Nebenläufigkeit MySQL verfügt über Sperrverfahren auf Tabellenebene und Zeilenebene und unterstützt das Verfahren zur Erhöhung der Nebenläufigkeit (MVCC). Allerdings hängt auch hier wieder viel davon ab, welche Speicher-Engine zum Einsatz kommt. MyISAM unterstützt lediglich Sperrverfahren auf Tabellenebene, bietet jedoch auch eine Funktion für gleichzeitige Einfügevorgänge an. Diese lassen sich dadurch ausführen, ohne Abfragen zu blockieren. Sperrverfahren auf Tabellenebene bedeuten einerseits wenig Aufwand für die Erstellung, Prüfung und Freigabe der Locks (Locking-Overhead), andererseits garantieren sie wenig Nebenläufigkeit. Dagegen unterstützt InnoDB auch zeilenorientierte Sperrverfahren und MVCC, wobei letzteres mit den Isolationsebenen REPEATABLE READ und READ COMMITED funktioniert. Eine Übersicht über die LockingImplementierung der gebräuchlichsten Speicher-Engines von MySQL gibt folgende Tabelle: © it-novum GmbH 2010 46 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich LockingStrategie Concurrency Februar 2011 Overhead Engines tabellenorientiert niedrigste niedrigster zeilenorientiert zeilenorientiert, mit MVCC hoch höchster MyISAM, Merge, Memory NDB Cluster InnoDB, Falcon, PBXT, solidDB hoch höchste Für die Locking- und Nebenläufigkeitsstrategien geben wir 8,5 Punkte, da MVCC für Data Warehouse-relevante Speicherengines wie MyISAM und Memory nicht verfügbar ist. Benutzerrollen und Berechtigungskonzepte MySQL unterstützt keine Rollen oder Gruppen, verfügt allerdings über ein recht komplexes Sicherheits- und Berechtigungssystem, das man als Anfänger nur schwer durchschaut. Nutzer werden nicht nur anhand ihres Benutzernamens und des Passworts authentifiziert, sondern auch durch ihren Host, von dem aus sie die Verbindung herstellen. Das bedeutet in der Praxis, dass zwei gleichnamige Benutzernamen von Host A und von Host B den gleichen Benutzer darstellen können, dies aber nicht zwangsläufig müssen. Es können auch verschiedene Benutzer mit komplett anderen Passwörtern und Berechtigungen sein, das hängt allein von der Konfiguration der Benutzer-Accounts ab. Nachdem ein Account authentifiziert wurde (sich einloggen durfte), prüft MySQL, welche Berechtigungen er hat. Dabei gibt es zwei Arten von Berechtigungen: • Objektspezifische Berechtigungen: Sie gewähren den Zugriff auf bestimmte Objekte (z.B. auf Tabellen, Trigger und Views) • Globale Berechtigungen: Sie erlauben Funktionsaufrufe auf dem MySQLServer (z.B. um diesen herunterzufahren oder Abfragen anderer Benutzer anzuschauen) Die Berechtigungen werden in mehreren Tabellen abgespeichert (Grant-Tabellen), die den Kern der Sicherheitsmaßnahmen von MySQL darstellen. Es ist möglich, sie durch direkte Eingaben (INSERT, DELETE usw.) zu verändern. Das kann aber bei unerfahrenen Benutzern leicht zu einem unerwünschten Verhalten der Datenbank führen. Besser ist es, die Befehle GRANT und REVOKE zu verwenden. Beim GRANT-Befehl ist der entscheidende Punkt, dass gleichnamige Benutzer sich von jedem Host aus mit der Datenbank verbinden dürfen, wenn bei seiner Auslösung nicht explizit der Hostname mit angegeben wird. Die Berechtigungen für einen anderen Benutzer lassen sich mit folgendem Befehl anzeigen: © it-novum GmbH 2010 47 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 SHOW GRANTS For " user " " password " MySQL erlaubt auch die Erstellung eines sogenannten “Superuser” durch Vergabe der Berechtigung SUPER. Ein solcher User darf Operationen auf dem DBS ausführen, die anderen verwehrt bleiben, wie z.B. die Datenänderung auf einem schreibgeschützten Server. Ein weiteres Merkmal des Superuser ist, dass er sich auf die Datenbank verbinden darf, selbst wenn schon die maximale Verbindungsanzahl erreicht wurde und sich andere Clients nicht mehr verbinden dürfen. Das Berechtigungskonzept von MySQL ist als sicher einzustufen, das fehlende Rollenkonzept führt allerdings zu einem Punkteabzug, sodass MySQL für dieses Kriterium acht Punkte erhält. Fazit: Datensicherheit und Datenintegrität Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Skalierbarkeit 1.1 Replikation 1.2 Partitionierung 2 Indizes 2.1 gewöhnliche Indizes 2.2 Bitmapindizes 2.3 Volltextindizes 3 SMP-Support Summe 35 10 350 25 10 10 10 250 100 40 8,5 340 10 10 20 10 10 7 100 100 140 25 8 200 100 26,5 890 Administration und Wartung Client- und Hilfsprogramme MySQL bietet ein kostenloses grafisches Tool zur Administration an, die MySQL Workbench. In der neuesten Version (5.2 RC) ersetzt es die beiden älteren Tools “MySQL Query Browser” und “MySQL Administrator”. Die Workbench bietet eine dreigeteilte Funktionalität: Zum einen lassen sich dort auf relativ einfache Art und Weise Datenbankobjekte verändern. Zum anderen können Enhanced-EntityRelationship-Modelle erstellt werden. Außerdem ist die Workbench der Ort, wo sich Serververwaltungsaufgaben durchführen lassen, d.h. Konfiguration des © it-novum GmbH 2010 48 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Servers, Benutzerverwaltung, Einsehen aktiver Verbindungen, Status- und Servervariablen. A Abbildung: MySQL Workbench 5.2 RC Im Programm selbst werden keine Hilfestellungen durch Tooltips o.ä. gegeben, auch nicht bei der Serverkonfiguration. Ein Anfänger tut sich folglich schwer. Er kann sich aber über die FAQs (http://wb.mysql.com/?page_id=7) informieren oder das Handbuch konsultieren: http://dev.mysql.com/doc/workbench/en/ Außer diesem grafischen Tool enthält MySQL eine Reihe weiterer Kommandozeilen-Tools, darunter: a. mysql: Tool zur Server-Administration b. mysqldump: Backup-Tool c. mysqlcheck: Tool für die Wartung von Tabellen (Überprüfung, Reparatur, Analyse und Optimierung) Die Clientprogramme von MySQL sind in ihrem Funktionsumfang als sehr gut einzustufen, allerdings bietet das ältere Tool “MySQL Administrator” einen besseren Bedienkomfort. Da der Administrator aber auch problemlos mit dem MySQL Server 5.1 funktioniert, gibt es dafür keinen Punktabzug, sondern die volle Punktzahl. © it-novum GmbH 2010 49 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Backup und Wiederherstellung Backup und Wiederherstellung sind zwei Schlüsselbegriffe für jeden Datenbankadministrator. Da das Thema sehr komplex ist, wollen wir an dieser Stelle nur kurz auf die unterschiedlichen Methoden zur Datenbankensicherung in MySQL und die mitgelieferten Werkzeuge eingehen. Zur Sicherung einer MySQLDatenbank kann man das gerade erwähnte Hilfsprogramm mysqldump verwenden. Es erstellt ein logisches Backup, das die Daten in einer Form enthält, die MySQL interpretieren kann (DDL- und DML-Anweisungen). Eine weitere Methode ist die Benutzung von mysqlhotcopy, einem mitgelieferten Perl-Scrip. Es sperrt die Tabellen der zu sichernden DB (Lesezugriffe sind weiterhin möglich) und kopiert sie mittels Betriebssystembefehle an einen anderen physischen Ort. Der Begriff hotcopy ist in diesem Zusammenhang etwas irreführend, da er gewöhnlich dafür steht, dass der Server keine Ausfallzeit hat. Durch die Schreibsperre auf die Tabellen ist das de facto aber doch der Fall. Für eine punktgenaue Wiederherstellung ist allerdings auch das Sichern der Binärlogs zwingend erforderlich. Die mitgelieferten Backup-Tools liefern die nötigen Funktionalitäten für eine kontinuierliche oder eine punktuelle Sicherung. OnlineBackups (Hot Copies) sind allerdings schwer realisierbar, daher bekommt MySQL von uns nur acht Punkte. Fazit: Administration und Wartung Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Client- und Hilfsprogramme 50 10 500 2 Backup-Möglichkeiten 50 8 400 100 18 900 Summe Zukünftige Entwicklungen „Falcon“ hieß die Speicher-Engine, die seit längerem entwickelt wurde, um die zukünftige Standard-Engine von MySQL zu werden. Oracle hat die Entwicklung nach der Übernahme von MySQL jedoch eingestellt. Nun soll InnoDB den Platz der Standard-Engine einnehmen (Hersteller Innobase wurde ebenfalls von Oracle übernommen) und kontinuierlich verbessert werden. MyISAM soll allerdings weiterhin unterstützt werden. Ein weiterer Punkt auf der Entwicklungsagenda ist © it-novum GmbH 2010 50 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 die einfache Migration zwischen Oracle- und MySQL-Datenbanken, außerdem sollen Features, die bisher nur Oracle 11G besaß, teilweise Einzug in MySQL halten. © it-novum GmbH 2010 51 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 5.2 Evaluierung von PostgreSQL PostgreSQL ist ein objektrelationales DBS, dessen Entwicklung auf die University of California in Berkeley (UCB) zurückgeh. Hier wurde zwischen 1977 und 1985 ein relationales Datenbanksystem unter dem Namen Ingres entwickelt. Der Sourcecode dieses Projektes wurde von der Firma Relational Technologies (später INGRES Inc.) aufgekauft und weiterentwickelt für kommerzielle Zwecke. Zwischen 1986 und 1994 wurde ein weiteres Produkt aus den Erfahrungen mit Ingres entwickelt: Postgres (post steht für lateinisch nach, also nach Ingres). Dieses Produkt wurde ebenfalls von einer kommerziellen Firma aufgekauft: Zuerst von Illustra und dann von Informix, wo es teilweise in den Informix Universal Server integriert wurde. Die Geschichte des heutigen PostgreSQL beginnt 1994 mit der Erweiterung des Codes von Postgre um einen SQL-Interpreter und der Veröffentlichung als Postgres95. Zwei Jahre später (1996) wurde mit der Weiterführung der Versionsnummern aus dem Berkeley-Projekt der Name in PostgreSQL geändert. Die Objektrelationalität unterscheidet PostgreSQL von anderen Datenbanken wie MySQL. PostgreSQL besitzt Klassen, Vererbung und Überladung von Funktionen als objektrelationale Merkmale. Die Instanzen (reale Objekte einer Klasse) haben eine systemweit eindeutige Objekt-ID (OID). Beispiel: Eine Tabelle stellt eine Klasse dar und jede Spalte in ihr ist eine eigene Instanz. Durch das Vererbungskonzept können Kindtabellen erstellt werden, die die Eigenschaften der Muttertabelle erben, aber zusätzlich noch weitere Eigenschaften haben können. Die Überladung von Funktionen ermöglicht die Mehrfachdefinierung einer Funktion mit gleichem Namen. Das PostgreSQL kann zur Laufzeit anhand der übergebenen Parameter an diese Funktion erkennen, welche der Funktionen verwendet werden soll. Eine weitere Besonderheit von PostgreSQL ist das Rule-System. Rules werden vom Benutzer erstellt und an die angegebene Klasse (z.B. eine Tabelle) angehängt. Sie sind dann in der Lage, eingehende Queries umzuschreiben und die modifizierten Queries an den Ausführungsplaner zu senden – anders als andere Regeln wie Trigger oder Stored Procedures. Rules werden u.a. für Updateable Views und Tabellenpartitionierung eingesetzt. © it-novum GmbH 2010 52 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Allgemeine Kriterien Lizenz PostgreSQL steht unter der Berkeley Software Distribution-Lizenz (BSD), die kein Copyleft beinhaltet. Der Code kann also ohne die Beschränkung, ihn nach Veränderung wieder veröffentlichen zu müssen, verändert werden. Dadurch ist PostgreSQL für die Entwicklung kommerzieller Anwendungen interessant und erhält zehn Punkte. Referenzkunden Auf der Webseite von PostgreSQL kann man eine Auswahl von Kunden aus verschiedenen Branchen einsehen – darunter BASF, Cisco, Juniper Networks und Apple, aber auch einige US-amerikanische Behörden und Open Source-Projekte wie Debian und Sourceforge. Aus den verschiedenen Branchen der Kunden (und den teilweise auf dieser Seite verfügbaren Fallstudien) lässt sich entnehmen, dass sich PostgreSQL für praktisch alle Einsatzzwecke nutzen lässt. In manchen Bereichen ist PostgreSQL nicht so stark vertreten wie MySQL, gerade im stark wachsenden Bereich Web/Web 2.0. Aus diesem Grund erhält PostgreSQL acht Punkte. Support Hersteller-Support gibt es für PostgreSQL nicht, weil PostgreSQL ein reines Community-Projekt ist, hinter dem kein kommerzielles Unternehmen steht. Sofern kommerzieller Support gewünscht ist und nicht auf die Dienstleistungen dritter Unternehmen zurückgegriffen werden soll, bietet sich die Verwendung von Postgres Plus an. Das DBS wird von der Enterprise DB Corporation vertrieben und baut auf PostgreSQL auf, erweitert es allerdings um einige Features wie Qualitätstests, erweiterte Tuning-Optionen und Kompatibilität zu Oracle. Support durch die Community gibt es durch die Foren, Mailinglisten, UserGruppen und den IRC. Im deutschsprachigen Raum gibt es mehrere Foren, einen Überblick vermittelt http://www.postgresql.de/info.whtml#forum. Da die üblichen Supportkanäle allesamt vorhanden sind, die Aktivität der Community dort allerdings nicht ganz so hoch ist wie bei MySQL, erhält PostgreSQL für das Kriterium Support 8,5 Punkte. Dokumentation Das komplette Referenzhandbuch zu PostgreSQL ist auf Englisch verfügbar, sowohl in einer Online-Version als auch in einer pdf-Version (auch für Releases älter als 8.4): http://www.postgresql.org/docs/manuals/. Eine deutsche Ausgabe © it-novum GmbH 2010 53 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 ist erhältlich, allerdings nicht auf dem neuesten Stand (2003). Außerdem gibt es eine Dokumentation in Form eines Wikis, das User-Dokumentationen, FAQs und Ratgeber zu vielen Bereichen von PostgreSQL umfasst: http://wiki.postgresql.org/wiki/Main_Page. Das englische Referenzhandbuch behandelt alle vorstellbaren Themen rund um PostgreSQL (auch werden dort die jeweils neuen Funktionen gut erklärt), für das Fehlen einer aktuellen deutschen Referenz gibt es allerdings einen Punktabzug und somit nur neun Punkte. Produkt-Updates / Neue Versionen Ähnlich MySQL wird bei PostgreSQL eine dreiteilige Versionsnummer verwendet. Die erste Zahl ändert sich dabei sehr selten, mit ihr wird kenntlich gemacht, dass gravierende Neuerungen oder Änderungen stattgefunden haben. Dagegen steht die zweite Zahl (in Verbindung mit der ersten) für ein Major-Release. Diese werden in unregelmäßigen Abständen veröffentlicht, meistens ist von einem Zeitabstand von circa einem Jahr auszugehen. Diese Releases werden bis zu fünf Jahre nach ihrer Veröffentlichung durch Patches weiter aktualisiert und als Minor-Release (die dritte Zahl in der Versionsnummer) zur Verfügung gestellt. Nach Ablauf dieser Zeit (End of Lifetime), kann es allerdings weiterhin vorkommen, dass kritische Bugfixes in den Sourcecode integriert werden. Die Versionspolitik von PostgreSQL ist daher als anwenderfreundlich einzustufen. Eine komplette Übersicht über den Versionssupport ist im Wiki von PostgreSQL zu finden. Seit März 2008 gibt es sogenannte “Commit Fests”, die in einem Dreimonatsrhythmus stattfinden. Während eines solchen Commit Fest richtet sich der Fokus der Entwickler-Community nicht auf die Programmierung, sondern auf die Bewertung und Gewichtung neuer Patches. Für neue Funktionen gibt es eine Art “Warteschlange” (Queue). Ein Patch wird erst dann als solcher angenommen, bis alle Funktionen in das CVS von PostgreSQL gewandert sind (oder endgültig abgelehnt wurden). Auf diese Weise will man einerseits die Übersichtlichkeit wahren, auf der anderen Seite beschleunigt man so die Entwicklung von PostgreSQL. Aufgrund des sehr strukturierten Vorgehens und der regelmäßig stattfindenden Commit Fests bewerten wir PostgreSQL im Bereich Dokumentation mit insgesamt neun Punkten. © it-novum GmbH 2010 54 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Fazit: Allgemeine Kriterien Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Lizenz 15 10 150 2 Referenzkunden 15 8 120 3 Support 25 8,5 212,5 3.1 Hersteller-Support 3.2 Community-Support 3.2.1 Support-Kanäle 3.2.2 Qualität 0 25 12,5 12,5 0 8,5 9 8 0 212,5 112,5 100 4 Dokumentation 20 9 180 5 Produkt-Updates 25 9 225 100 46,5 887,5 Summe Systemanforderungen und Software-Anbindung Unterstützte Betriebssysteme PostgreSQL bringt Binärdistributionen für Linux, Mac OS, Solaris, Free BSD und Windows mit. Eine 64-Bit-Version ist bei PostgreSQL 8.4 nur für Linux erhältlich, die neue Version 9.0 enthält sie nun auch für Windows. Da dadurch 64-BitUnterstützung für alle wichtigen Betriebssysteme vorhanden ist, erhält PostgreSQL 10 Punkte. Beschränkungen des Datenbankensystems Hinsichtlich der Datenbankgröße gibt es bei PostgreSQL keine Beschränkung, eine Tabelle darf maximal 32 Terabyte groß sein. Eine Zeile darf 1,6 Terabyte nicht überschreiten, ein Feld nicht 1 Gigabyte. Die Zeilenanzahl sowie die Anzahl der Indizes pro Tabelle (hauptsächlich Quelltext) nicht limitiert, die maximale Spaltenanzahl richtet sich nach den verwendeten Datentypen (zwischen 250 und 1600 Spalten). Aufgrund der Tatsache, dass bei PostgreSQL die Limitierungen des Betriebssystems nicht so leicht zu umgehen sind wie bei MySQL, gibt es einen Punktabzug bei den Tabellen-Limits, sodass wir PostgreSQL in diesem Bereich mit 9,5 Punkte bewerten. Unicode-Support PostgreSQL unterstützt eine Vielzahl von Zeichensätzen, darunter auch den Unicode-Zeichensatz UTF-8. Zur Änderung der Lokalisierung ist es möglich, bei © it-novum GmbH 2010 55 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 der Initialisierung des Datenbank-Clusters (des Datenverzeichnisses) mit der Option “locale” Sprache und Land einzustellen. Ohne Angabe dieser Option wird die Regions- und Spracheinstellung des Betriebssystems übernommen. PostgreSQL erhält aufgrund der umfassenden Einstellungsmöglichkeiten zehn Punkte. Datentypen PostgreSQL unterstützt alle wichtigen Datentypen, darunter auch Sequenzen (Zähler, die tabellenunabhängig in festlegbaren Schritten vorwärts und rückwärts zählen) und zusammengesetzte Datentypen. Darüber hinaus kann man eigene Datentypen mit dem Befehl CREATE TYPE erstellen. Eine Besonderheit von PostgreSQL ist, dass eine Spalte auch als ein- oder mehrdimensionaler Arraytyp definiert werden kann, d.h. in einer Spalte lässt sich mehr als nur ein einzelner Wert speichern. Angesichts dieser vielfältigen Möglichkeiten bewerten wir PostgreSQL mit der vollen Punktzahl. XML-Unterstützung Mit dem XML-Datentyp hat man in PostgreSQL die Möglichkeit, komplette Dokumente oder nur Teile davon zu speichern und zu bearbeiten. Dabei werden die Eingaben auf eine korrekte XML-Syntax hin geprüft, ansonsten wird die Eingabe mit dem Hinweis auf eine inkorrekte Syntax abgelehnt. Außerdem kann man durch XPath-Definitionen in den Daten suchen. Die gefundenen Werte werden dann als Array ausgegeben. Des Weiteren lassen sich sowohl Tabellen und Queries als auch Cursors als XML-ausgeben. Insgesamt stufen wir den XMLSupport von PostgreSQL als solide ein und bewerten ihn mit acht Punkten. Schnittstellen Zur Anbindung von Java-Programmen unterstützt PostgreSQL den JDBCStandard. Downloadmöglichkeiten für aktuelle und ältere PostgreSQL-JDBCTreiber sowie einen Überblick der Versionskompatibilität einzelner Treiber gibt die Webseite http://jdbcpostgresql.org/download.html. Daneben wird der ODBCStandard unterstützt, den Treiber kann man auf http://www.postgresql.org/ftp/odbc/versions/ herunterladen. Darüber hinaus gibt es Schnittstellen für .Net, C, C++, PHP, Perl, TCL, ECPG, Python und Ruby. Da PostgreSQL Anbindemöglichkeiten für nahezu alle relevanten Programmiersprachen besitzt, bekommt das DBS von uns zehn Punkte. © it-novum GmbH 2010 56 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Fazit: Systemanforderungen und Software-Anbindung Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Unterstützte Betriebssysteme/ Architekturen 15 8,67 130 5 10 10 10 50 100 2 Beschränkungen 20 9,5 190 2.1 pro Datenbank 2.2 pro Tabelle 2.3 pro Spalte 2.4 pro Index 5 5 5 5 10 8 10 10 50 40 50 50 Unicode-Support Datentypen XML-Support Schnittstellen 15 25 15 10 10 10 8 10 150 250 120 100 100 56,17 940 1.1 32-Bit 1.2 64-Bit 3 4 5 6 Summe Datenbankobjekte Schemata PostgreSQL unterstützt im Gegensatz zu MySQL Schemata: Innerhalb des Datenbank-Clusters kann es mehrere Datenbanken geben, die wiederum aus Schemata bestehen. In verschiedenen Schemata dürfen Objekte gleichen Namens existieren (beispielsweise zwei gleichnamige Tabellen). Der große Unterschied zwischen Datenbanken und Schemata ist, dass ein Client sich jeweils nur mit der Datenbank verbinden kann, die er in der Verbindungsanfrage angibt, dort dann aber Zugriff auf alle Objekte des Schemas hat (entsprechende Rechte vorausgesetzt). Die Verwendung von Schemata ermöglicht eine logischere Strukturierung der Datenbankobjekte. Außerdem lassen sich so Namenskollisionen verschiedener Objekte und Funktionen vermeiden, etwa wenn Anwendungen von Drittanbietern benutzt werden. Greift man häufig auf Schemata zurück und soll nicht jedes Mal der Schemaname vor den Tabellennamen geschrieben werden, hilft der Parameter search_path. Durch ihn lassen sich ein oder mehrere Schemata angeben, die der Reihe nach durchsucht werden. Das erste Schema in dieser Liste ist das aktuelle Schema, das für CREATE TABLES verwendet wird, sofern man kein Schema gibt. Der aktuelle Schema-Suchpfad lässt sich mit folgender Anweisung ermitteln: © it-novum GmbH 2010 57 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 SHOW search_path ; Um diesen Pfad zu ändern, wird folgende Anweisung verwendet: SET search_path TO ( schemaname1 , schemaname2 , usw . ) Wenn eine Tabelle gleichen Namens in mehreren der Schemata enthalten ist, wird die Tabelle desjenigen Schemas verwendet, in dem sie zuerst gefunden wird. Eine dauerhafte Einstellung des Schema-Suchpfades lässt sich in der Konfigurationsdatei postgresql.conf vornehmen. Der Suchpfad funktioniert in gleicher Weise auch für Datentypnamen, Funktionsnamen und Operatornamen. Aufgrund der Unterstützung von Schemata vergeben wir zehn Punkte. Views Views lassen sich in PostgreSQL mit den gleichen Anweisungen wie in MySQL erzeugen und löschen. PostgreSQL unterstützt ebenfalls geschachtelte Views, d.h. Sichten, die wiederum auf anderen Sichten basieren. Updateable Views können erzeugt werden, allerdings nur in Verbindung mit Rules, was die Definition einer View deutlich erschwert. Materialized Views an sich unterstützt PostgreSQL nicht. Sie lassen sich jedoch erstellen, allerdings bedeutet das etwas Aufwand. Unter Verwendung der prozeduralen Abfragesprache PL/pgSQL gibt es mit Hilfe von Triggern verschiedene Implementierungstechniken, die aber ein hohes Maß an technischem Verständnis und Detailwissen über die zugrunde liegenden Daten verlangen. Funktionierende Implementierungen lassen sich beispielsweise auf der Webseite von Jonathan Gardner (http://tech.jonathangardner.net/) nachlesen. PostgreSQL erhält in den Unterkriterien “Updateable Views” und “Materialized Views” Punktabzüge und bekommt daher insgesamt 6,5 Punkte. Stored Procedures / Stored Functions Stored Procedures werden unterstützt und vorzugsweise in PL/pgSQL geschrieben, allerdings sind auch Umsetzungen in anderen prozeduralen Sprachen möglich. Man erstellt sie in PostgreSQL durch den Befehl CREATE FUNCTION, daher der Begriff „Stored Functions“. Bis auf syntaktische Unterschiede aufgrund der prozeduralen Sprache sind sie genauso zu erstellen wie die Stored Procedures von MySQL. Wir bewerten PostgreSQL daher mit der vollen Punktzahl. © it-novum GmbH 2010 58 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Trigger Trigger werden unterstützt und können in den meisten prozeduralen Sprachen (z.B. PL/pgSQL, PL/Perl und PL/Python) sowie in C geschrieben werden. Um einen Trigger zu erstellen, muss vorher eine Trigger-Funktion mit CREATE FUNCTION erstellt werden, auf die das Trigger-Objekt zugreifen kann. Aufgrund der etwas komplizierteren Vorgehensweise als bei MySQL erhält PostgreSQL nur neun Punkte. Fazit: Datenbankobjekte Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Schemata 2 Views 2.1 nichtveränderbar 2.2 updateable 2.3 materialized 3 Stored Procedures / Functions 4 Trigger Summe 10 40 10 6,5 100 260 10 10 20 10 8 4 100 80 80 25 25 10 9 250 225 100 35,5 835 Unterstützung des SQL/OLAP-Standards Erweiterung des Group-By-Operators PostgreSQL unterstützt zum gegenwärtigen Zeitpunkt keine Erweiterungen durch ROLLUP, CUBE oder GROUPING SETS und erhält deswegen null Punkte. Fensterfunktionen Seit Version 8.4 unterstützt PostgreSQL Fensterfunktionen (Window Functions). Die Syntax ist konform zum SQL/OLAP-Standard. Windowing Functions arbeiten auf einer Art virtuellen Tabelle, die durch die FROM-Klausel bestimmt wird. Sofern in dieser auch noch WHERE-, GROUP BY- und HAVING- Klauseln angegeben wurden, reduziert sich die Tupelmenge, die eine Fensterfunktion betrachtet. Eine Abfrage kann somit zwar mehrere Fensterfunktionen enthalten, die die Daten auf verschiedene Art “slicen” (definiert über verschiedene OVERKlauseln), aber sie alle arbeiten auf dem gleichen Datenset. Zu beachten ist, dass der Window Frame durch die ORDER BY-Klausel mitbestimmt werden kann – fehlt sie, besteht der Standard-Window-Frame aus allen Zeilen der Partition. Die Implementierung der © it-novum GmbH 2010 59 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Fensterfunktionen scheint an dieser Stelle noch nicht ganz abgeschlossen zu sein. Im Vergleich zum SQL-Standard (und zu kommerziellen Systemen wie Oracle DB) ist es nämlich nicht möglich, Befehle wie BETWEEN x PRECEDING AND y FOLLOWING anzugeben (sogenannte “sliding windows”, z.B. für laufende Durchschnittsberechnungen). Dafür ziehen wir Punkte ab, sodass PostgreSQL im Bereich Fensterfunktionen auf 8,33 Punkte kommt. Olap-Funktionen Außer den bekannten Aggregationsfunktionen integriert PostgreSQL eine Reihe spezieller (Fenster-)Funktionen, die sich für analytische Zwecke eignen. Dazu zählen die behandelten Rangfunktionen (rank, dense_rank, percent_rank, cume_dist, row_number). Eine komplette Übersicht der enthaltenen Funktionen gibt es im PostgreSQL-Referenzhandbuch. PostgreSQL hat inzwischen eine ganze Reihe von statistischen AggregatFunktionen gemäß dem SQL-Standard umgesetzt. Neben den bereits bei MySQL genannten Funktionen (z.B. für die Varianz) sind das u.a. Funktionen zur Berechnung der Kovarianz (covar_pop, covar_samp), des Korrelations- Koeffizienten (corr) und die Regressionsanalyse. Angesichts der kompletten Abdeckung von Rang- und Statistikfunktionen erhält PostgreSQL zehn Punkte. Common Table Expressions / Rekursive Queries Seit Version 8.4 sind Common Table Expressions in PostgreSQL integriert, dabei sind sowohl nichtrekursive als auch rekursive CTE möglich. Bei der Implementierung wurden die Vorgaben aus dem SQL-Standard eingehalten, sodass wir die volle Punktzahl vergeben. © it-novum GmbH 2010 60 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Fazit: Unterstützung des SQL/OLAP-Standards, weitere OLAP-Funktionalitäten Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Erweiterung des Group-ByOperators 1.1 Group By Rollup 1.2 Group By Cube 1.3 Group By Grouping Sets 2 Fensterfunktionen 2.1 Partitioning 2.2 Ordering 2.3 Framing 3 OLAP-Funktionen 3.1 Rangfunktionen 3.2 Statistische Funktionen 4 Common Table Expressions Summe 25 0 0 8,33 8,33 8,33 0 0 0 0 0 0 30 8,33 250 10 10 10 10 10 5 100 100 50 20 10 200 10 10 10 10 100 100 25 10 250 100 28,33 700 Performance Skalierbarkeit PostgreSQL unterstützt die asynchrone Replikation. Das bekannteste System für asynchrone Replikation ist Slony-I, das ebenso wie PostgreSQL unter der liberalen BSD-Lizenz steht. Es arbeitet im Master/Slave-Verfahren, wobei der Master (bei PostgreSQL “Origin” genannt) der einzige Knoten des Slony-I-Clusters ist, der Änderungen an Datenbankobjekten vornehmen kann. Die Tabellen und Sequenzen werden in sogenannte “Sets” zusammengefasst, die die Slaves (“Subscriber” genannt) abonnieren können. Durch dieses System weiß der Master, an welche Slaves er bei Änderungen welche Sets verteilen muss. Realisiert wird die Replikation über slon-Prozesse, Trigger erfassen im Master die Änderungen. Diese Methode bietet den Vorteil, dass nur genau die Daten erfasst werden, die in die Datenbank geschrieben werden. Andererseits vergrößert sich dadurch die I/O-Last auf dem Master, da die Daten vom Trigger noch einmal zwischengespeichert werden müssen, bevor sie der slon-Prozess überträgt. Slony-I besitzt keine eingebaute Überwachung, dennoch ist eine FailoverFunktionalität möglich durch die Verbindung zu einem Heartbeat-Programm (z.B. das Linux High Availability Project http://linux-ha.org/wiki/Heartbeat). © it-novum GmbH 2010 61 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Außer Slony-I existieren noch weitere Möglichkeiten der Replikation. Eine sehr vielseitige Methode ist pgpool-II. Es handelt sich um eine Middleware zum Verbinden von Programmen zu einer PostgreSQL-Datenbank. Der Vorteil von pgpool-II ist, dass die Programme nicht jedes Mal eine Verbindungsanfrage an das DBS schicken müssen, sondern stattdessen mit pgpool-II kommunizieren, das den Programmen eine von mehreren bereits vorher (bei Programmstart von pgpool-II) geöffneten Verbindungen zuweist. Sobald die Anwendung beendet wird, kommt die weiterhin offene Verbindung zurück in den Connection Pool. Außerdem unterstützt pgpool-II die synchrone Replikation auf zwei oder mehr Server – allerdings auf SQL-Zeilenebene. Dadurch kann es nötig sein, bei einigen Programmen Anpassungen vorzunehmen, da die Ausführungsergebnisse sonst auf den verschiedenen DB-Instanzen unterschiedlich sein können. Eine weitere Anwendungsmöglichkeit ist das Zusammenspiel von pgpool-II und einer bestehenden Replikationslösung wie Slony-I. In dieser Kombination ist es möglich, dass lesende Abfragen zum Zwecke des Load Balancing an verschiedene Knoten im Cluster übertragen werden. In diesem Modus ist pgpool-II außerdem in der Lage, einen einzelnen Query bzw. die betroffenen Datensätze in mehrere Teile aufzusplitten, die dann gleichzeitig von mehreren Servern ausgeführt werden (Parallel Query Processing). Die Tatsache, dass PostgreSQL bei der Replikation auf Drittprogramme verweist, führt zu einem Punktabzug. Außerdem ist die synchrone Replikation u.U. nur mit erheblichem Aufwand möglich. PostgreSQL erhält im Unterkriterium “Replikation” daher nur sechs Punkte. PostgreSQL unterstützt die Partitionierung von Tabellen. Hier kommt wieder die Objektrelationalität von PostgreSQL zum Tragen, da sie das Anlegen vererbter Tabellen ermöglicht, die sich für eine Partitionierung nutzen lassen. Dabei wird zuerst die Basistabelle erstellt: create table sales (id int primary key not null , product_name text not null , sales_date timestamp not null default localtimestamp); Nun werden die vererbten (partitionierten) Tabellen angelegt: CREATE TABLE sales_2010_january ( CHECK (sales_date BETWEEN timestamp ’2010−01−01 ’ AND timestamp ’2010−01−31 ’ ) ) INHERITS( sales ); CREATE TABLE sales_2010_february ( CHECK (sales_date BETWEEN timestamp ’2010−02−01 ’ AND timestamp ’2010−02−29 ’ ) ) INHERITS( sales ); CREATE TABLE sales_2010_march ( CHECK (sales_date © it-novum GmbH 2010 62 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 BETWEEN timestamp ’2010−03−01 ’ AND timestamp ’2010−03−31 ’ ) ) INHERITS( sales ); Durch die CHECK-Bedingung wird sichergestellt, dass nur Daten aus dem jeweils angegebenen Monat in den Tabellen stehen. Führt man ein EXPLAIN SELECT auf die Basistabelle “sales” aus, werden alle vererbten Tabellen ebenfalls durchsucht, auch wenn z.B. nur ein Eintrag aus einer der vererbten Tabellen gesucht wird. Das ist in vielen Fällen zeitaufwändig und verfehlt den eigentlichen Zweck des Partitionierens. Ändern kann man dieses Verhalten mit dem Parameter constraint_exclusion. Er sorgt dafür, dass der Abfrageplaner in der Lage ist, nicht erfüllte Constraints auszuklammern. Standardmäßig ist der Befehl deaktiviert, er lässt sich mit dem Befehl SET CONSTRAINT_EXCLUSION TO ON aktivieren. Danach berücksichtigt PostgreSQL nur noch die Tabellen vom Abfrageplaner, die es aufgrund der Anfragebedingung benötigt. Von sich aus kann PostgreSQL Einträge von der Basistabelle nicht auf die vererbten Tabellen umlenken. Es gibt zwei Verfahren, diese Problematik zu lösen: 1. Rules: Mit ihnen kann man alle Inserts auf die Basistabelle direkt auf die vererbten Tabellen umleiten. Auf diese Art lassen sich auch Rules zum Ändern und Löschen von Datensätzen erstellen. 2. Trigger: Die etwas komplexere Variante ist die Erstellung von Stored Procedures, die mit Hilfe von Triggern ausgelöst werden. Beide Varianten haben Vor-und Nachteile. So muss man bei der Verwendung von Rules nicht erst einen Trigger aufrufen, was weniger Aufwand für das DBS bedeutet. Allerdings müssen bei diesem Verfahren bereits alle Tabellen und Rules bestehen. Bei Triggern kann man hingegen festlegen, dass fehlende Tabellen während der Abfrage erstellt werden. Zudem muss beim Löschen einer vererbten Tabelle die entsprechende Rule in der Basistabelle auch gelöscht werden, was bei Triggern nicht der Fall ist. Die recht komplizierte Vorgehensweise zur Erstellung von partitionierten Tabellen veranlasst uns dazu, PostgreSQL nur sieben Punkte zu verleihen. Insgesamt kommt es damit auf 6,5 Punkte beim Kriterium Skalierbarkeit. Indizes Derzeit sind vier verschiedene Indextypen in PostgreSQL implementiert: © it-novum GmbH 2010 63 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich • B-Tree-Index • Hash-Index • Generalized Inverted Index (GIN) • Generalized Search Tree (GiST) Februar 2011 Der B-Tree-Index ist der Standard-Index in PostgreSQL. Er wird verwendet, wenn kein anderer Indextyp explizit angegeben wird. B-Tree kann Anfragen bearbeiten, die die Operatoren <, <=, =, >= und > beinhalten, sowie darauf aufbauende Konstrukte wie BETWEEN und IN. Außerdem kann man mit ihm Anfragen mit IS NULL bearbeiten. Der Hash-Index verwendet eine Hash-Tabelle und kann nur Anfragen mit dem Operator = bearbeiten. Er bietet, soweit uns bekannt ist, keine Geschwindigkeitsvorteile gegenüber dem B-Tree-Index und sollte nur in Ausnahmefällen verwendet werden, u.a. weil er noch nicht so weit in PostgreSQL implementiert ist wie der B-Tree-Index. Der Generalized Inverted Index kehrt (invertiert) das Indexprinzip um. Er enthält eine Liste von Wertepaaren, die wiederum aus einem Schlüssel und einer Liste von mehreren Datensätzen bestehen, in denen der Schlüssel enthalten ist. Es lassen sich auch Werte mit mehreren Schlüsseln, z.B. Arrays, indizieren. Die Einsatzmöglichkeiten des Generalized Inverted Index sind vielfältig, oft wird er für die Volltextindizierung eingesetzt. Der Generalized Search Tree ist weniger ein eigener Indextyp, als vielmehr ein Tool zur Erstellung individueller Indextypen (z.B. in C). Er wird meist verwendet, wenn ein spezielles Modul das erforderlich macht (d.h. die anderen Indextypen nicht verwendet werden können). Auf dem GiST basiert die Volltextsuche in PostgreSQL (seit Version 8.3). Wie auch MySQL erlaubt PostgreSQL, einen Index über mehrere Spalten aufzubauen, allerdings nur in B-Tree und GiST-Indizes. Außerdem können partielle Indizes (Indizes über Teile einer Tabelle) angelegt werden. Das verringert den Platzbedarf des Index und macht ihn leistungsfähiger für Abfragen. Einen partiellen Index definiert man durch Angabe der WHERE-Klausel: CREATE INDEX idx_customer_key ON dim_customer(customer_key) WHERE customer_key < 1000; Der Index wird nur vom Ausführungsplaner benutzt, wenn die WHEREBedingung erfüllt ist. Folgende Abfrage würde dazu führen, dass er nicht benutzt wird: SELECT ∗ from dim_customer where customer_key = 1234; © it-novum GmbH 2010 64 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Die Erstellung von Bitmap-Indizes als solche wird von PostgreSQL nicht unterstützt. Allerdings verwendet PostgreSQL intern Bitmaps, um bei aufwendigen Anfragen mehrere Indizes nutzen zu können, die Ergebnisse als Bitmap zwischenzuspeichern und schließlich zu kombinieren (genannt Index Bitmap Scan). Das Anlegen von Indizes auf großen Tabellen kann sehr lange dauern (manchmal sogar Stunden oder Tage). Während dieser Zeit wird ein Schreib-Lock auf die zu indizierende Tabelle gelegt. Die Besonderheit bei PostgreSQL ist, dass man Indizes im laufenden Betrieb erzeugen kann, d.h. währenddessen können weitere Schreibvorgänge auf die Tabelle erfolgen. Der Befehl zum Erstellen eines Index in diesem Modus lautet CREATE INDEX CONCURRENTLY. Bei diesem Verfahren muss die Tabelle zweimal gelesen werden, deshalb dauert die Erstellung des Index in diesem Modus mindestens doppelt so lange wie das Anlegen. Alle Indizes eines Schemas oder einer Tabelle lassen sich in der (System-)View pg_indexes durch gewöhnliche Select-Anfragen anzeigen. Ob ein gesetzter Index tatsächlich in einer bestimmten Anfrage benutzt wird, lässt sich aus dem Ausführungsplan ersehen. Zu diesem Zweck stellt man der Anweisung noch das Schlüsselwort EXPLAIN voran (wie auch in MySQL). Sobald ein Index benutzt wird, zeigt das der Ausführungsplan mit “Index Scan using ’indexname’...” an. Zusätzlich lassen sich mit EXPLAIN ANALYZE auch noch die Ausführungszeiten jedes einzelnen Schrittes im Plan anzeigen. Da PostgreSQL keine Bitmap-Index-Erstellung unterstützt, vergeben wir hier nur fünf Punkte. Für das Kriterium Indizes erhält das DBS daher insgesamt acht Punkte. Weitere Performance-Eigenschaften PostgreSQL nutzt Multi-CPU-Systeme so, dass es für jede Client-Verbindung einen eigenen Prozess auf dem Server anlegt und dadurch die Connections auf verschiedene CPUs verteilen kann. Ab diesem Punkt kommunizieren der Client und der PG-Server nur über diesen Prozess miteinander, d.h. ohne Eingreifen des ursprünglichen -Prozesses. Da auch hier (wie bei MySQL) der Grad der Multi-CPUNutzung vom Einzelfall abhängig ist, erhält PostgreSQL acht Punkte. Multi-Threading unterstützt das DBS hingegen nicht, jede Verbindung zur Datenbank kann nur eine CPU gleichzeitig nutzen (0 Punkte). Auch Parallel Query Processing unterstützt PostgreSQL nicht – und erhält daher null Punkte. Erkenntnisse aus der Performance-Messung PostgreSQL profitiert von den gesetzten Indizes. Auf Basis einer Kostenrechnung entscheidet sein Abfrageoptimierer, welche Alternativen die “günstigsten” sind. © it-novum GmbH 2010 65 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Diese werden dann ausgewählt. Mithilfe des Befehls EXPLAIN ANALYZE lassen sich in PostgreSQL sowohl die einzelnen Schritte als auch deren Ausführungszeiten nachvollziehen. Die folgende Grafik zeigt den Ausführungsplan für das Query Q1: Abbildung: Ausführungsplan für das Query Q1 Fazit: Performance Kriterium Gewichtung Erfüllungsgrad Nutzwert 40 6,5 260 20 10 10 20 6 4 8 7 120 40 80 140 1 Skalierbarkeit 1.1 Replikation 1.1.1 a) synchrone 1.2.1 b) asynchrone 1.2 Partitionierung 2 Indizes 3 4 5 6 25 8 200 2.1 gewöhnliche Indizes 2.2 Bitmapindizes 2.3 Volltextindizes 10 10 5 10 5 10 100 50 50 SMP-Support Multithreading Parallel Query Processing Performance-Messung 15 10 10 0 8 0 0 0 120 0 0 0 100 22,5 580 Summe © it-novum GmbH 2010 66 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Datenintegrität und -sicherheit Transaktionen PostgreSQL unterstützt Transaktionen. Bis auf wenige Ausnahmen (z.B. das erwähnte nebenläufige Indizieren) werden alle Aktionen innerhalb einer Transaktion ausgeführt. Sofern ein Nutzer die Transaktion nicht explizit durch START TRANSACTION oder BEGIN startet, setzt PostgreSQL automatisch eine Transaktion um jede einzelne Anweisung (sog. Autocommit). Genau bedeutet das, dass PostgreSQL zuerst BEGIN aufgeruft, danach die Anweisung des Nutzers ausführt und schließlich ein COMMIT hinterherschickt. PostgreSQL kennt alle vier Transaktionslevels des SQL-Standards, verwendet intern aber nur READ COMMITTED und SERIALIZABLE. Die Voreinstellung des Isolationslevel ist READ COMMITTED. Wenn ein Nutzer READ UNCOMMITTED angibt, wird READ COMMITTED verwendet, wenn er REPEATABLE READ wählt, wird stattdessen SERIALIZABLE verwendet. Ebenso wie MySQL unterstützt PostgreSQL Savepoints. PostgreSQL erhält einen leichten Punktabzug bei den Isolationslevels und dadurch 9,71 Punkte in diesem Kriterium. Locking und Nebenläufigkeit Wie MySQL unterstützt PostgreSQL die Multiversion Concurrency Control (MVCC), damit Lesezugriffe schreibende Transaktionen nicht blockieren und umgekehrt. Modifizierte Zeilenversionen werden in PostgreSQL nicht überschrieben, sondern die modifizierte Version wird an einer anderen Stelle in der Tabelle, genannt Heap, abgespeichert. Die ältere Version wird als ungültig markiert und mit der aktuellen verkettet. Da dieses Vorgehen zu einer Fragmentierung des Heaps führt, sollte der Heap gelegentlich gewartet werden. Dazu verwendet man den Wartungsbefehl VACUUM. Sofern MVCC innerhalb einer Anwendung nicht angewendet werden kann (oder nicht soll), können Locks auf Tabellen-und Zeilenebene benutzt werden. Dabei ist zu beachten, dass in PostgreSQL einmal gesetzte Locks bis zum Ende der Transaktion bleiben und es keine Möglichkeit gibt, sie vorher aufzuheben. Derzeit gibt es acht Lock-Level, die den Grad der Sperre definieren. Sie reichen von einfachen Lesesperren (während eine Transaktion die Daten liest, dürfen sie nicht gelöscht werden) bis zur vollständigen Sperre gegen jeglichen Zugriff. Teilweise blockieren sich diese Locks gegenseitig, weshalb man auf allzu häufiges Locking verzichten sollte. Darüber hinaus sind in PostgreSQL sogenannte Advisory Locks implementiert. Sie helfen dabei, das Zusammenspiel verschiedener Anwendungen zu koordinieren © it-novum GmbH 2010 67 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 und werden über Transaktionen hinweg bis zum Verbindungsende gehalten. Für das Kriterium “Locking und Nebenläufigkeit” erhält PostgreSQL insgesamt 9,5 Punkte. Benutzerrollen / Berechtigungskonzepte PostgreSQL verfügt über ein Rollenkonzept, das Benutzer und Gruppen vereinheitlicht. Eine Rolle kann Zugriffsrechte besitzen, aber auch wiederum Mitglied in einer anderen Rolle sein. Dadurch lassen sich sehr komplexe Verschachtelungen innerhalb von Rollen realisieren. Es wird dabei zwischen Gruppenrollen und Loginrollen unterschieden: Eine Gruppenrolle hat keine Berechtigung, sich im DBS anzumelden, eine Loginrolle dagegen schon. Loginrollen werden durch das Attribut LOGIN bei der Erstellung der Rolle definiert. Neben diesem Attribut gibt es noch eine Reihe weiterer, darunter CREATEDB: Recht, eine DB erstellen zu dürfen CREATEROLE: Recht, andere Rollen anzulegen SUPERUSER: umgeht sämtliche Zugriffsbeschränkungen im DBS, kann Befehle ausführen, die sonst niemand ausführen darf Eine wichtige Funktion hat die Konfigurationsdatei pg_hba.con. Sie legt fest, welcher Benutzer sich zu welcher DB verbinden darf. Außerdem wird hier die Authentifizierungsmethode eingestellt (z.B. per MD5, LDAP oder Zertifikat). Die Vergabe von Privilegien an Benutzer für DB-Objekte mittels GRANT hält sich an die bekannten Standards. Zudem kann man seit Version 8.4 nicht nur den Zugriff auf eine gesamte Tabelle gestatten, sondern auch auf einzelne Spalten mit speziellen Rechten. Dabei haben die Tabellenrechte immer Vorrang. Erst wenn kein Tabellenrecht existiert, wird geprüft, ob ein Spaltenrecht vorhanden ist. Aufgrund der kompletten und verständlichen Umsetzung des Rollenkonzepts erhält PostgreSQL die volle Punktzahl. © it-novum GmbH 2010 68 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Fazit: Datenintegrität und -sicherheit Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Skalierbarkeit 1.1 Replikation 1.2 Partitionierung 2 Indizes 2.1 gewöhnliche Indizes 2.2 Bitmapindizes 2.3 Volltextindizes 3 SMP-Support Summe 35 9,71 340 25 10 10 9 250 90 40 9,5 380 10 10 20 10 10 9 100 100 180 25 10 250 100 29,21 970 graphisches Tool Administration / Wartung Client-und Hilfsprogramme PostgreSQL bietet mit pgAdmin ein zur Datenbankadministration, das unter der GPL-Lizenz steht und für eine Vielzahl an Betriebssystemen verfügbar ist. Es verfügt im Gegensatz zu MySQL über Popup-Meldungen, beispielsweise wenn empfohlen wird, den Wartungsbefehl VACUUM auszuführen. Abbildung: Der Hinweis-Wizard “pgAdmin Guru” mit einem Hinweis auf eine empfohlene Datenbankwartung © it-novum GmbH 2010 69 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Außerdem enthält PostgreSQL das Kommandozeilen-Tool psql, das SQL-Befehle entweder direkt oder per Datei ausführen kann und z.B. das Schreiben von Skripten vereinfacht. Des Weiteren unterstützt psql Features wie die TabulatorKomplettierung von SQL-Syntax und Objektnamen. Für die Administration im Browser eignet sich das Tool phpPgAdmin, das auf dem sehr beliebten phpMyAdmin für MySQL basiert. Die Client- und Hilfsprogramme bieten alle wichtigen Funktionalitäten und einen guten Bedienkomfort, daher erhält PostgeSQL auch für sie die volle Punktzahl. Backup-Möglichkeiten Zur regelmäßigen Sicherung der Datenbanken enthält PostgreSQL zwei Programme: pg_dump und pg_dumpall. Ersteres exportiert eine einzelne DB (oder Teile davon) im SQL-Format, letzteres den gesamten Datenbankcluster (d.h. alle darin enthaltenen DB). Ist eine Migration der DB auf eine neuere PostgreSQLVersion geplant, muss die Sicherung mit Hilfe des pg_dump oder pg_dumpall Programms der neueren Version erfolgen, denn nur sie kennt alle Änderungen der älteren Version und kann die Daten kompatibel zur neuen Version in einen Dump schreiben. PostgreSQL enthält auch eine Möglichkeit für das Online-Backup (teilweise auch Hot Copy genannt), bei der man die Datenbank für das Backup nicht herunterfahren muss. Allerdings muss bei der Wiederherstellung die gleiche Software (PG-Version und Betriebssystem) verwendet werden wie bei dem Backup. Die Konfiguration des Online-Backups wird in der Konfigurationsdatei postgresql.conf durchgeführt – allerdings sind noch mehr Schritte notwendig, um ein funktionierendes Online-Backup zu erstellen. Aufgrund dieser Einschränkungen erhält PostgreSQL in diesem Kriterium sieben Punkte. Fazit: Administration und Wartung Kriterium Gewichtung Erfüllungsgrad Nutzwert 1 Client- und Hilfsprogramme 2 Backup-Möglichkeiten Summe © it-novum GmbH 2010 70 50 50 10 7 500 350 100 17 850 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Zukünftige Entwicklungen Das letzte große Release von PostgreSQL, Version 9.0, wurde am 20. September 2010 veröffentlicht. Es enthält eine Reihe neuer Funktionen, unter anderem: • Binärer Replikationsmechanismus mit Streaming Replication und Hot Standby (das könnte den Einsatz von Zusatzprogrammen wie Slony-I unnötig machen) • Spaltenbasierte und aufrufbedingte Trigger • Erweiterte Unterstützung für Stored Procedures • Das Wartungskommando VACUUM wurde grundlegend geändert, um eine bessere Performance bei der Bereinigung von Tabellen zu erreichen • © it-novum GmbH 2010 64-Bit Windows-Unterstützung 71 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 6. MySQL und PostgreSQL im direkten Vergleich Anhand der bereits anfangs vorgestellten Kriterien möchten wir am Ende einen abschließenden Vergleich von MySQL und PostgreSQL vornehmen. Ziel ist es, sowohl die Gemeinsamkeiten als auch die Vor-und Nachteile der beiden Datenbanken aufzuzeigen. Beginnen wir beim Grundlegenden, der Lizenz: Die von MySQL verwendete GPL schränkt wegen des Copylefts kommerzielle Entwicklungen ein – hier bietet die von PostgreSQL verwendete BSD einen klaren Vorteil. Was die Community betrifft, so ist die von MySQL sehr groß und bietet hilfreiche Unterstützung. Bei PostgreSQL ist ebenfalls eine große Community vorhanden, sodass man auch hier mit Hilfestellungen bei Problemfällen rechnen kann. Die Dokumentation von MySQL lässt ebenso wie die von PostgreSQL kaum Wünsche offen, die Referenzhandbücher behandeln ausführlich alle relevanten Themen. Allerdings gibt es das Handbuch nur bei MySQL auch in einer aktuellen deutschen Fassung. A) Allgemeine Kriterien MySQL PostgreSQL Erfüllungs- Nutzwert Erfüllungs- Nutzwert grad Gewichtung grad Kriterium 1 Lizenz 15 7 105 10 150 2 Referenzkunden 15 10 150 8 120 3 Support 25 9 225 8,5 212,5 0 25 12,5 12,5 0 9 9 9 0 225 112,5 112,5 0 8,5 9 8 0 212,5 112,5 100 4 Dokumentation 20 10 200 9 180 5 Produkt-Updates 25 7 175 9 225 3.1 Hersteller-Support 3.2 Community-Support 3.2.1 Support-Kanäle 3.2.2 Qualität Summe 100 855 887,5 Die Systemanforderungen von MySQL und PostgreSQL sind ähnlich gering. In der Standardkonfiguration sind sie darauf ausgelegt, auch auf Rechnern mit wenig Leistung annehmbare Ergebnisse zu liefern. Für eine gute Performance, gerade im analytischen Bereich mit mehreren Benutzern, ist selbstverständlich eine gute Hardware-Ausstattung Pflicht. Was die Geschwindigkeit der Weiterentwicklung anbelangt, hat PostgreSQL durch die Einführung der beschriebenen Commit Fests © it-novum GmbH 2010 72 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 im Moment die Nase vorn. Bei den Betriebssystemen ist es MySQL, obwohl PostgreSQL durch die Unterstützung von Windows 64-Bit in der neuen Version 9.0 aufholen konnte. Hinsichtlich der Datentypen nehmen sich beide Systeme nicht viel. PostgreSQL bietet jedoch mehr Flexibilität durch die Möglichkeit, eigene Datentypen zu erstellen. Auch bei der XML-Unterstützung liegt PostgreSQL im Moment vorn, allerdings sind hier die Implementierungen für beide Systeme noch nicht abgeschlossen, sodass sich das mit den nächsten Versionen bereits ändern kann. Für die Anwendungsanbindung liefern beide Programme alle notwendigen Programmierschnittstellen. B) Systemanforderungen und Softwareanbindung MySQL PostgreSQL Erfüllungs- Nutzwert Gewichtung grad Kriterium 1 Unterstützte Betriebssysteme/ Architekturen Erfüllungs- Nutzwert grad 15 10 150 8,67 130 5 10 10 10 50 100 10 10 50 100 2 Beschränkungen 20 9,75 195 9,5 190 2.1 pro Datenbank 2.2 pro Tabelle 2.3 pro Spalte 2.4 pro Index 5 5 5 5 10 10 10 9 50 50 50 45 10 8 10 10 50 40 50 50 3 Unicode-Support 15 10 150 10 150 4 Datentypen 25 9 225 10 250 5 XML-Support 15 6 90 8 120 6 Schnittstellen 10 10 100 10 100 1.1 32-Bit 1.2 64-Bit Summe 100 910 940 Im Bereich der Datenbankobjekte zeigt sich ein gemischtes Bild. MySQL unterstützt zwar keine Schemata, inwieweit das aber für die Praxis von Relevanz ist, sei dahingestellt. Views unterstützen beide Systeme, die Erstellung von Updateable Views ist in PostgreSQL aber schwieriger als in MySQL. Über recht aufwendige Wege können in PostgreSQL auch Materialized Views erstellt werden, MySQL erlaubt hingegen nur eine rudimentäre Simulation durch Update-Skripte. Nicht nur in diesem Punkt zeigt sich, dass die große Flexibilität von PostgreSQL © it-novum GmbH 2010 73 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 oft durch zusätzlichen Aufwand erkauft werden muss. Bei Stored Procedures und Triggern sind keine großen Unterschiede zwischen MySQL und PostgreSQL auszumachen. C) Datenbankobjekte MySQL Kriterium PostgreSQL Erfüllungs- Nutzwert Erfüllungs- Nutzwert grad Gewichtung grad 1 Schemata 10 0 0 10 100 2 Views 40 5 200 6,5 260 2.1 nichtveränderbar 2.2 updateable 2.3 materialized 10 10 20 10 10 0 100 100 0 10 8 4 100 80 80 3 Stored Procedures / Functions 25 8 200 10 250 4 Trigger 25 10 250 9 225 Summe 100 650 835 Der erste Platz im Bereich “OLAP im SQL-Standard” gebührt eindeutig PostgreSQL. In MySQL wurde bisher lediglich die Erweiterung der GROUP BY-Klausel durch ROLLUP implementiert – alle anderen Features fehlen. Seit Version 8.4 hat PostgreSQL hier einen bedeutenden Schritt nach vorne gemacht, denn sowohl die Fensterfunktionen als auch die CTE bieten weitreichende Möglichkeiten. Lediglich auf die Erweiterungen von GROUP BY muss hier bisher noch verzichtet werden. © it-novum GmbH 2010 74 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 D) Unterstützung des SQL-OLAP-Standards / OLAP-Funktionalitäten Kriterium 1 Erweiterung des Group-By Operators 1.1 Group By Rollup 1.2 Group By Cube 1.3 Group By Grouping Sets 2 Fensterfunktionen 2.1 Partitioning 2.2 Ordering 2.3 Framing 3 OLAP-Funktionen 3.1 Rangfunktionen 3.2 Statistische Funktionen 4 Common Table Expressions Summe MySQL PostgreSQL Erfüllungs- Nutzwert Erfüllungs- Nutzwert Gewichtung grad grad 25 3,332 83,3 0 0 8,33 8,33 8,33 10 0 0 83,3 0 0 0 0 0 0 0 0 30 0 0 8,33 250 10 10 10 0 0 0 0 0 0 10 10 5 100 100 50 20 1,5 30 10 200 10 10 0 3 0 30 10 10 100 100 25 100 0 0 113,3 10 250 700 Im Bereich Performance sind die Indizes ein wichtiger Faktor. Sie lassen sich auf beiden Systemen erstellen, allerdings verfügt nur PostgreSQL über eine fortgeschrittene Technik, um logische Operationen zwischen Indizes zu beschleunigen (Bitmap Index Scan). Wir verzichten an dieser Stelle darauf, ein abschließendes Urteil über die Performance beider Systeme zu fällen, weil zu viele Faktoren berücksichtigt werden müssen und Anpassungen an den Systemen zu einer schlechteren Vergleichbarkeit führen (weil u.U. das eine System mehr optimiert wird als das andere). Stattdessen empfehlen wir, vor einer endgültigen Entscheidung beide Datenbanken auf den Systemen mit den beabsichtigten Anwendungen zu testen, anstatt sich auf ein pauschales Urteil zu verlassen. © it-novum GmbH 2010 75 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 E) Performance MySQL PostgreSQL Erfüllungs- Nutzwert Erfüllungs- Nutzwert Gewichtung grad grad 40 6,5 260 6,5 260 Kriterium 1 Skalierbarkeit 1.1 Replikation 1.1.1 a) synchrone 1.2.1 b) asynchrone 1.2 Partitionierung 20 10 10 20 4 0 8 9 80 0 80 180 2 Indizes 25 5,2 2.1 gewöhnliche Indizes 2.2 Bitmapindizes 2.3 Volltextindizes 10 10 5 10 0 6 15 10 10 0 100 8 10 0 0 3 4 5 6 SMP-Support Multithreading Parallel Query Processing Performance-Messung Summe 6 4 8 7 120 40 80 140 130 8 200 100 0 30 10 5 10 100 50 50 120 100 0 0 610 8 0 0 0 120 0 0 0 580 Leichter bewerten lassen sich die Funktionalitäten, die zu einer Verbesserung der Performance beitragen. So unterstützen sowohl MySQL als auch PostgreSQL Multi-CPU (SMP), im Gegensatz zu PostgreSQL verfügt MySQL allerdings über Multithreading. Das kann bei vielen Clientverbindungen auf verschiedene Tabellen zu einer merklich besseren Performance führen. Parallel Query Processing unterstützen beide Systeme nur im Cluster-Betrieb (Replikation). Während MySQL bei der Replikation direkt auf sein spezielles Produkt “MySQL Cluster” verweist, verfügt PostgreSQL nach dem letzten Release über binäre Replikation, die sich aus Streaming Replication und Hot-Standby zusammensetzt. Die Partitionierung von Tabellen ist bei beiden Produkten möglich, allerdings auf sehr unterschiedliche Art und Weise. MySQL unterteilt die Tabelle über verschiedene Funktionen in einzelne Partitionen und speichert sie physisch voneinander getrennt als einzelne Tabellen ab. PostgreSQL greift auf seine Objektrelationalität zurück und realisiert partitionierte Tabellen über Vererbung. Mit MySQL lassen sich partitionierte Tabellen schneller und einfacher erstellen. Bei der Transaktionsunterstützung und den Locking-Strategien liegen beide Produkte fast gleichauf. Sie liefern die notwendigen Techniken, um konkurrierende Zugriffe effektiv zu verwalten. Bei der Benutzerverwaltung findet man zwei unterschiedliche Ansätze: Während PostgreSQL ein Rollenkonzept © it-novum GmbH 2010 76 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 besitzt, bietet MySQL nur ein Benutzerkonzept, das aber dafür sehr ausgereift und bedienungsfreundlich ist. F) Datensicherheit und Datenintegrität MySQL PostgreSQL Erfüllungs- Nutzwert Erfüllungs- Nutzwert Gewichtung grad grad 35 10 350 9,71 340 Kriterium 1 Skalierbarkeit 1.1 Replikation 1.2- Partitionierung 2 Indizes 2.1 gewöhnliche Indizes 2.2 Bitmapindizes 2.3 Volltextindizes 3 SMP-Support Summe 25 10 10 10 250 100 10 9 250 90 40 8,5 340 9,5 380 10 10 20 10 10 7 100 100 140 10 10 9 100 100 180 25 100 8 200 890 10 250 970 Die mitgelieferten Clientprogramme sind für beide Systeme als gut einzustufen. Die Kommandozeilen-Tools werden auch ausführlich in den Dokumentationen behandelt. Was Backup-Verfahren betrifft, so liefern beide ebenfalls die notwendigen Tools mit. Geht es aber um erweiterte Techniken wie OnlineBackups, muss auf Produkte von Drittherstellern zurückgegriffen werden. Um eine höhere Ausfallsicherheit, Lastverteilung und Performance zu erreichen, ist bei beiden Produkten das Anlegen eines Clusters (Replikation) empfehlenswert. G) Administration und Wartung MySQL PostgreSQL Erfüllungs- Nutzwert Erfüllungs- Nutzwert Kriterium Gewichtung grad grad 1 Client- und Hilfsprogramme 50 10 500 10 500 2 Backup-Möglichkeiten 50 8 400 7 350 Summe 100 900 850 © it-novum GmbH 2010 77 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Das Die Abbildung zeigt das Abschneiden von PostgreSQL und MySQL in den sieben untersuchten Bereichen. © it-novum GmbH 2010 78 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 7. Sonderbetrachtung: Infobright Infobright ist, wie bereits erwähnt, ein spaltenbasiertes, relationales DBS auf Basis von MySQL. Es besitzt neben der eigenen Speicher-Engine auch einen eigenen Abfrageoptimierer. Ausgelegt für sehr große Datenmengen im TerabyteBereich, soll es für analytische Data Warehouses optimal geeignet sein. Durch die spaltenbasierte Speicherung kann eine bessere Kompression der Daten erreicht werden. Infobright teilt die Daten während des Ladeprozesses in die Tabellen in mehrere Gruppen aus jeweils 65.536 Elementen auf. Diese Ebene wird von Infobright “Data Packs” genannt, in sie werden die Inhalte der Spalten gespeichert. Darüber sind die sog. “Data Pack Nodes”, welche StatistikInformationen (Meta-Daten) über die in den Datenpaketen komprimierten Daten besitzen. Das Verhältnis von diesen Data Pack Nodes zu den Data Packs ist 1:1, wodurch Infobright jederzeit alle Informationen über die gespeicherten Daten hat. Außerdem gibt es noch “Knowledge Nodes”, die weitergehende Informationen zu den Datenpaketen enthalten, bspw. wie diese in Relation zueinander stehen und wie die Spannbreite der Werte in einer Spalte ist. Diese Knowledge Nodes werden nicht nur bei dem Ladevorgang in die Datenbank erstellt, sondern auch als Reaktion auf eingehende Queries zum Zwecke der Performance-Optimierung. Abbildung: Infobright -Architektur Quelle: http://www.infobright.com/Products/Technology/ © it-novum GmbH 2010 79 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Laden der Daten in Infobright Infobright liefert ein eigenes Loader-Programm, das gegenüber dem von MySQL mit¬gelieferten deutliche Geschwindigkeitsvorteile bieten soll. Im Rahmen der Performance-Messung wurden die Dimensions-und Faktentabellen als Flatfiles exportiert und mit diesem Loader in Infobright geladen. Teilweise war dieser etwas schneller als der originale Loader von MySQL, bemerkenswerte Unterschiede ließen sich allerdings nicht feststellen. Eventuell lag dies am Testsystem oder an den Beschränkungen der Community-Version. Der mitgelieferte Loader von Infobright unterstützt auch nicht die komplette Syntax von dem MySQL Loader -lediglich LOAD DATA INFILE, gefolgt von der Angabe der verwendeten Zeichen in dem Flatfile, wird unterstützt. Eigenschaften der Community-Version Die Community-Version (Infobright CE) steht unter der GPL-Lizenz und ist sowohl für Linux als auch Windows in 32-und 64-Bit Versionen verfügbar. Auf der Community-Seite ist sowohl ein Forum, als auch ein FAQ und ein Wiki verfügbar49. Der Loader der Enterprise-Version soll laut einer Gegenüberstellung auf dieser Seite und einem Whitepaper von Infobright bis zu sechs Mal schneller als der der Community-Version sein. Diese unterstützt auch kein Multi-Threading im Gegensatz zur Enterprise-Version50. Ein entscheidender Einschnitt bei der Community-Edition ist die fehlende Unterstützung von DML-Befehlen, d.h., dass keine Einfüge-, Änderungs-und Löschoperationen möglich sind. © it-novum GmbH 2010 80 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 8. Fazit Ein wesentlicher Betrachtungspunkt sollte sein, wie gut die zu evaluierenden Systeme als Data Warehouse mit einer Business Intelligence-Anwendung zusammenarbeiten. Hierfür wurden die ausgewählten Systeme an das BI-System Pentaho angebunden. In diesem Punkt hat sich gezeigt, dass die beiden evaluierten Systeme sich als Data Warehouse eignen, allerdings Optimierungen bei der Konfiguration dieser Systeme notwendig sind, um mit so großen Datenbeständen arbeiten zu können. Auch die Beispiel-Datenbank selbst musste noch durch das Setzen von Indizes optimiert werden. Die vielen einzelnen Prozessschritte von der Benutzerinteraktion im BI-Tool bis zur Ausgabe eines Ergebnisses sind sehr beeindruckend. Solange die Daten von Mondrian im Cache gehalten werden können, liefern die evaluierten Datenbanken beide eine sehr schnelle Performance ab. Sobald allerdings eine Spalte der Faktentabelle komplett von der Festplatte gelesen werden muss, brechen beide Systeme merklich ein, da hier Indizes auch nicht mehr weiterhelfen. Hier zeigt sich, dass die Festplatte der begrenzende Faktor ist und noch Optimierungen an den Abfragen selbst und am Datenmodell (Verwendung der optimalen Datentypen usw.) für eine bessere Performance erfolgen müssen. In diesem Zusammenhang wäre es interessant zu messen, wieviel schneller SSDs (Solid State Drives) solche Abfragen bewältigen können. Zu Testzwecken wurden die Dimensionstabellen für einen weiteren Durchlauf in die hierfür von MySQL empfohlene “memory”-Speicherengine geladen. Die gewählten Abfragen zeigten eine bessere Performance von Faktor 2,5 bis 5 -daher sollten zumindest die Dimensionstabellen (nach Möglichkeit) in dieser Speicherengine liegen, auch wenn ein Shutdown des MySQL-Servers die Datensätze aus ihnen logischerweise löscht. Infobright als Vertreter einer neuen Generation von DBS konnte in den ausgewählten Abfragen mit einer sehr guten Leistung überzeugen, einzig die stark eingeschränkte Funktionalität der Community Version würde hier gegen einen Einsatz in größerem Umfang sprechen. Außerdem lässt sich feststellen, dass der modulare Aufbau von MySQL sowohl Vorteile als auch Nachteile mit sich bringt. Sehr viele Funktionalitäten hängen von der verwendeten Speicherengine ab. Daher muss vor Aufbau der Datenbank genau überlegt werden, für welche Tabelle welche Speicherengine am Sinnvollsten ist -eine Umwandlung von einem Typ auf den anderen ist später selten problemlos möglich. PostgreSQL überzeugt dagegen mit der Vielseitigkeit der Möglichkeiten der prozeduralen Abfragesprachen und seines objektrelationalen Prinzips, welches einige Eigenheiten mit sich bringt und in manchen Situationen versiertere Nutzer erfordert als MySQL. Das in der © it-novum GmbH 2010 81 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Einleitung formulierte Ziel des teilweisen Vergleichs Februar 2011 mit Produkten kommerzieller Hersteller konnte leider aus Zeitgründen nicht zufriedenstellend erreicht werden. Im Rahmen der Recherchen ist jedoch klar geworden, dass Microsoft, Oracle & Co. den Open Source-Produkten zumindest im Bereich der SQL-OLAP-Unterstützung weit überlegen waren, der Vorsprung aber kleiner wird (zumindest zu PostgreSQL, MySQL hat hier noch sehr viel aufzuholen). Hinsichtlich der Zukunftsaussichten von MySQL und PostgreSQL ist es schwer, Prognosen zu treffen. Gerade MySQL könnte durch die Übernahme durch Oracle sowohl eine positive, als auch eine negative Entwicklung erfahren. Sofern Oracle nur an die eigenen Interessen denkt, werden sie in MySQL gerade nur so viel investieren, um es gegen die Open Source-Konkurrenz bestehen lassen zu können. Ob es aber in Oracle’s Interesse liegt, MySQL neue Meilensteine setzen zu lassen, ist sehr fraglich. Da PostgreSQL seit den letzten 18 Monaten eine schnellere Entwicklung nimmt, wird es spannend sein, die Zukunft der beiden größten Open Source DBS zu verfolgen. Sie liefern beide in vielen Bereichen dasselbe Ergebnis und doch sind sie unterschiedlich genug, um weiterhin ihre Daseinsberechtigung zu haben und für Diskussionspotential zu sorgen. © it-novum GmbH 2010 82 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Anhang: TestQueries © it-novum GmbH 2010 83 Version 1.0 it-novum White Paper © it-novum GmbH 2010 Open Source-Datenbanken im Vergleich 84 Februar 2011 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 Weiterführende Informationen /Links: Weiterführende Whitepapers zu Business Intelligence oder themen- bzw. produktspezifischen Analysen sind bei it-novum als Download oder auf Anfrage erhältlich: Zum Thema Business Intelligence: Vertriebscontrolling mit Open Source: Aufbau einer Vertriebssteuerung mit Palo und Pentaho http://www.it-novum.com/download/downloads/whitepapervertriebscontrolling-mit-palo-und-pentaho.html Open Source BI: Vergleich der führenden Open Source BI-Werkzeuge Pentaho, Jaspersoft und Palo http://www.it-novum.com/download/downloads/whitepaper-opensource-business-intelligence.html Open Source Business Intelligence: A Comparison of JasperSoft, Palo and Pentaho http://www.it-novum.com/download/downloads/whitepaper-opensource-business-intelligence.html Zum Thema Open Source: Die Top-10 Mythen und Irrtümer über Open Source: Einführung von Open Source aus der Sicht eines Anwenders http://www.it-novum.com/download/downloads/whitepaper-die-top-10mythen-und-irrtuemer-ueber-open-source.html Der Open Source-Diamant: Beurteilung von Open Source Lösungen nach fünf praxis-relevanten Kriterien http://www.it-novum.com/download.html 100% Open Source – ist das möglich? http://www.it-novum.com/download.html Weitere Themen: SAP-Monitoring mit Open Source: Umfassendes SAP-Monitoring mit einer Open Source-Plattform, die über CCMS hinaus geht http://www.it-novum.com/download/downloads/whitepaper-sapmonitoring-mit-open-source.html © it-novum GmbH 2010 85 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 openITCOCKPIT: Nagios-basiertes System- und Servicemanagement mit Enterprise-Fokus http://www.it-novum.com/download/downloads/whitepaperopenitcockpit.html IC-Abstimmung im Konzern. Intercompany-Abstimmungen toolunterstützt im SAP-Standard nutzen http://www.it-novum.com/download/downloads/whitepaperintercompany-abstimmung-im-sap-standard.html Konsolidierung im Konzern. Verbesserung des Konsolidierungspro-zesses im Konzern durch den Einsatz des Konsolidierungstools SAP SEM-BCS http://www.it-novum.com/download/downloads/whitepaperkonzernkonsolidierung-mit-sap-sem-bcs.html Modernes Open Source Dokumentenmanagement mit Alfresco: Wegweiser vom einfachen Enterprise Content Management bis hin zu komplexen Workflows mit jBPM und SAP-Integration Open Source CRM mit sugarCRM als nachhaltiger Beitrag zum Vertriebserfolg: Lassen sich moderne Anforderungen wie Abbildung von Vertriebsprozesse, Closed-Loop Marketing und analytisches CRM einfach mit Open Source umsetzen? SAP und Open Source – ein Widerspruch? Flexible Integration zum Aufbau individueller und effizienter Lösungen Aus unseren Projekten heraus ergeben sich immer neue themen- /produktspezifische Whitepapers. Sehen Sie regelmäßig auf unserer Homepage vorbei oder fragen Sie gezielt nach Themen, die sie interessieren unter den oben genannten Kontaktdaten. Kontaktadressen it-novum GmbH Deutschland: Edelzeller Straße 44 • 36043 Fulda • Tel: +49 (661) 103-333 Österreich: Mooslackengasse 17 • 1190 Wien • Tel: +43 (1) 230 60-41 50 © it-novum GmbH 2010 86 Version 1.0 it-novum White Paper Open Source-Datenbanken im Vergleich Februar 2011 [email protected] www.it-novum.com © it-novum GmbH 2010 87 Version 1.0