Aktuelle SE Praktiken für das WWW ‚SQL vs. „NoSQL“„ W. Mark Kubacki 23.06.2010 Gliederung • • • • • Zusammenfassung Entstehungsgeschichte ‚SQL vs. „NoSQL“„ Systemarchitekturen und Wachstumsmuster SQL „NoSQL“ – Überblick und Einsatzbeispiele – Verteilte Datenbanken • SE Praktiken W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 2 Zusammenfassung • ‚SQL vs. „NoSQL“„ ist eine Bewegung – Unzufriedener – Ignoranten? • • • • • Kritik an SQL und an relationalen DBMS „die“ Datenbank gibt es nicht aber mehr Auswahl spezielle Einsatzgebiete DB für eine Datenstruktur wählen, nicht umgekehrt. W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 3 Entstehungsgeschichte • „NoSQL“ ist nicht neu, SQL ist es • 90„er: „SQL vs. Objektorientierte“ • dedizierte Datenbanken Schlüssel/Wert Speicher • 1979: „dbm“, „sdbm“, BerkeleyDB • neu: – hauptspeicherbasierte DBs – verteilte DBs W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 4 Entstehungsgeschichte • • • • • • • • • Webanwendungen große Datenmengen „heiße“ Daten ‚response time„ (günstige) Skalierbarkeit einfache Einbindung Cloud Computing Grenzen von MySQL, PostgreSQL und Co. Rackspace 2009: Was machen wir? W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 5 Systemarchitekturen • Skalierbarkeit – Skalabilität • Horizontale • Vertikale W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 6 Systemarchitekturen - 1:1 Anwendungsserver Frontend Backend Datenbank W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 7 Systemarchitekturen – n:1 Datenbank W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 8 Systemarchitekturen – n:m(1) Master 3 Spiegel (nur Lesen) W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 9 Systemarchitekturen - Verbesserungsideen • Daten aufteilen – „Partitionieren“ – „Sharding“ • Verteilte Datenbank nutzen • Backend von Frontend entkoppeln – Lastkurve glätten W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 10 Partitionierung Server A Server B ID 1 2 3 4 5 6 Vertikale ~ Name Alpha Beta Gamma Delta Epsilon Zeta Alter 25 26 27 28 29 30 Abteilung A A B A B B ID muss ergänzt werden Horizontale ~ ID 1 Name Alpha Alter 25 2 3 Gamma A Beta 27 4 5 Epsilon 26 A 28 A 30 B B Delta 29 6 Abteilung B Zeta W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 11 Datenaufteilung • Horizontale Partitionierung Sharding • SQL so nicht mehr möglich • Datenverwaltung in Anwendung • • • • Weiteres Wachstum? Mehr DB-Server? Schemaänderungen? Konfigurationen? W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 12 Systemarchitekturen • Warum nicht gleich eine bessere Lösung? W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 13 SQL • Relationale Datenbanken • SQL – Verwaltung – Abfrage – Transformation • Programme in PL/SQL – etwa PostgreSQL: andere Sprachen W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 14 SQL • „SQL ist… – kompliziert“ – eine zusätzliche Sprache“ • • • • „Wir brauchen keine Transaktionen.“ „Funktioniert jetzt nicht mehr.“ „JOIN, JOIN, LEFT JOIN – was mit wem?“ „Sowieso nicht einheitlich, Sprache X schon.“ W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 15 RDBMS – sind langsam? • Datenorganisation – festes Schema – Speicherung in Zeilen (?) • Row- ./. Column(ar)- ./. Correlation-Stores Person 100 101 OID 1 2 Person 100 101 Name Alpha Beta OID 1 2 Abteilung A A Name Alpha Beta W. Mark Kubacki: „SQL vs. NoSQL“ OID 1 2 Abteilung A A 23.06.2010 16 RDBMS – sind unflexibel? • • • • • Schemaänderungen bei Columnar schnell DBMS = DB + Management System Storage kann getauscht werden SQL bleibt RDBMS bedeutet nicht zwingen auch SQL! – MonetDB: SQL, MAL, MIL, Xpath… W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 17 Eigene Erfahrungen • Amazon Xlarge, MySQL: – 8.000 – 12.000 Zeilen/s – 50ms mindestens pro Leseoperation • mit Schlüssel/Wert Speicher (Tokyo Cabinet): – „SQL in die Anwendung schieben“ – 200.000 Zeilen/s – <<1ms pro Leseoperation – Komprimierung möglich W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 18 NoSQL W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 19 NoSQL • Datenstruktur? – O(1), O(log N), O(N²)? • • • • • Verteilt? Schema-Äquivalenz? Foreign Keys, Trigger? Abfragesprache? Schnittstellen zur primären Sprache? W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 20 NoSQL • Demo: Datenstrukturen W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 21 NoSQL - Datentransformation Mitarbeiter ID 1 2 3 4 Name Alpha Beta Gamma Delta Alter 25 26 27 28 Mitarbeiter_1 Mitarbeiter_2 Mitarbeiter_3 Mitarbeiter_4 Mitarbeiter_1:Name Mitarbeiter_2:Name Mitarbeiter_3:Name Mitarbeiter_4:Name Name Name Name Name W. Mark Kubacki: „SQL vs. NoSQL“ Alpha Beta Gamma Delta Alpha Beta Gamma Delta 23.06.2010 22 A1 A4 NoSQL – Einsatzbeispiele (1) Redis oder MySQL Nginx Q3 A2 A3 GET Queue Q1 Q2 Kommentar-Handler Kommentar-Prozessor(en) A – Kommentare werden mit einem konstanten Text beantwortet. Q – Sie werden in die Queue geschrieben, aus der sich die Prozessoren bedienen. Q3 – Im Erfolgsfall wird die Seite ergänzt, gerendert und in die DB geschrieben. GET – Nginx bedient sich bei Lesezugriffen direkt aus der Datenbank. W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 23 NoSQL – Einsatzbeispiele (2) Static Cache / Memcachedb / Redis / Terracota Ehcache gewöhnliches Backend W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 24 6. 1 1 4, 9 NoSQL – Einsatzbeispiele (2) Nginx Schritte 5-10 nur wenn 3 keine Seite. Schritt 10 liegt außerhalb des kritischen Pfades. Nginx 3 2 2 5 8 5 4 Anwendung 3 Redis oder MySQL Redis oder MySQL Anwendung 10 1 – Anfrage 2 – Anfrage weitergereicht 3 – Anwendung an DB 4 – Rohdaten 5 – gerenderte Seite 6 – Antwort auf Anfrage 1 – Anfrage 2 – Nginx liest Redis 3 – gerenderte Seite direkt aus Redis 4 – Antwort auf Anfrage 5 – Anfrage weitergereicht 6-7 – (nicht abgebildet) Anwendung kommuniziert mit Datenbank 8 – gerenderte Seite 9 – Antwort auf Anfrage 10 – gerenderte Seite wird in Redis gespeichert W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 25 NoSQL – Einsatzbeispiele (2) • Datenstrukturen: – Queue – Schlüssel/Wert – Hashliste • Effizienz: – Zugriff in O(1) statt O(log N) – Kapazität Frontends ≤ KVS W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 26 NoSQL – Verteilte Datenbanken Es gibt auch verteilte RDBMS mit SQL! – eigentliche Verteilung – Föderation • Man zahlt pro CPU oder Rechner. W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 27 NoSQL – Verteilte Datenbanken Brewer‟s Cap Theorem: “Consistency, Availability, Tolerance to network Partitions. Theorem: You can have at most two of these properties for any shared-data system.” W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 28 NoSQL – Verteilte Datenbanken Consistency Availability Partition Tolerance Nicht: System – Sondern: Algorithmus! W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 29 NoSQL – Verteilte Datenbanken 0-0 1-0 0-1 1-1 W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 30 SE Praktiken • Objekt-Relational Mapper • Model strikt von anderem trennen – strikt! • Mehr als eine DB/DBMS? • Wo liegt die Hauptlast? – Kritischer Pfad! W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 31 SE Praktiken • Requirements Engineering: – Was erfordern die Geschäftsprozesse des Kunden? – „Eventual Consistent Business?“ W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 32 SE Praktiken W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 33 SQL vs. „NoSQL“ • Webanwendungen – Last, Interaktivität • SQL – langsam?, kann viel, RDBMS • „NoSQL“ – Datenstrukturen, Optimierungen – mehr Aufwand in der „Anwendung“ – leichter einfache Operationen umzusetzen • Programmierer – Ausbildung, Fähigkeiten W. Mark Kubacki: „SQL vs. NoSQL“ 23.06.2010 34