Datenintensive Anwendungen designen

Book description

Daten stehen bei vielen Aufgaben des modernen Systemdesigns im Mittelpunkt. Dabei sind komplexe Fragen wie Skalierbarkeit, Konsistenz, Zuverlässigkeit, Effizienz und Wartbarkeit zu klären. Darüber hinaus gibt es eine unüberschaubare Werkzeugpalette, einschließlich relationaler Datenbanken, NoSQL-Datenspeicher, Stream- und Batchprocessing und Message Broker. Was bedeuten diese Schlagworte? Und was ist die richtige Wahl für Ihre Anwendung?Dieser praktische und umfassende Leitfaden hilft Ihnen, sich in diesem schwierigen Terrain zurechtzufinden, indem er die Vor- und Nachteile verschiedener Technologien zur Verarbeitung und Speicherung von Daten aufzeigt. Software verändert sich ständig, die Grundprinzipien bleiben aber gleich. Mit diesem Buch lernen Softwareentwickler und -architekten, wie sie die Konzepte in der Praxis umsetzen und wie sie Daten in modernen Anwendungen optimal nutzen können.

Table of contents

  1. Cover
  2. Titel
  3. Impressum
  4. Inhalt
  5. Einleitung
  6. Teil I: Grundlagen von Datensystemen
    1. 1 Zuverlässige, skalierbare und wartbare Anwendungen
      1. Gedanken zu Datensystemen
      2. Zuverlässigkeit
        1. Hardwarefehler
        2. Softwarefehler
        3. Menschliche Fehler
        4. Wie wichtig ist Zuverlässigkeit?
      3. Skalierbarkeit
        1. Lasten beschreiben
        2. Performance beschreiben
        3. Konzepte zur Bewältigung von Belastungen
      4. Wartbarkeit
        1. Betriebsfähigkeit: Den Betrieb erleichtern
        2. Einfachheit: Komplexität im Griff
        3. Evolvierbarkeit: Änderungen erleichtern
      5. Zusammenfassung
    2. 2 Datenmodelle und Abfragesprachen
      1. Relationales Modell vs. Dokumentmodell
        1. Die Geburt von NoSQL
        2. Die objektrelationale Unverträglichkeit
        3. n:1- und n:n-Beziehungen
        4. Wiederholen Dokumentdatenbanken die Geschichte?
        5. Heutige relationale Datenbanken vs. Dokumentdatenbanken
      2. Abfragesprachen für Daten
        1. Deklarative Abfragen im Web
        2. MapReduce-Abfragen
      3. Graphen-ähnliche Datenmodelle
        1. Property-Graphen
        2. Die Abfragesprache Cypher
        3. Graph-Abfragen in SQL
        4. Triple-Stores und SPARQL
        5. Das Fundament: Datalog
      4. Zusammenfassung
    3. 3 Speichern und Abrufen
      1. Datenstrukturen, auf denen Ihre Datenbank beruht
        1. Hash-Indizes
        2. SSTables und LSM-Bäume
        3. B-Bäume
        4. B-Bäume und LSM-Bäume im Vergleich
        5. Andere Indizierungsstrukturen
      2. Transaktionsverarbeitung oder Datenanalyse?
        1. Data-Warehousing
        2. Sterne und Schneeflocken: Schemas für die Analytik
      3. Spaltenorientierte Speicherung
        1. Spaltenkomprimierung
        2. Sortierreihenfolge in spaltenorientierten Datenbanken
        3. In spaltenorientierte Datenbanken schreiben
        4. Aggregation: Datenwürfel und materialisierte Sichten
      4. Zusammenfassung
    4. 4 Codierung und Evolution
      1. Formate für das Codieren von Daten
        1. Sprachspezifische Formate
        2. JSON, XML und binäre Varianten
        3. Thrift und Protocol Buffers
        4. Avro
        5. Die Vorzüge von Schemas
      2. Datenflussmodi
        1. Datenfluss über Datenbanken
        2. Datenfluss über Dienste: REST und RPC
        3. Datenfluss beim Nachrichtenaustausch
      3. Zusammenfassung
  7. Teil II: Verteilte Daten
    1. 5 Replikation
      1. Leader und Follower
        1. Synchrone und asynchrone Replikation
        2. Neue Follower einrichten
        3. Knotenausfälle behandeln
        4. Implementierung von Replikationsprotokollen
      2. Probleme mit der Replikationsverzögerung
        1. Die eigenen Schreiboperationen lesen
        2. Monotones Lesen
        3. Präfixkonsistenz
        4. Lösungen für Replikationsverzögerung
      3. Multi-Leader-Replikation
        1. Einsatzfälle für Multi-Leader-Replikation
        2. Schreibkonflikte behandeln
        3. Topologien für Multi-Leader-Replikation
      4. Replikation ohne Leader
        1. In die Datenbank schreiben, wenn ein Knoten ausgefallen ist
        2. Grenzen der Quorumkonsistenz
        3. Sloppy Quoren und Hinted Handoff
        4. Parallele Schreibvorgänge erkennen
      5. Zusammenfassung
    2. 6 Partitionierung
      1. Partitionierung und Replikation
      2. Partitionierung von Schlüssel-Wert-Daten
        1. Partitionierung nach Schlüsselbereich
        2. Nach dem Hashwert des Schlüssels partitionieren
        3. Schiefe Arbeitslasten und Entlastung von Hotspots
      3. Partitionierung und Sekundärindizes
        1. Sekundärindizes nach Dokument partitionieren
        2. Sekundärindizes nach Begriff partitionieren
      4. Rebalancing – Partitionen gleichmäßig belasten
        1. Strategien für Rebalancing
        2. Operationen: Automatisches oder manuelles Rebalancing
      5. Anfragen weiterleiten
        1. Parallele Abfrageausführung
      6. Zusammenfassung
    3. 7 Transaktionen
      1. Das schwammige Konzept einer Transaktion
        1. Die Bedeutung von ACID
        2. Einzelobjekt- und Multiobjektoperationen
      2. Schwache Isolationsstufen
        1. Read Committed
        2. Snapshot-Isolation und Repeatable Read
        3. Verlorene Updates verhindern
        4. Schreibversatz und Phantome
      3. Serialisierbarkeit
        1. Tatsächliche serielle Ausführung
        2. Zwei-Phasen-Sperrverfahren (2PL)
        3. Serialisierbare Snapshot-Isolation (SSI)
      4. Zusammenfassung
    4. 8 Die Probleme mit verteilten Systemen
      1. Fehler und Teilausfälle
        1. Cloud-Computing und Supercomputing
      2. Unzuverlässige Netzwerke
        1. Netzwerkfehler in der Praxis
        2. Fehler erkennen
        3. Timeouts und unbeschränkte Verzögerungen
        4. Synchrone und asynchrone Netzwerke
      3. Unzuverlässige Uhren
        1. Monotone Uhren und Echtzeituhren
        2. Uhrensynchronisierung und Genauigkeit
        3. Sich auf synchronisierte Uhren verlassen
        4. Prozesspausen
      4. Wissen, Wahrheit und Lügen
        1. Die Wahrheit wird von der Mehrheit definiert
        2. Byzantinische Fehler
        3. Systemmodell und Realität
      5. Zusammenfassung
    5. 9 Konsistenz und Konsens
      1. Konsistenzgarantien
      2. Linearisierbarkeit
        1. Was macht ein System linearisierbar?
        2. Auf Linearisierbarkeit setzen
        3. Linearisierbare Systeme implementieren
        4. Die Kosten der Linearisierbarkeit
      3. Ordnungsgarantien
        1. Ordnung und Kausalität
        2. Ordnung nach Sequenznummern
        3. Total geordneter Broadcast
      4. Verteilte Transaktionen und Konsens
        1. Atomarer Commit und Zwei-Phasen-Commit (2PC)
        2. Verteilte Transaktionen in der Praxis
        3. Fehlertoleranter Konsens
        4. Mitgliedschafts- und Koordinationsdienste
      5. Zusammenfassung
  8. Teil III: Abgeleitete Daten
    1. 10 Stapelverarbeitung
      1. Stapelverarbeitung mit Unix-Tools
        1. Einfache Protokollanalyse
        2. Die Unix-Philosophie
      2. MapReduce und verteilte Dateisysteme
        1. MapReduce-Jobausführung
        2. Reduce-seitige Verknüpfungen und Gruppierungen
        3. Map-seitige Verknüpfungen
        4. Die Ausgabe von Stapel-Workflows
        5. Hadoop im Vergleich mit verteilten Datenbanken
      3. Jenseits von MapReduce
        1. Zwischenzustände materialisieren
        2. Graphen und iterative Verarbeitung
        3. Höhere APIs und Sprachen
      4. Zusammenfassung
    2. 11 Stream-Verarbeitung
      1. Ereignisströme übertragen
        1. Nachrichtensysteme
        2. Partitionierte Protokolle
      2. Datenbanken und Streams
        1. Systeme synchron halten
        2. Erfassen von Datenänderungen
        3. Event Sourcing
        4. Zustand, Streams und Unveränderlichkeit
      3. Streams verarbeiten
        1. Anwendungen der Stream-Verarbeitung
        2. Überlegungen zur Zeit
        3. Stream-Joins
        4. Fehlertoleranz
      4. Zusammenfassung
    3. 12 Die Zukunft von Datensystemen
      1. Datenintegration
        1. Spezialisierte Tools durch Ableiten von Daten kombinieren
        2. Batch- und Stream-Verarbeitung
      2. Die Entflechtung von Datenbanken
        1. Zusammenstellung verschiedener Datenspeichertechniken
        2. Anwendungen datenflussorientiert entwickeln
        3. Abgeleitete Zustände beobachten
      3. Auf der Suche nach Korrektheit
        1. Das Ende-zu-Ende-Argument für Datenbanken
        2. Durchsetzung von Einschränkungen
        3. Zeitnähe und Integrität
        4. Vertrauen ist gut, Kontrolle ist besser
      4. Das Richtige tun
        1. Prädiktive Analytik
        2. Datenschutz und Nachverfolgung
      5. Zusammenfassung
    4. 13 Glossar
  9. Index
  10. Fußnoten
  11. Über den Autor
  12. Kolophon

Product information

  • Title: Datenintensive Anwendungen designen
  • Author(s): Martin Kleppmann
  • Release date: November 2018
  • Publisher(s): dpunkt
  • ISBN: 9783960090755