Wer trägt den Müll raus? Verteilung der Hauptaufgaben im DatenbankCaching (CbDBC) Joachim Klein, 26.09.2008 Ht tp Datenbank-Caching Customers WHERE Region=“west” SQ DB Cache SQL Web server Application server Web server Application server Web server Application logic Browser requests of clients L DB Server Customers WHERE Region=“east” Back-End (BE) DB Server Application server DB Cache SQL Front-End (FE) DB Server Verteilung der Hauptaufgaben im CbDBC 2 Ht tp Datenbank-Caching DBS Customers WHERE Region=“west” SQ DB Cache SQL Web server Application server Web server Application server Web server Application logic Browser requests of clients L DB Server Customers WHERE Region=“east” Back-End (BE) DB Server Application server DB Cache SQL Front-End (FE) DB Server Verteilung der Hauptaufgaben im CbDBC 3 Hauptaufgaben DBS Sondierung ➔ Laden, Entladen ➔ Synchronisation ➔ (Adaption) CacheDBMS ➔ BackendDBMS BackendDaten Wer? Wann? Gemeinsam? CacheDaten DBTransaktionen (Anfragen) Wie? ... ? Aufgabenverteilung? Verteilung der Hauptaufgaben im CbDBC 4 Funktionsprinzip (Constraint-basiertes Datenbank-Caching) SELECT p.Id, p.Name FROM Person, Abt WHERE p.Abt=a.Id AND a.Name='GBIS' order by p.Name Backend-Datenbank Abt. Id Name Gebäude 01 02 GBIS HIS 36 36 Person Id Name Ort Abt 1 2 3 4 KL MZ KL ZW 01 02 02 01 Andreas Thomas Jürgen Joachim Verteilung der Hauptaufgaben im CbDBC 5 Funktionsprinzip (Constraint-basiertes Datenbank-Caching) SELECT p.Id, p.Name FROM Person, Abt WHERE p.Abt=a.Id AND a.Name='GBIS' order by p.Name Backend-Datenbank Abt. Id Name Gebäude 01 02 GBIS HIS 36 36 Cache-Datenbank Person Id Name Ort Abt 1 2 3 4 KL MZ KL ZW 01 02 02 01 Andreas Thomas Jürgen Joachim C_Abt. Id 01 Name Gebäude GBIS 36 C_Per. Id Name Ort Abt 1 4 KL ZW 01 01 Verteilung der Hauptaufgaben im CbDBC Andreas Joachim 6 Funktionsprinzip (Constraint-basiertes Datenbank-Caching) Cache-Group (Cache-Metadaten) FC C_Abt. Id Name Gebäude Backend-Datenbank Abt. RCC Id Name Gebäude 01 02 GBIS HIS 36 36 C_Per. Id Name Ort Abt Cache-Datenbank Person Id Name Ort Abt 1 2 3 4 KL MZ KL ZW 01 02 02 01 Andreas Thomas Jürgen Joachim SELECT p.Id, p.Name FROM Person, Abt WHERE p.Abt=a.Id AND a.Name='GBIS' order by p.Name C_Abt. Id 01 Name Gebäude GBIS 36 C_Per. Id Name Ort Abt 1 4 KL ZW 01 01 Verteilung der Hauptaufgaben im CbDBC Andreas Joachim 7 Funktionsprinzip (Constraint-basiertes Datenbank-Caching) Cache-Group (Cache-Metadaten) FC C_Abt. Id Name Gebäude Backend-Datenbank Abt. RCC Id Name Gebäude 01 02 GBIS HIS 36 36 C_Per. Id Name Ort Abt Cache-Datenbank Person Id Name Ort Abt 1 2 3 4 KL MZ KL ZW 01 02 02 01 Andreas Thomas Jürgen Joachim SELECT p.Id, p.Name FROM Person, Abt WHERE p.Abt=a.Id AND a.Name='GBIS' order by p.Name C_Abt. Id 01 Name Gebäude GBIS 36 Cache-Unit „GBIS“ C_Per. Id Name Ort Abt 1 4 KL ZW 01 01 Verteilung der Hauptaufgaben im CbDBC Andreas Joachim 8 Problem: Verteilung Beispiel: Ladevorgang C_Abt. Id Name Gebäude Lade: Abt.Name=“GBIS“ C_Per. Id Name Ort Abt C_Ort Id Name Vorwahl Kreis Einfüllen der Daten sollte Bottom-Up erfolgen, da sonst RCCs verletzt werden. CacheDaten Verteilung der Hauptaufgaben im CbDBC 9 Problem: Verteilung Direktes Laden BackendDBMS Select-Anfrage CacheDBMS Anfrageergebnis Einfügung BackendDaten CacheDaten - Ablauf: • nur schematisch • wird mindestens ein mal pro zu füllender Tabelle durchlaufen Verteilung der Hauptaufgaben im CbDBC 10 Problem: Verteilung Direktes Laden BackendDBMS Select-Anfrage CacheDBMS ✔ Direktes Einfüllen der Anfrageergebnisse Anfrageergebnis Einfügung BackendDaten CacheDaten - Ablauf: • nur schematisch • wird mindestens ein mal pro zu füllender Tabelle durchlaufen Verteilung der Hauptaufgaben im CbDBC 11 Problem: Verteilung Direktes Laden BackendDBMS Select-Anfrage CacheDBMS ✔ Direktes Einfüllen der Anfrageergebnisse ✔ Cache-DBMS organisiert Ladevorgang (Backend-DBMS entlastet) Anfrageergebnis Einfügung BackendDaten CacheDaten - Ablauf: • nur schematisch • wird mindestens ein mal pro zu füllender Tabelle durchlaufen Verteilung der Hauptaufgaben im CbDBC 12 Problem: Verteilung Direktes Laden BackendDBMS Select-Anfrage CacheDBMS ✔ Cache-DBMS organisiert Ladevorgang (Backend-DBMS entlastet) Anfrageergebnis Einfügung BackendDaten ✔ Direktes Einfüllen der Anfrageergebnisse ✔ Backend benötigt keinerlei Cache-Metadaten CacheDaten - Ablauf: • nur schematisch • wird mindestens ein mal pro zu füllender Tabelle durchlaufen Verteilung der Hauptaufgaben im CbDBC 13 Problem: Verteilung Direktes Laden BackendDBMS Select-Anfrage CacheDBMS Anfrageergebnis Einfügung BackendDaten CacheDaten - Ablauf: • nur schematisch • wird mindestens ein mal pro zu füllender Tabelle durchlaufen Verteilung der Hauptaufgaben im CbDBC 14 Problem: Verteilung Direktes Laden BackendDBMS Select-Anfrage CacheDBMS ✗ Mehrfaches Anfragen vom Cache an Backend Latenzproblematik Anfrageergebnis Einfügung BackendDaten CacheDaten - Ablauf: • nur schematisch • wird mindestens ein mal pro zu füllender Tabelle durchlaufen Verteilung der Hauptaufgaben im CbDBC 15 Problem: Verteilung Direktes Laden BackendDBMS Select-Anfrage CacheDBMS Anfrageergebnis ✗ Mehrfaches Anfragen vom Cache an Backend Latenzproblematik ✗ Große Abhängigkeit vom Füllgrad der Cache-Tabellen Einfügung BackendDaten CacheDaten - Ablauf: • nur schematisch • wird mindestens ein mal pro zu füllender Tabelle durchlaufen Verteilung der Hauptaufgaben im CbDBC 16 Problem: Verteilung Direktes Laden BackendDBMS Select-Anfrage CacheDBMS Anfrageergebnis ✗ Große Abhängigkeit vom Füllgrad der Cache-Tabellen Einfügung BackendDaten ✗ Mehrfaches Anfragen vom Cache an Backend Latenzproblematik ✗ Unkontrollierbar lange Prädikate in Anfragen CacheDaten - Ablauf: • nur schematisch • wird mindestens ein mal pro zu füllender Tabelle durchlaufen Verteilung der Hauptaufgaben im CbDBC 17 Problem: Verteilung Indirektes Laden BackendDBMS Select-Anfragen Anfrageergebnisse CacheDBMS 1 CacheUnit 2 BackendDaten Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 18 Problem: Verteilung Indirektes Laden BackendDBMS Select-Anfragen Anfrageergebnisse CacheDBMS 1 CacheUnit 2 BackendDaten ✔ Cache-DBMS organisiert Ladevorgang (Backend-DBMS entlastet) Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 19 Problem: Verteilung Indirektes Laden BackendDBMS Select-Anfragen Anfrageergebnisse CacheDBMS 1 CacheUnit 2 BackendDaten Einfügungen ✔ Cache-DBMS organisiert Ladevorgang (Backend-DBMS entlastet) ✔ Backend benötigt keinerlei Cache-Metadaten CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 20 Problem: Verteilung Indirektes Laden BackendDBMS Select-Anfragen Anfrageergebnisse CacheDBMS 1 CacheUnit 2 BackendDaten Einfügungen ✔ Cache-DBMS organisiert Ladevorgang (Backend-DBMS entlastet) ✔ Backend benötigt keinerlei Cache-Metadaten ✔ Geringe Abhängigkeit vom Füllgrad der Cache-Tabellen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 21 Problem: Verteilung Indirektes Laden BackendDBMS Select-Anfragen Anfrageergebnisse CacheDBMS 1 CacheUnit 2 BackendDaten Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up ✔ Cache-DBMS organisiert Ladevorgang (Backend-DBMS entlastet) ✔ Backend benötigt keinerlei Cache-Metadaten ✔ Geringe Abhängigkeit vom Füllgrad der Cache-Tabellen ✔ Konstante Prädikatlänge in Anfragen Verteilung der Hauptaufgaben im CbDBC 22 Problem: Verteilung Indirektes Laden BackendDBMS Select-Anfragen Anfrageergebnisse CacheDBMS 1 CacheUnit 2 BackendDaten Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 23 Problem: Verteilung Indirektes Laden BackendDBMS ✗ Indirektes Einladen Select-Anfragen Anfrageergebnisse CacheDBMS 1 CacheUnit 2 BackendDaten Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 24 Problem: Verteilung Indirektes Laden BackendDBMS ✗ Indirektes Einladen Select-Anfragen Anfrageergebnisse CacheDBMS 1 CacheUnit 2 BackendDaten ✗ Mehrfaches Anfragen vom Cache an Backend Latenzproblematik Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 25 Ergebnisse Direktes Laden vs. indirektes Laden Homogene Kette, drei Cache-Tabellen 25000 C_2 20000 NU NU Zeit [ms] C_1 direktes Laden indirektes Landen 15000 10000 C_3 NU 5000 0 300 100 700 500 900 1100 1500 1900 2300 2700 1300 1700 2100 2500 2900 Verteilung der Hauptaufgaben im CbDBC 26 Problem: Verteilung Vorbereitetes, indirektes Laden CU-Anforderung BackendDBMS SelectAnfragen CacheUnit CacheDBMS 1 Cache-Unit CacheUnit 2 BackendDaten Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 27 Problem: Verteilung Vorbereitetes, indirektes Laden CU-Anforderung BackendDBMS SelectAnfragen CacheUnit CacheDBMS 1 Cache-Unit CacheUnit 2 BackendDaten ✔ Konstante Prädikatlänge in Anfragen Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 28 Problem: Verteilung Vorbereitetes, indirektes Laden CU-Anforderung BackendDBMS SelectAnfragen CacheUnit CacheDBMS 1 Cache-Unit CacheUnit 2 BackendDaten ✔ Konstante Prädikatlänge in Anfragen ✔ Geringe Abhängigkeit vom Füllgrad der Cache-Tabellen Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 29 Problem: Verteilung Vorbereitetes, indirektes Laden CU-Anforderung BackendDBMS SelectAnfragen CacheUnit CacheDBMS 1 Cache-Unit CacheUnit 2 BackendDaten ✔ Konstante Prädikatlänge in Anfragen ✔ Geringe Abhängigkeit vom Füllgrad der Cache-Tabellen Einfügungen ✔ Einmalige Anfrage an das Backend CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 30 Problem: Verteilung Vorbereitetes, indirektes Laden CU-Anforderung BackendDBMS SelectAnfragen CacheUnit CacheDBMS 1 Cache-Unit CacheUnit 2 BackendDaten Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 31 Problem: Verteilung Vorbereitetes, indirektes Laden CU-Anforderung BackendDBMS SelectAnfragen CacheUnit ✗ Indirektes Einladen CacheDBMS 1 Cache-Unit CacheUnit 2 BackendDaten Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 32 Problem: Verteilung Vorbereitetes, indirektes Laden CU-Anforderung BackendDBMS SelectAnfragen CacheUnit ✗ Indirektes Einladen CacheDBMS 1 Cache-Unit CacheUnit 2 BackendDaten ✗ Backend muss CacheGroup-Definitionen kennen Einfügungen CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 33 Problem: Verteilung Vorbereitetes, indirektes Laden CU-Anforderung BackendDBMS SelectAnfragen CacheUnit ✗ Indirektes Einladen CacheDBMS 1 Cache-Unit CacheUnit 2 BackendDaten Einfügungen ✗ Backend muss CacheGroup-Definitionen kennen ✗ Backend muss das Aufsammeln der Daten organisieren CacheDaten 1 aufsammeln: top-down 2 einfüllen: bottom-up Verteilung der Hauptaufgaben im CbDBC 34 Fazit: Verteilung ● ● Zentral: – Aufwand für die Verwaltung der verteilten Komponenten? – Verwaltung präziserer Metadaten: ● bietet gezieltere Verarbeitungsmöglichkeiten ● verursacht größeren Verwaltungsaufwand noch wesentlich komplizierter: – Synchronisation, Adaption Verteilung der Hauptaufgaben im CbDBC 35 Den Müll − bringt der Cache raus! Backend Cache Verteilung der Hauptaufgaben im CbDBC 36 Problem: Verteilung Beispiel: Ladevorgang (1) Backend-DBMS Cache-DBMS 1 Aufsammeln, Einladen (in einem Schritt) 2 Aufsammeln, Einladen (in getrennten Schritten) 3 Aufsammeln 4 Aufsammeln, Einladen (in getrennten Schritt) 5 Aufsammeln, Einladen (in einem Schritt) Einladen C_Abt. Id Name Gebäude C_Per. Id Name Ort Abt C_Ort Id Name Vorwahl Kreis CacheDaten Verteilung der Hauptaufgaben im CbDBC 37 Problem: Verteilung Vor- und Nachteile Vorteile 1 2 - Backend ist entlastet - direktes Einladen - Backend benötigt keinerlei zusätzliche Metadaten - Backend ist entlastet - Backend benötigt keinerlei zusätzliche Metadaten - unkontrollierbar lange Prädikate in Anfragen - kleine Abhängigkeit vom Füllgrad der Cache-Tabellen 3 - einmalige Anfrage - Backend verwaltet Metadaten/Wissen - kleine Abhängigkeit vom Füllgrad der Cache-Tabellen - kleine Abhängigkeit vom Füllgrad der Cache-Tabellen - Cache ist entlastet - mehrfache Anfragen Nachteile - große Abhängigkeit vom Füllgrad der Cache-Tabellen - Backend hat kein Wissen (z. B. über den Füllzustand) - indirektes Einladen - mehrfache Anfragen - Backend hat kein Wissen (z. B. über den Füllzustand) 4 - indirektes Einladen - Backend teilweise belastet 5 - Cache ist entlastet - direktes Einladen - große Abhängigkeit vom Füllgrad der Cache-Tabellen - indirektes Einladen - unkontrollierbar lange Prädikate in Anfragen - mehrfache Einfügeoperationen - mehrfache Einfügeoperationen - Backend benötigt komplettes Wissen - Backend benötigt komplettes Wissen - Backend ist stark belastet - Backend ist stark belastet Verteilung der Hauptaufgaben im CbDBC 38