Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx...

34
23.06.2010 Aktuelle SE Praktiken für das WWW ‚SQL vs. NoSQL“„ W. Mark Kubacki

Transcript of Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx...

Page 1: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

23.06.2010

Aktuelle SE Praktiken für das

WWW

‚SQL vs. „NoSQL“„

W. Mark Kubacki

Page 2: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 3: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 4: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 5: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 6: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

Systemarchitekturen

• Skalierbarkeit – Skalabilität

• Horizontale

• Vertikale

W. Mark Kubacki: „SQL vs. NoSQL“ 623.06.2010

Page 7: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

Systemarchitekturen - 1:1

Anwendungsserver

Datenbank

W. Mark Kubacki: „SQL vs. NoSQL“ 723.06.2010

Frontend

Backend

Page 8: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

Systemarchitekturen – n:1

Datenbank

W. Mark Kubacki: „SQL vs. NoSQL“ 823.06.2010

Page 9: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

Systemarchitekturen – n:m(1)

Master

3 Spiegel

(nur Lesen)

W. Mark Kubacki: „SQL vs. NoSQL“ 923.06.2010

Page 10: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 11: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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 ~

Page 12: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 13: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

Systemarchitekturen

• Warum nicht gleich eine bessere Lösung?

W. Mark Kubacki: „SQL vs. NoSQL“ 1323.06.2010

Page 14: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

SQL

• Relationale Datenbanken

• SQL

– Verwaltung

– Abfrage

– Transformation

• Programme in PL/SQL

– etwa PostgreSQL: andere Sprachen

W. Mark Kubacki: „SQL vs. NoSQL“ 1423.06.2010

Page 15: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 16: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 17: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 18: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 19: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

NoSQL

W. Mark Kubacki: „SQL vs. NoSQL“ 1923.06.2010

Page 20: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 21: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

NoSQL

• Demo: Datenstrukturen

W. Mark Kubacki: „SQL vs. NoSQL“ 2123.06.2010

Page 22: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 23: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 24: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

NoSQL – Einsatzbeispiele (2)

Static Cache / Memcachedb / Redis / Terracota Ehcache

gewöhnliches Backend

W. Mark Kubacki: „SQL vs. NoSQL“ 2423.06.2010

Page 25: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 26: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 27: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 28: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 29: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

NoSQL – Verteilte Datenbanken

Consistency

Partition

Tolerance

Availability

W. Mark Kubacki: „SQL vs. NoSQL“ 2923.06.2010

Nicht: System – Sondern: Algorithmus!

Page 30: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

NoSQL – Verteilte Datenbanken

0-0

0-1

1-0

1-1

W. Mark Kubacki: „SQL vs. NoSQL“ 3023.06.2010

Page 31: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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

Page 32: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

SE Praktiken

• Requirements Engineering:

– Was erfordern die Geschäftsprozesse des

Kunden?

– „Eventual Consistent Business?“

W. Mark Kubacki: „SQL vs. NoSQL“ 3223.06.2010

Page 33: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

SE Praktiken

W. Mark Kubacki: „SQL vs. NoSQL“ 3323.06.2010

Page 34: Aktuelle SE Praktiken für das NoSQL –Einsatzbeispiele (2) Nginx Redis oder MySQL Anwendung Nginx Redis oder MySQL Anwendung 1 2 3 5 6 . 1 2 3 4 , 9 4 5 8 10 Sc h r i t t e 5-10

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