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

Preview:

Citation preview

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

Recommended