Vorwort

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Verteilte Datenbanksysteme sind ein wesentlicher Bestandteil der meisten Unternehmen und der meisten Softwareanwendungen. Diese Anwendungen bieten Logik und eine Benutzeroberfläche, während Datenbanksysteme für Datenintegrität, Konsistenz und Redundanz sorgen.

Wenn du dich im Jahr 2000 für eine Datenbank entscheiden musstest, gab es nur wenige Möglichkeiten, und die meisten von ihnen gehörten zur Gruppe der relationalen Datenbanken, so dass die Unterschiede zwischen ihnen relativ gering waren. Das heißt natürlich nicht, dass alle Datenbanken völlig gleich waren, aber ihre Funktionen und Anwendungsfälle waren sehr ähnlich.

Einige dieser Datenbanken haben sich auf die horizontale Skalierung (Skalierung nach außen) konzentriert - die Verbesserung der Leistung und die Erhöhung der Kapazität durch den Betrieb mehrerer Datenbankinstanzen, die als eine einzige logische Einheit agieren: Gamma Database Machine Project, Teradata, Greenplum, Parallel DB2 und viele andere. Heute ist die horizontale Skalierung nach wie vor eine der wichtigsten Eigenschaften, die Kunden von Datenbanken erwarten. Das liegt an der steigenden Beliebtheit von Cloud-basierten Diensten. Es ist oft einfacher, eine neue Instanz aufzusetzen und dem Cluster hinzuzufügen, als vertikal zu skalieren ( nach oben zu skalieren), indem man die Datenbank auf einen größeren, leistungsfähigeren Rechner verschiebt. Migrationen können langwierig und mühsam sein und zu Ausfallzeiten führen.

Um 2010 tauchte eine neue Klasse von konsistenten Datenbanken auf, und Begriffe wie NoSQL und später Big Data wurden immer beliebter. In den letzten 15 Jahren haben die Open-Source-Gemeinschaft, große Internetunternehmen und Datenbankanbieter so viele Datenbanken und Tools entwickelt, dass man sich bei dem Versuch, Anwendungsfälle, Details und Besonderheiten zu verstehen, leicht verirren kann.

Das Dynamo-Papier [DECANDIA07], das 2007 vom Amazon-Team veröffentlicht wurde, hatte so viel Einfluss auf die Datenbank-Community, dass es innerhalb kurzer Zeit viele Varianten und Implementierungen inspirierte. Die bekanntesten von ihnen waren Apache Cassandra, das bei Facebook entwickelt wurde, Project Voldemort, das bei LinkedIn entstand, und Riak, das von ehemaligen Akamai-Ingenieuren entwickelt wurde.

Heute ist das Feld wieder im Wandel: Nach der Zeit der Key-Value-Stores, NoSQL und möglicher Konsistenz sehen wir jetzt skalierbarere und leistungsfähigere Datenbanken, die komplexe Abfragen mit stärkeren Konsistenzgarantien ausführen können.

Die Zielgruppe dieses Buches

In Gesprächen auf technischen Konferenzen höre ich oft die gleiche Frage: "Wie kann ich mehr über Datenbank-Interna lernen? Ich weiß gar nicht, wo ich anfangen soll." Die meisten Bücher über Datenbanksysteme gehen nicht auf die Details der Implementierung von Speichersystemen ein und behandeln die Zugriffsmethoden, wie z. B. B-Trees, auf einem recht hohen Niveau. Es gibt nur wenige Bücher, die neuere Konzepte wie verschiedene B-Tree-Varianten und log-strukturierte Speicherung abdecken, daher empfehle ich in der Regel die Lektüre von Fachartikeln.

Jeder, der Fachartikel liest, weiß, dass das gar nicht so einfach ist: Oft fehlt der Kontext, die Formulierungen sind vielleicht unklar, es gibt wenig oder gar keine Zusammenhänge zwischen den Artikeln und sie sind schwer zu finden. Dieses Buch enthält prägnante Zusammenfassungen wichtiger Konzepte von Datenbanksystemen und kann als Leitfaden für diejenigen dienen, die tiefer einsteigen wollen, oder als Spickzettel für diejenigen, die bereits mit diesen Konzepten vertraut sind.

Nicht jeder will Datenbankentwickler werden, aber dieses Buch hilft allen, die Software entwickeln, die Datenbanksysteme nutzt: Softwareentwickler, Zuverlässigkeitsingenieure, Architekten und technische Leiter.

