| Multiversion-Concurrency-Control | |||||
|
MultiVersion Concurrency Control (MVCC) ist eine effiziente Methode, um bei z.B. einer relationalen Datenbank viele gleichzeitige Zugriffe zu ermöglichen, ohne die Datenkonsistenz zu gefährden oder in eine Deadlock-Situation zu geraten. Um das zu realisieren verwendet MVCC Zeitstempel und sich automatisch erhöhende Transaktions-IDs: dadurch werden Transaktionen serialisiert und keine Transaktion muss auf die andere warten. Die verschiedenen Objektversionen von einer Transaktion mit dem entsprechenden Zeitstempel werden von der DB-Engine nach einem ausgeklügeltem System verwaltet. Beim Row Level Locking wird nur ein Teil einer Datenbank während einer Transaktion gesperrt. Dadurch können sich mehrere Benutzer einen Teil der Datenbank teilen. Dies hat Vorteile bei hohen Benutzerzahlen. Row-Level Locking benötigt ein gutes Transaktionssystem, da es sonst zu viele Row-Level Locks (respektive Column Level Locks) gibt, welche die Performance der DB herabsetzen. Das Transaktionsmanagement hat die Aufgabe, die Schreibzugriffe zu verzögern und zu sammeln, um sie dann "in einem Rutsch" in die DB zu schreiben. Die MySQL-Storage-Engine Falcon unterstützt Multiversion Concurrency Control, was es erlaubt, Datensätze ohne Row-Level-Locking zu aktualisieren. Falcon benötigt dank MVCC kein Locking während einer Update- oder Insert-Operation. MVCC oder MCC wird in folgenden Datenbanken eingesetzt: MySQL (InnoDB oder Falcon) Firebird-DB, Berkeley-DB, InterBase, Microsoft SQL Server 2005, ORACLE oder PostgreSQL. Das MVCC-Konzept kommt u.a. auch bei NoSQL-Datenbanken zum Einsatz. Multiversion Concurrency Control wird auch Multi-Generational Concurrency Control genannt (MGCC). |
|||||
| Siehe auch: datenbank MySQL InnoDB Referentielle-Integrität Konsistenz Schlüssel Deadlock ACID Normalform NoSQL | |||||
| MySQL | |||||
|
MySQL ist ein freies Datenbanksystem auf SQL (Structured Query Language) Basis, lizenziert durch die GPL, auch eine kommerzielle Lizenzierung ist möglich (Duales Lizenzsystem). 1994 entwickelt durch Michael (Monty) Widenius, David Axmark und Alan Larsson als Weiterentwicklung einer selbstentwickelten ISAM-Engine wird MySQL heute von der schwedischen Firma MySQL AB, die von den Entwicklern gegründet wurde, weiterentwickelt. MySQL ist das populärste Open Source Datenbanksystem und arbeitet gut mit der Scriptsprache PHP zusammen. Unterstützt werden die Betriebssysteme Unix, Linux, Windows, Mac OS X, Open VMS und i5/OS. Es werden auch i.V.m. mit dem Apache Server ganze Installationspakete angeboten (XAMPP (WAMPP, LAMPP, MAMPP) je nach OS. 2003 wurde MySQL in SAP integriert (MaxDB). In PHP ist auch das MySQL Administrationsprogramm phpMyAdmin geschrieben. Storage-Engines MySQL unterstützt mehrere Storage-Engines: MyISAM, Berkeley DB, InnoDB, MEMORY, DB2 unter i5/OS, MERGE, BLACKHOLE, FEDERATED, ARCHIVE, NDB (Network Data Base) und Falcon. MyISAM ist eine Weiterentwicklung von ISAM und verfügt über schnelle Zugriffe auf Tabellen und Indizes sowie über Volltextsuche. Die Transaktionssicherung wurde weggelassen; MyISAM unterstützt keine referentielle Integrität und keinen Rollback. Referentielle Integrität und Rollbacks werden hingegen von InnoDB unterstützt. InnoDB (Innobase Oy) genügt weitesgehend den ACID Kriterien und ist in der Lage, Fremdschlüssel-Beziehungen zu überprüfen. ORACLE hat Innobase Oy 2005 übernommen. Die NDB-Implementierung ist eine kommerzielle Implementierung der MySQL-Cluster Technologie (NDB-Cluster). Mit ARCHIVE sollen grosse Tabellen und Datenmengen unterstützt werden. Indizes werden nicht unterstützt um Speicherplatz zu sparen, ebenso werden nur SELECT und INSERT Abfragen unterstützt. Einzufügende Daten werden zunächst in einem Kompressionspuffer zwischengespeichert und vor der INSERT Operation mit dem ermittelten optimalen Kompressionsalgorithmus komprimiert. Die FEDERATED Variante ermöglicht die transaktionssichere Speicherung von Daten auf einem anderen Server. Das Prinzip Föderativer Informationssystem kommt zur Anwendung: der Server, von dem die Operationen abgeschickt werden, fungiert als Client und hat über die FEDERATED-Engine Zugriff auf den (Remote) Server, auf dem auf FEDERATED-Tabellen ebenfalls zugegriffen werden kann. Die Berkeley DB (BDB) wurde von Sleepycat Software entwickelt (Sleepycat wurde 2006 ebenfalls von ORACLE aufgekauft) und bietet DB-APIs zu C, C++, Java, Python, Perl sowie der Tool Command Language (TCL), einer Open Source Scriptsprache und weiteren Programmiersprachen. Die BDB ist eine eingebettete (embedded) DB-API-Sammlung und bietet Transaktionssicherheit sowie die Möglichkeit sehr grosse Datensätze (bis zu 4 GByte) und Tabellen (bis zu 256 Terabyte) zu erstellen, da die Datenzugriffe ähnlich wie bei einem Dateisystem funktionieren und somit keinerlei Beschränkung bezüglich der Speicherungsart unterliegen. BDB bietet weiterhin Möglichkeiten des Daten-Recovery (Hot-Backups (Backups zur Laufzeit), Replikation (Datenspeicherung auf verschiedenen Servern zur gleichen Zeit)) sowie Locking-Mechanismen. Durch das Berkeley XML Interface können XML Dokumente geparst werden: damit sind die XML Abfragesprachen XQuery und XPath für Datenbankabfragen einsetzbar. Die BLACKHOLE-Engine dient zur Überprüfung der SQL-Syntax und zum Schreiben eines Binär-Logs. Da die Daten nicht gespeichert werden, können Syntaxprüfungen ohne Belegung von zusätzlichem Speicherplatz durchgeführt werden. BLACKHOLE wird daher eingesetzt zur Syntaxprüfung von MySQL-Dumps, zum Vergleich von Binärlogs auf den Master- und Slave Servern bei einer Datenreplikation und zur Zeitmessungen für das Schreiben eines Binär-Logs. Mit der MERGE-Engine kann man mehrere MyISAM Tabellen mit derselben Stuktur zusammenfassen und Transaktionen darauf ausführen. Bei DB/2 unter dem IBM System i5 fungiert DB/2 als Datenbank-Engine für MySQL. Falcon-Storage-Engine Ab MySQL 6.0 wird mit Falcon eine neue MySQL-Storage-Engine erscheinen, die u.a. Transaktionssicherheit verspricht. Falcon wird entwickelt von Jim Starkey (InterBase) und seiner Firma Netfastructure, die zu diesem Zweck von MySQL AB aufgekauft wurde. Dabei wird besonders an Web 2.0 Anwendungen gedacht. MVCC Falcon unterstützt MultiVersion Concurrency Control (MVCC), was es erlaubt, Datensätze ohne Row-Level-Locking zu aktualisieren. Falcon ist geeignet für transaktionsbasierte Anwendungen mit hohem Datenverkehr. MVCC ist eine effiziente Methode, um bei einer relationalen Datenbank viele gleichzeitige Zugriffe zu ermöglichen, ohne die Datenkonsistenz zu gefährden oder in eine Deadlock-Situation zu geraten. Um das zu realisieren verwendet MVCC Zeitstempel und sich automatisch erhöhende Transaktions-IDs: dadurch werden Transaktionen serialisiert und keine Transaktion muss auf die andere warten. Die verschiedenen Objektversionen von einer Transaktion mit dem entsprechendem Zeitstempel werden von der DB-Engine nach einem ausgeklügeltem System verwaltet. Beim Row Level Locking wird nur ein Teil einer Datenbank während einer Transaktion gesperrt. Dadurch können sich mehrere Benutzer einen Teil der Datenbank teilen. Dies hat Vorteile bei hohen Benutzerzahlen. Row-Level Locking benötigt ein gutes Transaktionssystem, da es sonst zu viele Row-Level Locks (respektive Column Level Locks) gibt, welche die Performance der DB herabsetzen. Das Transaktionsmanagement hat die Aufgabe, die Schreibzugriffe zu verzögern und zu sammeln, um sie dann "in einem Rutsch" in die DB zu schreiben. Falcon benötigt dann dank MVCC kein Locking während einer Update- oder Insert-Operation. Weiterhin verwendet Falcon erweiterte B-Baum-Indizes sowie Kompressionsalgorithmen zur Speicherung. Die Kompression und Dekompression zur Speicherung der Daten auf der Festplatte erfolgt im Speichervorgang selber ("On-the-Fly"). Durch Verwendung eines Caches für Daten und Indizes besteht keine Notwendigkeit, Index-Daten von der Festplatte zu laden. Falcon ist speziell für 64-Bit Prozessoren ausgelegt, die mit vielen Threads, CPU-Kernen oder Arbeitsspeicher umgehen können. B-Baum-Indize Ein B-Baum-Indize ist eine Daten- und Indexstruktur die oft in Datenbanken und Dateisystemen verwendet wird. Es handelt sich um einen immer vollständig balancierten Baum, der Daten sortiert nach Schlüsseln speichert. MySQL Tabellen können mit unterschiedlichen Verfahren partitioniert werden: Range-, List-, Key- und Hash-Partitionierung sowie die Bildung von Unterpartitionen (Subpartitions). MySQL und Google, Übernahme durch Sun Google will ab Ende 2008 MySQL-Eigenentwicklungen in das MySQL-Projekt zurückfliessen lassen: Google setzt MySQL auf tausenden seiner Server ein und hat vor allem Funktionen zur Replikation optimiert und Tools entwickelt, die eine grosse Anzahl von Instanzen überwachen. MySQL wurde 2008 von Sun für 1 Mrd. $ übernommen, bleibt jedoch Open Source. |
|||||
| Siehe auch: Falcon-Storage-Engine My-SQL-6 MySQL-Cluster Open-Source InnoDB MyISAM Multiversion-Concurrency-Control Referentielle-Integrität PHP NoSQL | |||||
| InnoDB | |||||
|
InnoDB ist ein Tabellenformat von Innobase Oy für die Open Source Datenbank MySQL. Gegenüber der Standard-Tabelle MyISAM bietet InnoDB Transaktionen und ist damit rollbackfähig. Ausserdem sind Commit-Fähigkeiten integriert sowie Fremdschlüssel Constraints und eine verbesserte Performance. Weiterhin bietet InnoDB Row Level Locking (Schreibvorgänge innerhalb einer Transaktion bewirken eine Schreibsperre der jeweiligen Datensätze für alle anderen Transaktionen) und Referenzielle Integrität über Fremdschlüssel. Lesezugriffe, die wiederholt vorkommen, werden von Schreibzugriffen anderer Transaktionen nicht beeinträchtigt. Dies entspricht einer der Forderungen aus dem ACID-Katalog (Atomicity, Consistency, Isolation, Durability), einem Forderungskatalog für erwünschte Eigenschaften von Transaktionen bei Datenbanken. Zusätzlich bieten InnoDB Tabellen ein Consistent Read und MultiVersion Concurrency Control (MVCC). Dadurch kann man beispielsweise Datenbanken in eine Datei exportieren, ohne dass die Notwendigkeit besteht, einzelne Tabellen zu sperren. Die Crash Recovery Funktion erspart die Reparatur einzelner Tabellen im Falle eines Absturtzes des Datenbank-Servers. Es besteht grundsätzlich keine Grössenbeschränkung für InnoDB Dateien. InnoDB Oy wurde 2005 von Oracle Systems übernommen. |
|||||
| Siehe auch: MyISAM ISAM MySQL ACID GPL datenbank Open-Source Referentielle-Integrität Transaktion Multiversion-Concurrency-Control | |||||
| NoSQL | |||||
|
NoSQL Datenbanken (Not only SQL oder No SQL) sind (teilweise Open Source) Datenbanktechnologien welche die Nachteile anderer Datenbanktechnologien wie MySQL oder objektorientierter Datenbanken ausgleichen sollen. Es handelt sich um Datenbanken, die besser skalierbar sind und bei hoher Datenlast mit vielen, grossen Transaktionen besser performen. NoSQL Datenbanken haben kein festes Schema wie relationale Datenbanken Dabei kommen flexible Technologien zur Datenspeicherung zum Einsatz bzw. wird die Datenspeicherung der jeweiligen Anwendung überlassen. Es werden abweichende Protokolle zur Kommunikation mit dem Client eingesetzt als bei SQL. Konzepte von NoSQL-Datenbanken: BASE, CAP-Theorem NoSQL-Datenbanken können folgende Eigenschaften haben: nicht-relational, schemafrei, horizontal skalierbar, verteilt, BASE anstatt ACID oder einfache Replikation und Programmierschnittstelle. BASE bedeuted Basically Available, Soft State und Eventual Consistent. Hierbei wird die strenge Konsistenz-Bedingung zugunsten einer besseren Verfügbarkeit und Skalierbarkeit aufgeweicht. Die Form der 'losen Konsistenz' bei der die Konsistenz von nachfolgenden Operationen wieder hergestellt wird und die DB zwischen konsistentem und inkonsistentem Zustand wechselt, wird als akzeptabel angesehen. Befinden sich Duplikate auf der DB, so werden diese nach einigen Transaktionen immer wieder asynchron synchronisiert so daß die DB immer wieder in einen konsistenten Teilzustand überführt wird. Eventual Consistent bedeuted, daß es nur einen gewissen Zeitrahmen gibt, in dem alle Clients denselben (konsistenten) Zustand sehen. Das CAP-Theorem gilt bei NoSQL-DBs: bei verteilten Systemen werden nur 2 der 3 Bedingungen Consistency, Availability und Partition Tolerance erfüllt. Grosse Datenmengen werden in einem Standardsystem auf einem Cluster verwaltet und nicht auf einem Masterserver. So werden die Nachteiler relationaler Datenbankmodelle, die auf Indexierung von grossen Datenmengen basieren ausgeglichen, da letzteres Performanceeinbußen mit sich bringt. Relationale Datenbanken sind nur effizient wenn sie für hochfrequente kleine Transaktionen optimiert werden können oder bei grossen Batch-Input Läufen. Auch MVCC wird bei NoSQL-DBs angewendet. Arten von NoSQL Datenbanken, Strukturierte Datenspeicher Man nennt NoSQL Datenbanken auch strukturierte Datenspeicher (structured storage). Es haben sich folgende Arten von NoSQL Datenbanken herausgebildet: Dokumentenorientierte Datenbanken, spaltenorientierte Datenbanken, Key-Value-Datenbanken und Graphendatenbanken. Dokumentenorientierte Datenbank Bei dokumentenorientierten Datenbanken werden Textdaten von beliebiger Grössenordnung in unstrukturierter Form gespeichert. Das Retrieval der Daten erfolgt über die Dokumenteninhalte. Beispiele sind MongoDB, CouchDB oder Apache Jackrabbit. CouchDB sollte auf Multi-Server Umgebungen und mit Multi-Core-Systemen einsetzbar sein. CouchDB (Cluster of Unreliable commodity Hardware DataBase) verwaltet seine Daten in Dokumenten die auf JSON-Objekten oder XML basieren. Dabei können Dokumente in einer CouchDB-Datenbank von unterschiedlicher Struktur sein. Ein Beispiel für eine Abfrage mit CouchDB ist: Filter werden über Map/Reduce verarbeitet. Es können aber auch Funktionen in den Views (Abfragen) zur Ausführung während der Abfrage kommen. Als Datenschnittstelle fungiert bei CouchDB REST-HTTP. Ein Beispiel für eine Abfrage mit CouchDB ist: function(doc) { emit (doc.Projekt, {Projektleiter: doc.Projektleiter, Projektmitarbeiter: doc.Projektmitarbeiter, Projektressourcen: doc.Projektressourcen}); } Key-Value Datenbank Bei Key-Value-Datenbanken wird ein definierter Schlüssel verwendet welcher auf einen bestimmten Wert verweist. Dieser Wert kann auch aus einer beliebigen Zeichenfolge bestehen. Key-Value Datenbanken können als In-Memory Version implementiert sein. Diese ist speicherresistent und eignet sich durch ihre hohe Leistungsfähigkeit für Cache-Speichersysteme. Die andere Variante ist die On-Disk Implementierung welche ihre Daten auf der HDD speichert und sich für grosse Datenspeicher eignet. Beispiel für Key-Value In-Memory Datenbanken ist memcache. Key-Value On-Disk Speicher (Key-Value-Festplattenspeicher) sind SimpleDB, Google BigTable oder Redis. Google BigTable basiert auf dem Google File System (GFS). Bei Google BigTables wird ein bestimmter Distributed Lock Manager (DLM), der Chubby Lock Service, eingesetzt. Der DLM sorgt bei verteilten Anwendungen für die Synchronisation des Zugriffs auf Shared Resources (geteilte Ressourcen). Die On-Disk Key-Value Datenbank Redis ist in der Lage, neben Strings auch Listen, Sets und sortierte Sets zu speichern. Die Speicherstrategie von Redis sieht vor, dass die Datasets im Hauptspeicher gehalten werden, aber bei bestimmten Bedingungen auch auf der Festplatte abgelegt werden. Redis wurde bei Github oder Engine Yard implementiert. Spaltenorientierte Datenbank Beispiel für eine spaltenorientierte Datenbank ist Apache Cassandra. Bei Cassandra werden die Daten als Schlüssel-Wert-Relation gespeichert. Cassandra ist ein verteiltes Datenbankverwaltungssystem welches auf hohe Skalierbarkeit und Ausfallsicherheit ausgelegt ist. Bei einer spaltenorientierten Datenbank liegt eine Minimierung der I/O Aktivitäten hinsichtlich von Berechnungen auf Datensätzen vor. Bei Cassandra verfügen die Spalten über Namen, Wert und Zeitstempel. Spaltenfamilien sind gruppierte Spalten. Apache Cassandra wird von namenhaften Firmen wie IBM, Twitter und Rackspace unterstützt. Eingesetzt wird Apache Cassandra bei Facebook, Twitter und Digg. Cassandra wurde zum Top-Level-Projekt der Apache Foundation erklärt. Graphendatenbanken Graphendatenbanken spiegeln die Beziehungen der Elemente, z.B. in einem Graphenbaum wieder. Dabei kann es sich um ein Beziehungsgefüge aus Freunden in einem sozialen Netzwerk handeln oder um die Follower-Struktur bei Twitter. Um diese Strukturen abbilden zu können werden die Daten als Knoten und Beziehungen zwischen den Knoten repräsentiert. Um die Knoten zu durchlaufen wären in einer SQL-Datenbank viele Abfragen nötig. Beispiele für eine Graphendatenbank sind FlockDB (Twitter), Cora Data, AllegroGraph oder Neo4j. |
|||||
| Siehe auch: Google-BigTable Google-BigData Verteilte-Datenbank B-Baum Twitter Konsistenz ACID Multiversion-Concurrency-Control Apache-Cassandra MySQL | |||||