it's time to rethink datenbank-design in der schönen neuen ... · orientation in objects gmbh...

Post on 23-Aug-2019

217 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Orientation in Objects GmbH

Weinheimer Str. 68

68309 Mannheim

www.oio.de

info@oio.de Version:

– It's time to rethink –

Datenbank-Design in der

schönen neuen Welt

1.1

Java User Group Hessen 2015

Datenbank Design © 2015 Orientation in Objects GmbH

Ihr Sprecher

Thorsten Maier

Trainer, Berater, Entwickler

Schwerpunkte Prozesse

Architektur Code-Qualität

eigentlich kein „Datenbänker“

2

Datenbank Design © 2015 Orientation in Objects GmbH

Um was geht’s?

3

Die Welt des Betriebs

Datenbank Design © 2015 Orientation in Objects GmbH

Um was geht’s?

4

Die Welt der Entwickler

Datenbank Design © 2015 Orientation in Objects GmbH

Um was geht’s?

5

Die Welt der Entwickler Die Welt des Betriebs

Datenbank Design © 2015 Orientation in Objects GmbH 6

Die schöne neue Welt

Continuous Delivery

Datenbank Design © 2015 Orientation in Objects GmbH

300.000.000 Benutzer

300.000 reads/sec

6000 writes/sec

400.000.000 Tweets/day

Lady Gaga hat 49.000.000 Follower

7

Noch mehr schöne neue Welt

Twitter

Datenbank Design © 2015 Orientation in Objects GmbH

Continuous Delivery ist genial

Wir müssen (fast) alles anders machen

Keine Downtime

DB kontrolliert ändern

8

Datenbank Design © 2015 Orientation in Objects GmbH

+ Schnellere Reaktionszeiten

+ Weniger Risiko

3 Monats- Releases

Continuous Delivery

9

Datenbank Design © 2015 Orientation in Objects GmbH 10

Continuous Delivery für alle?

Projekt oder Produkt

Datenbank Design © 2015 Orientation in Objects GmbH

Continuous Delivery ist genial

Wir müssen (fast) alles anders machen

Keine Downtime

DB kontrolliert ändern

11

Wir müssen (fast) alles anders machen

Datenbank Design © 2015 Orientation in Objects GmbH 12

„Wer schafft mindestens 1 Produktions-Release

pro Tag?“

Datenbank Design © 2015 Orientation in Objects GmbH 13

Deploy ≠ Feature Launch

Datenbank Design © 2015 Orientation in Objects GmbH 14

„Können Sie ohne Downtime deployen?“

Datenbank Design © 2015 Orientation in Objects GmbH

Blue-Green-Deployment

15

Router

Blue Server

Green Server DB

Datenbank Design © 2015 Orientation in Objects GmbH

Blue-Green-Deployment

16

Router

Blue Server

Green Server DB

Kann unsere Anwendung das?

Datenbank Design © 2015 Orientation in Objects GmbH 17

Was passiert mit den eingeloggten Usern beim

Umschalten zwischen blau und grün?

Datenbank Design © 2015 Orientation in Objects GmbH 18

Server 1 Sync Sessions

Server 2

Datenbank Design © 2015 Orientation in Objects GmbH 19

Server 1 Server 2

Session Store Memcache, Infinispan, …

Datenbank Design © 2015 Orientation in Objects GmbH

Application-Server sind tot

20

Datenbank Design © 2015 Orientation in Objects GmbH

Was spricht gegen Application-Server?

• Der Betrieb erwartet ein „RPM für Linux“ und kein „WAR / EAR“

– Spezielles Monitoring für App-Server notwendig

• App-Server für mehrere Apps wird praktisch nicht verwendet

– eher Clustering von mehreren App-Servern

• App-Server bringt Bibliotheken mit und verhindert somit ein

einfaches Update

• App-Server ist ein Problem im Umfeld von Continuous Delivery