Wenn dein Unternehmen von einer Infrastrukturkomponente abhängt, sei es eine Datenbank, eine Messaging Queue, eine Container-Plattform oder ein Zeitplannungsprogramm, musst du die Änderungsprotokolle und Mailinglisten des Projekts lesen, um mit der Community in Kontakt zu bleiben und über die neuesten Ereignisse im Projekt auf dem Laufenden zu sein. Wenn du die Terminologie verstehst und weißt, was darin steht, kannst du mehr Informationen aus diesen Quellen ziehen und deine Tools produktiver einsetzen, um Fehler zu beheben, potenzielle Risiken und Engpässe zu erkennen und zu vermeiden. Ein Überblick und ein allgemeines Verständnis dafür, wie Datenbanksysteme funktionieren, hilft dir, wenn etwas schief läuft. Mit diesem Wissen bist du in der Lage, eine Hypothese aufzustellen, sie zu überprüfen, die Ursache zu finden und sie den anderen Projektbetreuern zu präsentieren.

Dieses Buch ist auch für neugierige Köpfe: für die Menschen, die gerne Dinge lernen, ohne dass es unmittelbar notwendig ist, für diejenigen, die ihre Freizeit damit verbringen, an etwas zu hacken, das Spaß macht, Compiler zu erstellen, selbst entwickelte Betriebssysteme, Texteditoren und Computerspiele zu schreiben, Programmiersprachen zu lernen und neue Informationen aufzusaugen.

Es wird davon ausgegangen, dass die Leser/innen von einige Erfahrung mit der Entwicklung von Backend-Systemen und der Arbeit mit Datenbanksystemen als Benutzer/in haben. Ein gewisses Vorwissen über verschiedene Datenstrukturen hilft dabei, den Stoff schneller zu verstehen.

Warum sollte ich dieses Buch lesen?

Wir hören oft, dass Datenbanksysteme anhand der Konzepte und Algorithmen beschrieben werden, die sie implementieren: "Diese Datenbank verwendet Gossip für die Mitgliederweitergabe" (siehe Kapitel 12), "Sie haben Dynamo implementiert" oder "Das ist genau wie das, was sie im Spanner Paper beschrieben haben" (siehe Kapitel 13). Wenn du über die Algorithmen und Datenstrukturen sprichst, kannst du etwas hören wie: "ZAB und Raft haben viel gemeinsam" (siehe Kapitel 14), "Bw-Trees sind wie die B-Trees, die auf einer log-strukturierten Speicherung implementiert wurden" (siehe Kapitel 6) oder "Sie verwenden Geschwisterzeiger wie inBlink-Trees" (siehe Kapitel 5).

Wir brauchen Abstraktionen, um komplexe Konzepte zu diskutieren, und wir können nicht jedes Mal, wenn wir ein Gespräch beginnen, eine Diskussion über die Terminologie führen. Abkürzungen in Form einer gemeinsamen Sprache helfen uns, unsere Aufmerksamkeit auf andere, übergeordnete Probleme zu lenken.

Einer der Vorteile beim Erlernen der grundlegenden Konzepte, Beweise und Algorithmen ist, dass sie nie veralten. Natürlich wird es immer wieder neue geben, aber neue Algorithmen werden oft entwickelt, nachdem man einen Fehler oder Verbesserungsbedarf in einem klassischen Algorithmus gefunden hat. Wenn man die Geschichte kennt, kann man die Unterschiede und die Motivation besser verstehen.

Über diese Dinge zu lernen ist inspirierend. Du siehst die Vielfalt der Algorithmen, siehst, wie unsere Branche ein Problem nach dem anderen gelöst hat, und lernst diese Arbeit zu schätzen. Gleichzeitig ist das Lernen lohnend: Du kannst fast spüren, wie sich mehrere Puzzleteile in deinem Kopf zu einem vollständigen Bild zusammenfügen, das du immer mit anderen teilen kannst.

Umfang dieses Buches

Dieses ist weder ein Buch über relationale noch über NoSQL-Datenbankmanagementsysteme, sondern über die Algorithmen und Konzepte, die in allen Arten von Datenbanksystemen verwendet werden, wobei der Schwerpunkt auf einer Speicher-Engine und den für die Verteilung zuständigen Komponenten liegt .

