23.06.2010
Aktuelle SE Praktiken für das
WWW
‚SQL vs. „NoSQL“„
W. Mark Kubacki
W. Mark Kubacki: „SQL vs. NoSQL“ 223.06.2010
Gliederung
• Zusammenfassung
• Entstehungsgeschichte ‚SQL vs. „NoSQL“„
• Systemarchitekturen und Wachstumsmuster
• SQL
• „NoSQL“
– Überblick und Einsatzbeispiele
– Verteilte Datenbanken
• SE Praktiken
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“ 323.06.2010
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“ 423.06.2010
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“ 523.06.2010
Systemarchitekturen
• Skalierbarkeit – Skalabilität
• Horizontale
• Vertikale
W. Mark Kubacki: „SQL vs. NoSQL“ 623.06.2010
Systemarchitekturen - 1:1
Anwendungsserver
Datenbank
W. Mark Kubacki: „SQL vs. NoSQL“ 723.06.2010
Frontend
Backend
Systemarchitekturen – n:1
Datenbank
W. Mark Kubacki: „SQL vs. NoSQL“ 823.06.2010
Systemarchitekturen – n:m(1)
Master
3 Spiegel
(nur Lesen)
W. Mark Kubacki: „SQL vs. NoSQL“ 923.06.2010
Systemarchitekturen - Verbesserungsideen
• Daten aufteilen
– „Partitionieren“
– „Sharding“
• Verteilte Datenbank nutzen
• Backend von Frontend entkoppeln
– Lastkurve glätten
W. Mark Kubacki: „SQL vs. NoSQL“ 1023.06.2010
Partitionierung
W. Mark Kubacki: „SQL vs. NoSQL“ 1123.06.2010
ID Name Alter Abteilung
6 Zeta 30 B
5 Epsilon 29 B
4 Delta 28 A
3 Gamma 27 B
2 Beta 26 A
1 Alpha 25 A
Server A Server B
ID muss ergänzt werden
ID Name Alter Abteilung
1 Alpha 25 A
2 Beta 26 A
3 Gamma 27 B
4 Delta 28 A
5 Epsilon 29 B
6 Zeta 30 B
Vertikale ~
Horizontale ~
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“ 1223.06.2010
Systemarchitekturen
• Warum nicht gleich eine bessere Lösung?
W. Mark Kubacki: „SQL vs. NoSQL“ 1323.06.2010
SQL
• Relationale Datenbanken
• SQL
– Verwaltung
– Abfrage
– Transformation
• Programme in PL/SQL
– etwa PostgreSQL: andere Sprachen
W. Mark Kubacki: „SQL vs. NoSQL“ 1423.06.2010
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“ 1523.06.2010
RDBMS – sind langsam?
• Datenorganisation
– festes Schema
– Speicherung in Zeilen (?)
• Row- ./. Column(ar)- ./. Correlation-Stores
W. Mark Kubacki: „SQL vs. NoSQL“ 1623.06.2010
Person Name Abteilung
101 Beta A
100 Alpha A
Person Name Abteilung
101 Beta A
100 Alpha A
OID
2
1
OID
2
1
OID
2
1
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“ 1723.06.2010
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“ 1823.06.2010
NoSQL
W. Mark Kubacki: „SQL vs. NoSQL“ 1923.06.2010
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“ 2023.06.2010
NoSQL
• Demo: Datenstrukturen
W. Mark Kubacki: „SQL vs. NoSQL“ 2123.06.2010
NoSQL - Datentransformation
ID Name Alter
4 Delta 28
3 Gamma 27
2 Beta 26
1 Alpha 25
Mitarbeiter
Mitarbeiter_1 Name
Mitarbeiter_4 Name Delta
Mitarbeiter_3 Name Gamma
Mitarbeiter_2 Name Beta
Alpha
Mitarbeiter_1:Name
Mitarbeiter_4:Name Delta
Mitarbeiter_3:Name Gamma
Mitarbeiter_2:Name Beta
Alpha
W. Mark Kubacki: „SQL vs. NoSQL“ 2223.06.2010
NoSQL – Einsatzbeispiele (1)
Nginx
Kommentar-Handler
Queue
Kommentar-Prozessor(en)
Redis oder MySQL
A1
A2
A3
A4
Q1Q2
Q3
GET
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“ 2323.06.2010
NoSQL – Einsatzbeispiele (2)
Static Cache / Memcachedb / Redis / Terracota Ehcache
gewöhnliches Backend
W. Mark Kubacki: „SQL vs. NoSQL“ 2423.06.2010
NoSQL – Einsatzbeispiele (2)
Nginx
Redis
oder
MySQL
Anwendung
Nginx
Redis
oder
MySQL
Anwendung
12
3
5
6.
12
3
4,9
45
8
10
Schritte 5-10 nur wenn 3
keine Seite. Schritt 10
liegt außerhalb des
kritischen Pfades.
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“ 2523.06.2010
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“ 2623.06.2010
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“ 2723.06.2010
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“ 2823.06.2010
NoSQL – Verteilte Datenbanken
Consistency
Partition
Tolerance
Availability
W. Mark Kubacki: „SQL vs. NoSQL“ 2923.06.2010
Nicht: System – Sondern: Algorithmus!
NoSQL – Verteilte Datenbanken
0-0
0-1
1-0
1-1
W. Mark Kubacki: „SQL vs. NoSQL“ 3023.06.2010
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“ 3123.06.2010
SE Praktiken
• Requirements Engineering:
– Was erfordern die Geschäftsprozesse des
Kunden?
– „Eventual Consistent Business?“
W. Mark Kubacki: „SQL vs. NoSQL“ 3223.06.2010
SE Praktiken
W. Mark Kubacki: „SQL vs. NoSQL“ 3323.06.2010
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“ 3423.06.2010