– Deployment-Artefakte können durch die Deployment-Pipe geschoben

werden, aber was ist mit der App-Server-Version?

21

Datenbank Design © 2015 Orientation in Objects GmbH

Abhängigkeiten in App-Servern

22

App-Server Java EE 7

Shared Libs

JPA 2.1

JTA 1.2

Servlet 3.1

Web-App 1

Web-App 2

Spring

JSF 2.2

Richfaces HTTP

JPA 1.0

Hibernate 3

Datenbank Design © 2015 Orientation in Objects GmbH

Web-App 2

Web-App 1

Abhängigkeiten OHNE App-Server

23

JPA 2.1

JTA 1.2

Servlet 3.1

Spring

JSF 2.2

Richfaces

JPA 1.0

Hibernate 3

JTA 1.2

Servlet 3.1

HTTP

HTTP

Datenbank Design © 2015 Orientation in Objects GmbH

Sind Application-Server tot?

com.example:myproject:jar:0.0.1-SNAPSHOT

\- org.springframework.boot:spring-boot-starter-web:jar:1.1.1.BUILD-SNAPSHOT:compile

+- org.springframework.boot:spring-boot-starter:jar:1.1.1.BUILD-SNAPSHOT:compile

| +- org.springframework.boot:spring-boot:jar:1.1.1.BUILD-SNAPSHOT:compile

| +- org.springframework.boot:spring-boot-autoconfigure:jar:1.1.1.BUILD-SNAPSHOT:compile

| +- org.springframework.boot:spring-boot-starter-logging:jar:1.1.1.BUILD-SNAPSHOT:compile

| | +- org.slf4j:jcl-over-slf4j:jar:1.7.7:compile

| | | \- org.slf4j:slf4j-api:jar:1.7.7:compile

| | +- org.slf4j:jul-to-slf4j:jar:1.7.7:compile

| | +- org.slf4j:log4j-over-slf4j:jar:1.7.7:compile

| | \- ch.qos.logback:logback-classic:jar:1.1.2:compile

| | \- ch.qos.logback:logback-core:jar:1.1.2:compile

| \- org.yaml:snakeyaml:jar:1.13:runtime

+- org.springframework.boot:spring-boot-starter-tomcat:jar:1.1.1.BUILD-SNAPSHOT:compile

| +- org.apache.tomcat.embed:tomcat-embed-core:jar:7.0.54:compile

| +- org.apache.tomcat.embed:tomcat-embed-el:jar:7.0.54:compile

| \- org.apache.tomcat.embed:tomcat-embed-logging-juli:jar:7.0.54:compile

+- com.fasterxml.jackson.core:jackson-databind:jar:2.3.3:compile

| +- com.fasterxml.jackson.core:jackson-annotations:jar:2.3.3:compile

| \- com.fasterxml.jackson.core:jackson-core:jar:2.3.3:compile

+- org.hibernate:hibernate-validator:jar:5.0.3.Final:compile

| +- javax.validation:validation-api:jar:1.1.0.Final:compile

| +- org.jboss.logging:jboss-logging:jar:3.1.1.GA:compile

| \- com.fasterxml:classmate:jar:1.0.0:compile

+- org.springframework:spring-core:jar:4.0.5.RELEASE:compile

+- org.springframework:spring-web:jar:4.0.5.RELEASE:compile

| +- org.springframework:spring-aop:jar:4.0.5.RELEASE:compile

| | \- aopalliance:aopalliance:jar:1.0:compile

| +- org.springframework:spring-beans:jar:4.0.5.RELEASE:compile

| \- org.springframework:spring-context:jar:4.0.5.RELEASE:compile

\- org.springframework:spring-webmvc:jar:4.0.5.RELEASE:compile

\- org.springframework:spring-expression:jar:4.0.5.RELEASE:compile

24

Datenbank Design © 2015 Orientation in Objects GmbH

Spring Boot – Starter POMs

• spring-boot-starter-actuator