Einige Konzepte, wie Abfrageplanung, Abfrageoptimierung, Scheduling, das relationale Modell und einige andere, werden bereits in mehreren großen Lehrbüchern über Datenbanksysteme behandelt. Einige dieser Konzepte werden normalerweise aus der Benutzerperspektive beschrieben, aber dieses Buch konzentriert sich auf die Interna. Einige Hinweise auf nützliche Literatur findest du in der Schlussfolgerung in Teil II und in den Kapitelzusammenfassungen. In diesen Büchern findest du wahrscheinlich Antworten auf viele datenbankbezogene Fragen, die du vielleicht hast.

Abfragesprachen werden nicht behandelt, da es keine einheitliche Sprache für die in diesem Buch erwähnten Datenbanksysteme gibt.

Um das Material für dieses Buch zu sammeln, habe ich über 15 Bücher, mehr als 300 Abhandlungen, unzählige Blogbeiträge, Quellcode und die Dokumentation für mehrere Open-Source-Datenbanken studiert. Als Faustregel für die Entscheidung, ob ein bestimmtes Konzept in das Buch aufgenommen werden sollte oder nicht, diente mir die Frage: "Sprechen die Leute in der Datenbankbranche und in Forschungskreisen über dieses Konzept?" Wenn die Antwort "Ja" lautete, fügte ich das Konzept der langen Liste der zu besprechenden Dinge hinzu.

Aufbau dieses Buches

Es gibt zwar einige Beispiele für erweiterbare Datenbanken mit steckbaren Komponenten (z. B. [SCHWARZ86]), aber sie sind eher selten. Gleichzeitig gibt es viele Beispiele für Datenbanken, die eine steckbare Speicherung verwenden. Ebenso hören wir von Datenbankanbietern nur selten etwas über die Ausführung von Abfragen, während sie sehr eifrig darüber sprechen, wie ihre Datenbanken die Konsistenz wahren.

Die wichtigsten Unterschiede zwischen Datenbanksystemen konzentrieren sich auf zwei Aspekte: wie sie die Daten speichern und wie sie sie verteilen. (Andere Subsysteme können manchmal auch von Bedeutung sein, werden hier aber nicht behandelt.) Das Buch ist in Teile gegliedert, die sich mit den Subsystemen und Komponenten befassen, die für die Speicherung (Teil I) und die Verteilung (Teil II) verantwortlich sind.

Teil I befasst sich mit knotenlokalen Prozessen und konzentriert sich auf die Speicherung, die zentrale Komponente des Datenbanksystems und einer der wichtigsten Unterscheidungsfaktoren. Zunächst gehen wir auf die Architektur eines Datenbankmanagementsystems ein und stellen verschiedene Möglichkeiten vor, Datenbanksysteme anhand des primären Speichermediums und des Layouts zu klassifizieren.

Wir fahren mit den Strukturen der Speicherung fort und versuchen zu verstehen, wie sich festplattenbasierte Strukturen von speicherbasierten unterscheiden, stellen B-Trees vor und behandeln Algorithmen zur effizienten Verwaltung von B-Tree-Strukturen auf der Festplatte, einschließlich Serialisierung, Seitenlayout und Festplattendarstellungen. Später diskutieren wir mehrere Varianten, um die Leistungsfähigkeit dieses Konzepts und die Vielfalt der Datenstrukturen zu veranschaulichen, die von B-Trees beeinflusst und inspiriert wurden.

Zum Schluss gehen wir auf verschiedene Varianten der log-strukturierten Speicherung ein, die häufig für die Implementierung von Datei- und Speichersystemen verwendet werden, sowie auf die Motivation und die Gründe für ihre Verwendung.

In Teil II geht es darum, wie man mehrere Knoten in einem Datenbank-Cluster organisiert. Wir beginnen damit, wie wichtig es ist, die theoretischen Konzepte für den Aufbau fehlertoleranter verteilter Systeme zu verstehen, wie sich verteilte Systeme von Einzelknotenanwendungen unterscheiden und mit welchen Problemen, Einschränkungen und Komplikationen wir in einer verteilten Umgebung konfrontiert sind.

Danach tauchen wir tief in verteilte Algorithmen ein. Hier beginnen wir mit Algorithmen zur Fehlererkennung, die dazu beitragen, die Leistung und Stabilität zu verbessern, indem sie Ausfälle bemerken und melden und die fehlgeschlagenen Knoten vermeiden. Da viele Algorithmen, die später im Buch besprochen werden, auf dem Verständnis des Konzepts der Leadership beruhen, stellen wir mehrere Algorithmen zur Leaderwahl vor und diskutieren ihre Eignung.

