Verteilte Datenbanken

Werbung
Verteilte Datenbanken
Motivation
• Eine Bank, die geographisch verteilt ist mit ihren Filialen
• Einzelne Filialen sollen autonom die Daten der lokalen Kunden
bearbeiten
• Auch andere Filialen müssen aber Zugriff auf diese Informationen
haben: z.B. für Kontostandsüberprüfung
• Klassischer Fall für den Einsatz eines verteilten Datenbanksystems
Zentralisiertes vs. Verteiltes DB System
• Zentralisiertes DB System
•
•
•
•
Ein einziges Front End
Ein einziges Speicherort für Sperren
Im Falle eines Prozessor Crashes → Totalausfall
Nachteil: keine Knotenautonomie → problematisch für geographisch
verteilten Systemen
• Verteiltes DB System
• Mehrere Prozessoren ( + Speicherplatz)
• Heterogenität und Autonomie der
einzelnen Stationen des Netzwerks
Verteilte Datenbanken
• Die Daten werden auf mehreren Stationen/Knoten/Sites gespeichert, jeweils
durch ein DBMS verwaltet, das unabhängig auf den einzelnen Knoten läuft
• Es handelt sich über eine Kooperation zwischen autonom arbeitenden
Stationen
• Die logische Sicht als eine Datenbank wird in verteilten Datenbanken durch
die Implementierung eines globalen Schemas realisiert
• Verteilte Datenunabhängigkeit (Distributed Data Independece): Benutzer
brauchen nicht zu wissen, wo sich die Daten wirklich befinden
• Erweiterung des Prinzips der physischen und logischen Datenunabhängigkeit
• Wird auch als Transparenz bezeichnet
• Verteilte Transaktionsatomarität (Distributed Transaction Atomicity):
Benutzer müssen in der Lage sein Transaktionen zu schreiben, die auf
mehreren Knoten laufen, sich aber wie lokale Transaktionen verhalten (ACIDEigenschaften)
Beispiel
• Eine große Firma hat Büros in London, New York und Hong Kong
• Die Daten der Angestellten werden meistens lokal verwaltet (wo der
Angestellte arbeitet)
• z.B. Payroll, benefits,
• Regelmäßig braucht die Firma Zugriff zu allen Daten über
Angestellten
• z.B. Berechnen aller Payroll Kosten
• z.B. Berechnen des globalen Gewinns
• Wo soll die Tabelle mit den Angestellten gespeichert werden?
London Payroll
App
New York Payroll
App
Angestellte
New York
London
London Payroll
App
Hong Kong
NY und HK Payroll Apps
sind sehr langsam!
London Payroll
App
New York Payroll
App
Lon Angestellte
New York
London
London Payroll
App
HK Angestellte
Hong Kong
NY Angestellte
Verteilung erlaubt
parallele Ausführung
London
Payroll App
Gesamte
Payroll App
London
New York Payroll
App
Lon, NY
Angestellte
London Payroll
App
HK Angestellte
Hong Kong
New York
NY, HK
Angestellte
Datenreplikation
Typen von verteilten Datenbanken
• Homogen: auf jedem Knoten läuft der gleiche Typ des DBMS
• Heterogen: auf verschiedenen Knoten laufen verschiedene DBMS
(relationale oder auch nicht-relationale DBMS)
Gateway
Gateway
Gateway
DBMS1
DBMS2
DBMS3
• Ein Gateway: ein Software, der die Anfragen weiter an dem lokalen
DBMS sendet und dann das Ergebnis an dem Anfragesteller schickt
Besonderheiten in VDBMS (verteilte DBMS)
• VDBMS Entwurf
• Entscheiden welche Daten wo gespeichert werden
• Dazu ist ein umfassendes Wissen über die zu erwartenden Anwendungen auf
der Datenbank notwendig
• Zwei Probleme:
• Fragmentierungsschema: logisch zusammengehörige Relationen werden
in disjunkte Fragmente zerlegt
• Daten mit ähnlichem Zugriffsmuster werden in einem Fragment
zusammengefasst
• Zuordnungsschema / Allokationsschema: die Zuordnung der Fragmente
auf Stationen
Besonderheiten in VDBMS (verteilte DBMS)
• Verteilte Anfragebearbeitung
• Es ist die Aufgabe des Anfrageübersetzers, einen Anfrageauswertungsplan auf den
Fragmenten zu generieren → Fragmentierungstransparenz
• Zusätzliche Aspekten zu betrachten im verteilten Fall:
• Kommunikationskosten
• Parallele Anfragebearbeitung
• Viel mehrere möglichen Ausführungspläne
• Verteilte Nebenläufigkeitskontrolle (Concurrency Control)
• Transaktionen können sich über mehrere Rechnerknoten entstrecken
• Globale Serialisierbarkeit
• Erkennung und Vermeidung von Deadlocks in verteilten Datenbanken
• Replizierte Daten bei Änderungen synchronisieren (mehrere Kopien auf
unterschiedlichen Knoten)
Besonderheiten in VDBMS (verteilte DBMS)
• Fehlermöglichkeiten im verteilten Fall
• Knotenfehler: Totalausfall oder partieller Ausfall
• Kommunikationsfehler
• Nachrichtenverlust, Nachrichtenverfälschung, doppelte Nachrichten
• Netzwerkpartitionierung: Aufteilung betriebsbereiter Rechner in disjunkte
Partitionen
• Gefährdung der Atomarität von Transaktionen
• Verteilte Commit-Protokolle
• Anforderungen
• Verteilte Synchronisation zur Gewährleistung der Konsistenz
• Commit als atomares Ereignis! Gleichzeitigkeit bei verteilten Knoten
VDBMS Architekturen
Klient-Server
• Ein „degeneriertes“ VDBMS, nur der Server speichert Daten ab
• Klient sendet eine Abfrage an einen einzigen Knoten.
• Gesamte Query-Verarbeitung findet auf Server statt
• Die Klienten können also DatenverarbeitungsKlient
operationen nur im Zusammenspiel mit dem
Abfrage
zentralen Server durchführen
Server
Klient
VDBMS Architekturen
Kollaboratives Server
• Eine Abfrage kann sich über mehrere
Rechnerknoten entstrecken
Middleware System
• Eine Abfrage wird von einem Knoten
bearbeitet, aber eine Transaktion kann
sich über mehrere Recherknoten
entstrecken
• Spezielle Softwareschicht zur
Koordination von Queries und
Transaktionen zwischen mehreren DBMS
Server
Abfrage
Server
Klient
Server
Abfrage
Klient
Server
Middleware
Server
Server
Storing Data
• Fragmentierung
• Horizontal: gewöhnlich disjunkt
• Vertikal: Zerlegung in verlustfreie JoinRelationen
• Replikation
• Erhöhte Verfügbarkeit
• Schnellere Query-Verarbeitung
• Synchron vs. Asynchron
TID
Id1
Id2
Id3
Fragmentierung
• Fragmentierung: eine Relation wird in kleineren Teile, Fragmente, aufgeteilt;
anstatt die ganze Relation werden die Fragmente auf die Stationen gespeichert
• Verschieden Methoden zur Fragmentierung einer Relation:
• Horizontale Fragmentierung: die Relation wird in disjunkte Tupelmengen zerlegt
mit Hilfe einer Qualifikationsbedingung
• Primäre horizontale Fragmentierung: Eine Tupelaufteilung aufgrund einer
Qualifikationsbedingung, die nur auf Attributen der Ausgangrelation beruht
• Abgeleitete horizontale Fragmentierung: wenn zur Auswertung der
Qualifikationsbedingung eine Verbundoperation mit einer anderen Relation
erforderlich ist
• Vertikale Fragmentierung: Attribute mit gleichem Zugriffsmuster werden
zusammengefasst
• Verlustfreier Join (lossless-join)
• Die Relation wird vertikal durch Ausführung von Projektionen zerlegt
• Kombinierte Fragmentierung
Korrektheits-Anforderungen
• Korrektheits-Anforderungen an eine Fragmentierung
R ⇒ F = {F1, F2, ...,Fn}
1. Rekonstruierbarkeit: Die fragmentierte Relation lässt sich aus den
Fragmenten wiederherstellen
Es gibt eine Abbildung g, so dass R = g(F1, F2, ..., Fn)
1. Vollständigkeit: Jedes Datum ist einem Fragment zugeordnet
∀ x ∈ R, ∃ Fi ∈ F, so dass x ∈ Fi
1. Disjunktheit: Die Fragmente überlappen sich nicht, d.h. Ein Datum ist nicht
mehreren Fragmenten zugeordnet
∀ x ∈ Fi , ∄ Fj so dass x ∈ Fj , i≠j
Allokation
• Man unterscheidet zwei Arten der Allokation:
• Redundanzfreie Allokation: jedes Fragment wird genau einer Station zugeordnet
• Eine N:1 Zuordnung
• Allokation mit Replikation: einige Fragmente werden repliziert und mehreren
Stationen zugeordnet
• Eine N:M Zuordnung
Katalogverwaltung
• Kontrolle darüber notwendig, wie die Daten über die einzelnen
Knoten hinweg verteilt werden
• Globale Kataloge: enthalten Metadaten wie: das globale
konzeptionelle Schema, das Fragmentierungsschema sowie das
Allokationsschema
• Lokale Kataloge: enthalten Metadaten, die nur knotenlokale
Bedeutung haben (z.B. Lokales konzeptionelles Schema)
• Die Metadaten werden selbst als Relationen abgelegt → die VDBMS
Zugriffsmechanismen können die Metadaten nutzen
• Die Verteilung der Metadaten spielt auch eine wichtige Rolle
Katalogverwaltung
Mögliche Architekturen im verteilten Fall eines globalen Katalogs:
• Zentralisierter Katalog: in einem zentralen Knoten gespeichert
• Hoher Kommunikationsaufwand, potentielle Leistungs- und Verfügbarkeitsprobleme
• Replizierter Katalog: jeder Knoten enthält eine vollständige Kopie der globalen Katalogdaten
• Vorteil: Zugriff um Daten zu lesen ist immer local
• Nachteil: Änderungen sind sehr aufwendig
• Mehrfachkataloge: die Rechner sind in Clusters partitioniert, wobei pro Cluster jeweils ein
Knoten den globalen Katalog hält
• Reduziertes Änderungsaufwand
• Kommunikation für jeden globalen Katalogzugriff ist weiterhin erforderlich
• Partitionierter Katalog: der globale Katalog wird unter allen Rechner partitioniert gespeichert
• Unterstützt den höchsten Grad an Knotenautonomie
• Der Nachteil der Kommunikationsvorgänge für Katalogzugriffe kann durch ein Caching
abgeschwächt werden
Katalogverwaltung
• Es muss möglich sein, jedes Replikat von jedem Fragment zu
indentifizieren
• Anforderungen:
• Globale Eindeutigkeit
• Ortsunabhängigkeit
• Lokal autonome Namensvergabe: bei Erzeugung neuer Objekte soll eine
lokale Namensvergabe möglich sein, welche die globale Eindeutigkeit
sicherstellt ohne Kommunikation mit anderen Knoten → Knotenautonomie
• <local-name, birth-site>
• <local-name, birth-site, replica-id> - global eindeutige Kombination aus lokalem Name
und Ursprungsknoten (wo die Relation erzeugt wurde)
Katalogverwaltung
• Bei der Verwaltung und Speicherung von Objekten sind drei Arten von
Knoten beteiligt:
• Birth site / Ursprungsknoten – der Knoten an dem ein Objekt erzeugt wurde
• Catalog site – der/die Knoten, an dem Katalogdaten zu dem Objekt verwaltet
werden
• Store site – die Knoten, an denen das Objekt gespeichert ist
• Site Catalog: beschreibt alle Objekte (Fragmente, Replikate) auf einem
Knoten und kontrolliert die Replikate der Relationen, die auf diesem
Knoten erzeugt wurden
• Zum Auffinden einer Relation genügt das Suchen im Katalog seines
Ursprungsknotes
• Ursprungsknoten ändert sich niemal, auch beim Verschieben der Relation zu
anderen Knoten
Daten Replikation
• Eine Relation oder Teile der Relation (Fragmente) werden repliziert
und die Kopien werden unterschiedlichen Stationen zugeordnet
• Nur Leseanwendungen werden bevorteilt → effiziente
Anfragebearbeitung (man kann eine lokale Kopie benutzen)
• Änderungen müssen auf allen Kopien durchgeführt werden
• Ziele:
• Erhöhung der Verfügbarkeit und der Zuverlässigkeit (wenn ein Server ausfällt,
dann kann man einen anderen benutzen)
• Eine Verbesserung des Antwortzeitverhaltens
Daten Replikation - Beispiel
• R ist in R1, R2 und R3 fragmentiert
• R1 wird auf dem Knoten A und B repliziert
Knoten B
Knoten A
R1
R3
R1
R2
Daten Replikation
• Synchrone Replikation:
Alle Kopien der geänderten Relation/Fragment müssen geändert
werden vor dem Commit der modifizierenden Transaktion
• Datenverteilung ist transparent für die Benutzer
• Asynchrone Replikation:
Kopien der modifizierten Relation/Fragment werden nur regelmäßig
synchronisiert
• Verschiedene Kopien können inzwischen inkonsistent werden
• Heutige Produkte folgen diesem Ansatz (komerziell verfügbare Replication
Server)
Synchrone Replikation
• Voting Verfahren: Transaktion muss eine Mehrheit der Kopien schreiben,
um ein Objekt zu modifizieren; Transaktion muss genung Kopien lessen,
um sicher zu sein,zumindest eine jüngste Kopie zu sehen
• Bsp.: 10 Kopien, 7 geschrieben für Update, 4 Kopien lesen
• Jede Kopie hat eine Version-Nummer
• Gewöhnlich nicht attraktiv weil Read sehr häufig sind
• Read-any Write-all Verfahren / Read-one-Write-all (ROWA): Verlangt
die synchrone Änderung aller Replikate vor Abschluss der Transaktion
• Dadurch wird gesichert, dass jedes Replikat auf dem aktuellen Stand ist
• Zum Lesen kann jedes beliebige Replikat ausgewählt werden → erhöhte
Verfügbarkeit für Lesezugriffe
• Relativ zum Voting: Writes sind langsamer und Read sind schneller
• Verbreitester Ansatz zur synchronen Replikation
Synchrone Replikation - Kosten
• Bevor eine Update-Transaktion ein Commit machen kann, muss sie
sperren auf allen modifizierten Kopien erhalten:
• Sendet Sperranforderungen an die anderen Knoten, wartet auf Antowrt, hält
die anderen Sperren
• Wenn Knoten oder Verbindungen fehlerhaft sind, kann die Transaktion kein
Commit machen, bis ein Backup aktiv ist
• Selbst, wenn kein Fehler auftritt, folgt das Commit einem teuren CommitProtokoll mit vielen Messages
• Daher ist die Alternative asynchrone Replikation weit verbreitet
Asynchrone Replikation
• Erlaubt der Update-Transaktion ein Commit, bevor alle Kopien
geändert wurden (wobei Leser trotzdem nur eine Kopie sehen)
• Benutzer müssen wissen, welche Kopie sie lesen und dass Kopien für
kurze Zeitabschnitte inkonsistent sein können
• Zwei Ansätze:
• Primary-Site Replikation (Primary-Copy)
• Peer-to-Peer Replikation
• Differenz besteht darin, wieviele Kopien änderbar sind (diese heißen auch
Master-Kopien)
Asynchrone Replikation:
Peer-to-Peer Replikation
• Mehr als eine der Kopien eines Objektes kann Master sein
• Änderungen auf einer Master-Kopie müssen irgendwie zu anderen Kopien hin
propagiert werden
• Wenn zwei Master-Kopien in einer Weise geändert werden, die zum Konflikt führt,
muss dies aufgelöst werden, z.B.:
• Knoten 1: Alter von Markus wurde auf 35 geändert
• Knoten 2: Alter von Markus wurde auf 36 geändert
• Am besten einsetzbar, wenn keine Konflikte entstehen können:
• Beispiel: Jeder Masterknoten besitzt ein disjunktes (horizontales) Fragment → Änderungen
der Daten von deutschen Angestellten in Frankfurt, Änderungen bei indischen Angestellten in
Madras, obwohl gesamte Datenmenge in beiden Knoten gespeichert
• Beispiel: Änderungsrechte liegen zu einem bestimmten Zeitpunkt bei nur einem Master
Asynchrone Replikation:
Primary-Site Replikation
• Genau eine Kopie einer Relation wird bestimmt als Primär- oder
Masterkopie. Replikate auf anderen Knoten dürfen nicht direkt geändert
werden
• Die Primärkopie ist öffentlich (public)
• Andere Seiten abonnieren diese Relation bzw. Fragmente davon
(subscribe); diese weden als Sekundärkopien bezeichnet
• Die Aktualisierung der anderen Replikate wird dann asynchron vom PrimaryCopy-Rechner aus durchgeführt (nach Ende der Änderungstransaktion)
Asynchrone Replikation:
Primary-Site Replikation
Hauptproblem: Wie werden Änderungen auf der Primärkopie zu den
Sekundärkopien propagiert?
• Erfolgt in zwei Schritten:
1. Erfassen der Änderungen, die von den erfolgreich beendeten
Transaktionen gemacht wurden (Capture)
2. Durchführen dieser Änderungen (Apply)
Implementierung des 1. Schritts:
Capture (Erfassung)
• Log-Basierte Erfassung: Der Log (angelegt für Recovery) wird
verwendet zur Generierung einer Tabelle der geänderten Daten =
Change Data Table (CDT)
• Beim Schreiben des aktuellen Log-Abschnitts auf Platte muss darauf geachtet
werden, dass die Änderungen wieder entfernt werden, die von später
abgebrochenen Transaktionen stammen
• Prozedurale Erfassung: Eine Prozedur, die automatisch aufgerufen wird
(z.B. Trigger), macht die Erfassung :
• Typisch ist die Aufnahme eines Schnappschusses der Primärkopie (Snapshot)
Implementierung des 1. Schritts:
Capture (Erfassung)
• Log-Basierte Erfassung ist besser als Prozedurale Erfassung:
• Geringer Aufwand → billiger
• Geringere Verzögerung zwischen Änderung der Daten und der Propagierung
der Änderungen → schneller
• Nachteil: erfordert vertieftes Verständnis der Struktur der system-spezifischen
Logs
Implementierung des 2. Schritts: Apply
• Der Apply-Prozess auf dem Sekundärknoten bekommt periodisch
Snapshots oder Änderungen der Änderungstabelle vom Primärknoten und
ändert die Kopie
• Periode kann zeitbasiert sein oder definiert durch Benutzer / Applikation
• Replikat kann auch ein Sicht auf der modifizierten Relation sein
• In diesem Fall besteht die Replikation aus einem inkrementellen Update der
materailisierten Sich, wenn sich die Relation ändert
• Log-basierte Erfassung zusammen mit einem kontinuierlichen Apply der
Änderungen minimiert die Verzögerung bei der Propagierung der
Änderungen
• Prozedurale Erfassung zusammen mit einem applikations-getriebenen
(application-driven) „Apply“ der Änderungen ist die flexibelste Art,
Änderungen zu verarbeiten
Data Warehousing und Replikation
• Aktueller Trend: Aufbau gigantischer Data Warehouses, die aus vielen
Knoten bestehen
• Erlaubt komplette Anfragen zur Entscheidungsunterstützung (Decision Support)
auf Daten über die ganze Organisation hinweg
• Warehouses können als eine Instanz von asynchroner Replikation
gesehen werden
• Source-Daten typischerweise kontrolliert durch verschiedene DBMS
• Schwerpunkt auf Bereinigung der Daten (Data Cleaning) und Beseitigung von
syntaktischer und semantischer Heterogenität (z.B. $ vs € ) beim Erzeugen der
Replikate
• Schnapschuss-Replikation (prozedurale Erfassung):
• wird durch zunehmende Anzahl komerzieller Produkte unterstützt (z.B. IBM Data
Propagator, Oracle Replication Server)
Beispiel – Verteilte Queries
SELECT AVG(S.Age)
FROM Sailors S
WHERE S.Rating > 3
AND S.Rating < 7
• Horizontal Fragmentiert: Tupel mit Rating < 5 in Shanghai, >= 5 in
Tokio
• Muss die Funktionen SUM(Age), COUNT(Age) auf beiden Knoten berechnen
• Wenn die WHERE-Klausel hieße: S.Rating >= 6, wäre nu ein Knoten beteiligt
• Vertikal Fragmentiert: SId und Rating in Shanghai, Sname und Age in
Tokyo, TId in beiden
• Relation muss über den Tupel-Identifier TId durch Join rekonstruiert werden,
danacah Auswertung der Query
• Repliziert: Kopien der Relation Sailors auf beiden Seiten
• Wahl des Knoten basiert auf lokalen Kosten und Transportkosten
Herunterladen