• spring-boot-starter-amqp

• spring-boot-starter-aop

• spring-boot-starter-batch

• spring-boot-starter-data-elasticsearch

• spring-boot-starter-data-gemfire

• spring-boot-starter-data-jpa

• spring-boot-starter-data-mongodb

• spring-boot-starter-data-rest

• spring-boot-starter-data-solr

• spring-boot-starter-freemarker

• spring-boot-starter-groovy-templates

• spring-boot-starter-hornetq

• spring-boot-starter-integration

• spring-boot-starter-jdbc

• spring-boot-starter-jetty

• spring-boot-starter-log4j

• spring-boot-starter-logging

• spring-boot-starter-mobile

• spring-boot-starter-parent

• spring-boot-starter-redis

• spring-boot-starter-remote-shell

• spring-boot-starter-security

• spring-boot-starter-social-facebook

• spring-boot-starter-social-linkedin

• spring-boot-starter-social-twitter

• spring-boot-starter-test

• spring-boot-starter-thymeleaf

• spring-boot-starter-tomcat

• spring-boot-starter-velocity

• spring-boot-starter-web

• spring-boot-starter-websocket

• spring-boot-starter-ws

25

Datenbank Design © 2015 Orientation in Objects GmbH

Spring Boot – „Hello World“-Class

26

Datenbank Design © 2015 Orientation in Objects GmbH 27

„Wie sieht bei 30 Deploys

pro Tag die

Rollback-Strategie aus?

Datenbank Design © 2015 Orientation in Objects GmbH 28

Datenbank Design © 2015 Orientation in Objects GmbH 29

Datenbank Design © 2015 Orientation in Objects GmbH 30

Datenbank Design © 2015 Orientation in Objects GmbH 31

Vertrauen Sie dem Backup und der Anwendung

nicht dem Rollback!

Datenbank Design © 2015 Orientation in Objects GmbH 32

“Chuck Norris does not deploy, he develops on the production environment.”

Datenbank Design © 2015 Orientation in Objects GmbH 33

DEV

Reviewer

Datenbank Design © 2015 Orientation in Objects GmbH 34

DEV

Reviewer

QA

Datenbank Design © 2015 Orientation in Objects GmbH 35

DEV

Reviewer

QA Monitoring

Prod server

Datenbank Design © 2015 Orientation in Objects GmbH 36

Datenbank Design © 2015 Orientation in Objects GmbH 37

Datenbank Design © 2015 Orientation in Objects GmbH 38

Datenbank Design © 2015 Orientation in Objects GmbH 39

Controller

ServiceImpl

Datenbank Design © 2015 Orientation in Objects GmbH 40

https://github.com/thorstenmaier/architecture-layer-check/

Controller

ServiceImpl

DaoImpl

Datenbank Design © 2015 Orientation in Objects GmbH 41

Datenbank Design © 2015 Orientation in Objects GmbH 42

(Service) - [DEPENDS_ON] -> (Controller)

Datenbank Design © 2015 Orientation in Objects GmbH 43

MATCH (s:Service)-[:DEPENDS_ON]->(c:Controller) return s,c

Datenbank Design © 2015 Orientation in Objects GmbH 44

Datenbank Design © 2015 Orientation in Objects GmbH 45

Wollen Sie das alles?

Datenbank Design © 2015 Orientation in Objects GmbH 46 46

Wollen Sie das alles?

Will Ihr Kunde das???

Datenbank Design © 2015 Orientation in Objects GmbH

Dann benötigen wir

kontrollierte Änderungen

der Datenbank

ohne Downtime

47

Datenbank Design © 2015 Orientation in Objects GmbH

Continuous Delivery ist genial

Wir müssen (fast) alles anders machen

Keine Downtime

DB kontrolliert ändern

48

DB kontrolliert ändern

Datenbank Design © 2015 Orientation in Objects GmbH

Code und Datenbank müssen synchron bleiben