Da eine der schwierigsten Aufgaben in verteilten Systemen darin besteht, Datenkonsistenz zu erreichen, diskutieren wir Konzepte der Replikation, gefolgt von Konsistenzmodellen, möglichen Divergenzen zwischen Replikaten und möglicher Konsistenz. Da letztendlich konsistente Systeme manchmal auf Anti-Entropie für die Konvergenz und Gossip für die Datenverbreitung angewiesen sind, besprechen wir verschiedene Anti-Entropie- und Gossip-Ansätze. Schließlich diskutieren wir die logische Konsistenz im Kontext von Datenbanktransaktionen und schließen mit Konsensalgorithmen ab.

Es wäre unmöglich gewesen, dieses Buch ohne all die Forschungen und Veröffentlichungen zu schreiben. Du wirst im Text viele Verweise auf Arbeiten und Veröffentlichungen finden, in eckigen Klammern mit Monospace-Schrift; zum Beispiel [DECANDIA07]. Du kannst diese Verweise nutzen, um mehr über verwandte Konzepte im Detail zu erfahren.

Nach jedem Kapitel findest du eine Zusammenfassung, die Material zum weiteren Studium enthält, das sich auf den Inhalt des Kapitels bezieht.

In diesem Buch verwendete Konventionen

In diesem Buch werden die folgenden typografischen Konventionen verwendet:

Kursiv

Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.

Constant width

Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.

Tipp

Dieses Element steht für einen Tipp oder eine Anregung.

Hinweis

Dieses Element steht für einen allgemeinen Hinweis.

Warnung

Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.

Code-Beispiele verwenden

Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Wenn du eine CD-ROM mit Beispielen aus den O'Reilly-Büchern verkaufst oder verteilst, ist eine Genehmigung erforderlich. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Erlaubnis erforderlich.

Wir schätzen die Namensnennung, verlangen sie aber nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "Database Internals von Alex Petrov (O'Reilly). Copyright 2019 Oleksandr Petrov, 978-1-492-04034-7."

Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter kontaktieren

O'Reilly Online Learning

Hinweis

Seit fast 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.

Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen findest du unter http://oreilly.com.

Wie du uns kontaktierst

Bitte wende dich unter mit Kommentaren und Fragen zu diesem Buch an den Verlag:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Nord
  • Sebastopol, CA 95472
  • 800-998-9938 (in den Vereinigten Staaten oder Kanada)
  • 707-829-0515 (international oder lokal)
  • 707-829-0104 (Fax)

Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter http://bit.ly/database-internals aufrufen .

Wenn du Kommentare oder technische Fragen zu diesem Buch stellen möchtest, schicke bitte eine E-Mail an

Neuigkeiten und weitere Informationen zu unseren Büchern und Kursen findest du auf unserer Website unter http://www.oreilly.com.

Finde uns auf Facebook: http://facebook.com/oreilly

Folge uns auf Twitter: http://twitter.com/oreillymedia

Schau uns auf YouTube: http://www.youtube.com/oreillymedia

Danksagungen

Dieses Buch wäre nicht möglich gewesen ohne die Hunderte von Menschen, die hart an Forschungsarbeiten und Büchern gearbeitet haben, die eine Quelle von Ideen und Inspiration waren und als Referenzen für dieses Buch dienten.

Ich möchte mich bei allen bedanken, die Manuskripte begutachtet und Feedback gegeben haben, um sicherzustellen, dass das Material in diesem Buch korrekt ist und die Formulierungen präzise sind: Dmitry Alimov, Peter Alvaro, Carlos Baquero, Jason Brown, Blake Eggleston, Marcus Eriksson, Francisco Fernández Castaño, Heidi Howard, Vaidehi Joshi, Maximilian Karasz, Stas Kelvich, Michael Klishin, Predrag Knežević, Joel Knighton, Eugene Lazin, Nate McCall, Christopher Meiklejohn, Tyler Neely, Maxim Neverov, Marina Petrova, Stefan Podkowinski, Edward Ribeiro, Denis Rystsov, Kir Shatrov, Alex Sorokoumov, Massimiliano Tomassi und Ariel Weisberg.

Natürlich wäre dieses Buch nicht möglich gewesen ohne die Unterstützung meiner Familie: meiner Frau Marina und meiner Tochter Alexandra, die mich bei jedem Schritt auf dem Weg unterstützt haben.

Get Datenbank Interna now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.