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

Post on 20-May-2020

2 views 0 download

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