49

Datenbank Design © 2015 Orientation in Objects GmbH

Kennen Sie das?

50

„Vor dem Update von Version 1.0.2 auf 1.1 musst du erst noch die neuen SQL-Skript einspielen.“

Datenbank Design © 2015 Orientation in Objects GmbH

2 Lösungsmöglichkeiten

hbm2ddl.auto=update

Manuelle SQL-Skripte

51

Datenbank Design © 2015 Orientation in Objects GmbH

hbm2ddl.auto=update?

52

Datenbank Design © 2015 Orientation in Objects GmbH

hbm2ddl.auto=update?

http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-auto-update-in-production

53

Datenbank Design © 2015 Orientation in Objects GmbH

2 Lösungsmöglichkeiten

hbm2ddl.auto=update

Manuelle SQL-Skripte

54

Datenbank Design © 2015 Orientation in Objects GmbH

Manuelle SQL-Skripte

1.0 schema.sql

55

Datenbank Design © 2015 Orientation in Objects GmbH

Manuelle SQL-Skripte

1.0 schema.sql

1.1 10_to_11.sql

56

Datenbank Design © 2015 Orientation in Objects GmbH

Manuelle SQL-Skripte

1.0 schema.sql

1.1 10_to_11.sql

1.0.1 10_to_101.sql

101_to_11.sql

57

Datenbank Design © 2015 Orientation in Objects GmbH

Manuelle SQL-Skripte

1.0 schema.sql

1.1 10_to_11.sql

1.0.1 10_to_101.sql

101_to_11.sql

1.0.2

101_to_102.sql

102_to_11.sql

58

Datenbank Design © 2015 Orientation in Objects GmbH

Manuelle SQL-Skripte

1.0 schema.sql

1.1 10_to_11.sql

1.0.1 10_to_101.sql

101_to_11.sql

1.0.2

101_to_102.sql

102_to_11.sql

59

Datenbank Design © 2015 Orientation in Objects GmbH

Eigentlich noch komplizierter

60

Datenbank Design © 2015 Orientation in Objects GmbH

Die Lösung

61

Datenbank Design © 2015 Orientation in Objects GmbH

Liquibase

62

Datenbank Design © 2015 Orientation in Objects GmbH

Changelog.xml

63

Datenbank Design © 2015 Orientation in Objects GmbH

Metadaten in der Datenbank

64

Datenbank Design © 2015 Orientation in Objects GmbH

Liquibase beim Starten der Anwendung automatisch ausführen!

65

Datenbank Design © 2015 Orientation in Objects GmbH 66

Datenbank Design © 2015 Orientation in Objects GmbH 67

Warum nehmen wir eigentlich keine

schemalose NoSQL DB?

Datenbank Design © 2015 Orientation in Objects GmbH

Relationale Datenbanken

skalieren nicht

Warum?

Normalisierung => Joins

Forderung nach Konsistenz => Transaktionen

68

Datenbank Design © 2015 Orientation in Objects GmbH

NoSQL =

Relationale Datenbank

- Transaktionen - Normalisierung - Joins - Konsistenz - hartes Schema

(+) Skalierung

(+) Performance

69

Datenbank Design © 2015 Orientation in Objects GmbH

Datenmodellierung

70

• Relationale Datenbank

– Welche Antworten habe ich?

– Allgemeine Datenmodellierung für möglichst viele Fragenstellungen

• NoSQL

– Welche Frage möchte ich beantworten?

– Konkret für einen Anwendungsfall

– Denormalisierung und Duplizierung ist der Normalfall

Datenbank Design © 2015 Orientation in Objects GmbH

Datenmodellierung in Key-Value-Stores

Index-Tabelle und Aggregation

71

userids 1, 2, 5, 7, 12, …

1 John Doe, 1975-08-29, …

2 Richard Miles, 1982-03-14, …

Datenbank Design © 2015 Orientation in Objects GmbH

