Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx...
Transcript of Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx...
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