Datenmodellierung in Key-Value-Stores

Zusammengesetzte Schlüssel

72

user:1:firstname John

user:1:lastname Doe

user:1:birthday 1975-08-29

userids 1, 2, 5, 7, 12, …

Datenbank Design © 2015 Orientation in Objects GmbH

Datenmodellierung: Reduktion der Dimension

73

Datenbank Design © 2015 Orientation in Objects GmbH 74

Nochmal Twitter

Viel Aktion beim Schreiben, wenig beim Lesen

300.000 reads/sec

6000 writes/sec

Datenbank Design © 2015 Orientation in Objects GmbH 75

Tweet speichern in Key-Value-Store

Datenbank Design © 2015 Orientation in Objects GmbH 76

Follower aus Graph-DB laden

Datenbank Design © 2015 Orientation in Objects GmbH 77

Tweet-ID in Key-Value-Store speichern

Datenbank Design © 2015 Orientation in Objects GmbH

The Architecture Twitter

78

{Tweet-Inhalt}

User: 12

Tweet-ID: 4711

Key-Value-Store

Tweet:4711 {Tweet-Inhalt}

Graph-DB

User-Timeline:17 4711, 3013, 302, …

User-Timeline:123 4711, 2001, 878, …

Follower von

User 12?

12

17

123

Tweet wird unter der

ID 4711 eingetragen

Für jeden Follower

wird die Tweet-ID

in die Timeline

eingetragen

Datenbank Design © 2015 Orientation in Objects GmbH 79

Joins

Fluch oder Segen?

Datenbank Design © 2015 Orientation in Objects GmbH

Document

80

http://docs.mongodb.org/manual/core/crud-introduction/

Datenbank Design © 2015 Orientation in Objects GmbH

Collection

81

http://docs.mongodb.org/manual/core/crud-introduction/

Datenbank Design © 2015 Orientation in Objects GmbH

Embedded Data Models

82

http://docs.mongodb.org/manual/core/data-model-design/

Datenbank Design © 2015 Orientation in Objects GmbH

Normalized Data Models

83

http://docs.mongodb.org/manual/core/data-model-design/

Achtung:

Kein DB-seitiger JOIN möglich!

Datenbank Design © 2015 Orientation in Objects GmbH 84

NoSQL?

Ja, falls die Anforderungen passen!

Datenbank Design © 2015 Orientation in Objects GmbH

Continuous Delivery ist genial

Wir müssen (fast) alles anders machen

Keine Downtime

DB kontrolliert ändern

85

Keine Downtime

Datenbank Design © 2015 Orientation in Objects GmbH

Blue-Green-Deployment

86

Router

Blue Server

Green Server DB

Datenbank Design © 2015 Orientation in Objects GmbH 87

Ersetze die Spalte Name

durch die Spalten

Vorname und Nachname

Datenbank Design © 2015 Orientation in Objects GmbH

1) Neue Version zum Schema hinzufügen

2) In beide Versionen schreiben

3) Historische Daten auffüllen

4) Von neuer Version lesen

5) Nicht mehr in die alte Version schreiben

88

Datenbank Design © 2015 Orientation in Objects GmbH

1) Neue Version zum Schema hinzufügen

2) In beide Versionen schreiben

3) Historische Daten auffüllen

4) Von neuer Version lesen

5) Nicht mehr in die alte Version schreiben

89

Datenbank Design © 2015 Orientation in Objects GmbH

Continuous Delivery ist genial

Wir müssen (fast) alles anders machen

Keine Downtime

DB kontrolliert ändern

90

Orientation in Objects GmbH

Weinheimer Str. 68

68309 Mannheim

www.oio.de

info@oio.de

? ?

? ?

? Fragen ?

Orientation in Objects GmbH

Weinheimer Str. 68

68309 Mannheim

www.oio.de

info@oio.de

Vielen Dank für ihre

Aufmerksamkeit !

top related