95
DynamoDB- NoSQL as a Service Steffen Krause Technology Evangelist @AWS_Aktuell [email protected]

Webinar DynamoDB deutsch

Embed Size (px)

Citation preview

Page 1: Webinar DynamoDB deutsch

DynamoDB- NoSQL as a Service

Steffen Krause

Technology Evangelist

@AWS_Aktuell

[email protected]

Page 2: Webinar DynamoDB deutsch

1. Erste Schritte

2. Datenmodellierung

3. Partitionierung

4. Reporting & Analytics

Überblick

Page 3: Webinar DynamoDB deutsch

Erste Schritte

1

Page 4: Webinar DynamoDB deutsch

Comput

eStorage

AWS Global Infrastructure

Databas

e

App Services

Deployment & Administration

Networking

RegionEine unabhängige Menge von AWS Ressourcen in einem

definierten geografischen Gebiet

Eine solide Basis, um ortsabhängigen Privacy- und

Compliance-Anforderungen zu genügen

Availability ZoneEntworfen als unabhängige Verfügbarkeitszone

Physisch getrennt innerhalb eines geografischen

Gebiets

Edge LocationFür die Auslieferung von Inhalten mit geringer Latenz

Globales Netzwerk von Edge Locations

Bietet globale DNS Infrastruktur (Route53) und CloudFront

Content Delivery Network

Globale Infrastruktur

Page 5: Webinar DynamoDB deutsch

Compute Storage

AWS Global Infrastructure

Database

App Services

Deployment & Administration

Networking

Relational Database Service (RDS)Database-as-a-Service

Datenbank-Instanzen ohne Installation und Administration

Skalierbare und fehlertolerante Konfigurationen

DynamoDBNoSQL Datenbank mit provisioniertem Durchsatz

Hohe, vorhersagbare Performance

Vollständig verteilte, fehlertolerante Architektur

Datenbank

RedshiftData Warehouse Dienst bis in den Petabyte-Bereich

Kostengünstig, vollständig verwaltet

Einfache Anbindung an BI Lösungen

SimpleDB

Page 6: Webinar DynamoDB deutsch

DynamoDB ist ein verwalteter

NoSQL Datenbankdienst

Speichern und Lesen von beliebigen Datenmengen

Beliebige Anzahl Abfragen

Page 7: Webinar DynamoDB deutsch

Ohne die administrative Last

Page 8: Webinar DynamoDB deutsch

Konsistente, vorhersagbare

Performance.

Latenz im einstelligen Millisekundenbereich

Auf SSDs gespeichert

Page 9: Webinar DynamoDB deutsch

Flexibles Datenmodell

Key/Attribut Paare. Kein Schema erforderlich

Leicht zu erstellen. Leicht anzupassen

Page 10: Webinar DynamoDB deutsch

Umfassende Skalierbarkeit

Keine Größenbeschränkung für Tabellen.

Unbegrenzter Speicherplatz

Keine Downtime.

Page 11: Webinar DynamoDB deutsch

Dauerhaft

Konsistentes Schreiben direkt auf Festplatte

Replikation in mehrere Data Center und Availability Zones

Page 12: Webinar DynamoDB deutsch

Sie können sich auf

Ihre Anwendung konzentrieren

Page 13: Webinar DynamoDB deutsch

Zwei Entscheidungen + drei Klicks

= bereit zur Verwendung

Page 14: Webinar DynamoDB deutsch

Zwei Entscheidungen + drei Klicks

= bereit zur Verwendung

Primärschlüssel

Provisionierter Durchsatz

Page 15: Webinar DynamoDB deutsch

Zwei Entscheidungen + drei Klicks

= bereit zur Verwendung

Primärschlüssel

Provisionierter Durchsatz

Page 16: Webinar DynamoDB deutsch

Provisionierter Durchsatz

Reservierte IOPS für Lesen und Schreiben

Jederzeit nach oben und unten skalierbar

Page 17: Webinar DynamoDB deutsch

Bezahlt nach Capacity Unit.

Preise pro Stunde provisionierter Durchsatz

Berechnet in Capacity Units

(bis zu 4kB Lesen oder 1kB Schreiben)

Page 18: Webinar DynamoDB deutsch

Schreib-Durchsatz

Größe der Elemente x Schreibvorgänge pro Sekunde

US $ 0,0065 für 10 Write Units (US-East-1)

Page 19: Webinar DynamoDB deutsch

Konsistentes Schreiben

Atomare Inkrement und Dekrement Operationen

Optimistische Parallelität: Bedingte Schreiboperationen

Page 20: Webinar DynamoDB deutsch

Transaktionen

Nur Transaktionen auf Elementebene

Puts, Updates und Deletes sind ACID.

Transaktionen über mehrere Schritte in Java Bibliothek

Page 21: Webinar DynamoDB deutsch

Lese-Durchsatz

Strong oder Eventual Consistency

Page 22: Webinar DynamoDB deutsch

Lese-Durchsatz

Strong oder Eventual Consistency

Größe der Elemente x Lesevorgänge pro Sekunde

US$ 0,0065 pro Stunde für 50 Units (US-EAST-1)

Page 23: Webinar DynamoDB deutsch

Lese-Durchsatz

Strong oder Eventual Consistency

Größe der Elemente x Lesevorgänge pro Sekunde

US$ 0,0065 pro Stunde für 100 Units (US-EAST-1)

2

Page 24: Webinar DynamoDB deutsch

Lese-Durchsatz

Strong oder Eventual Consistency

Dieselbe Latenz

Verwendung nach Bedarf zur Lese-Zeit

Page 25: Webinar DynamoDB deutsch

Der provisionierte Durchsatz wird von

DynamoDB verwaltet

Page 26: Webinar DynamoDB deutsch

Daten werden von DynamoDB

partitioniert und verwaltet

Page 27: Webinar DynamoDB deutsch

Reservierte Kapazität

Einsparung bis 53% bei 1 Jahr Reservierung

Einsparung bis 76% bei 3 Jahren Reservierung

Page 28: Webinar DynamoDB deutsch

Indizierter Speicherplatz

US$ 0,25 pro GB pro Monat (US-EAST-1)

Datentransfer out wie üblich:

aws.amazon.com/dynamodb/pricing

Page 29: Webinar DynamoDB deutsch

Authentifizierung.

Auf Session-Basis zur Minimierung der Latenz.

Verwendet den Amazon Security Token Service.

Durch AWS SDKs behandelt.

Integration mit IAM.

Element/Attribut-Berechtigungen möglich.

Page 30: Webinar DynamoDB deutsch

Monitoring.

CloudWatch Metriken:

Latenz, Verwendeter Lese- und Schreibdurchsatz,

Fehler, Drosselung,...

Page 31: Webinar DynamoDB deutsch

Bibliotheken, Wrapper, APIs

ColdFusion, Django, Erlang, Java, .Net,

Node.js, Perl, PHP, Python, Ruby...

http://j.mp/dynamodb-libs

Page 32: Webinar DynamoDB deutsch

DEMO

Page 33: Webinar DynamoDB deutsch
Page 34: Webinar DynamoDB deutsch
Page 35: Webinar DynamoDB deutsch
Page 36: Webinar DynamoDB deutsch
Page 37: Webinar DynamoDB deutsch
Page 38: Webinar DynamoDB deutsch

Datenmodellierung

2

Page 39: Webinar DynamoDB deutsch

id = 100date = 2012-05-16-

09-00-10 total = 25.00

id = 101date = 2012-05-15-

15-00-11 total = 35.00

id = 101date = 2012-05-16-

12-00-10 total = 100.00

date = 2012-03-20-

Page 40: Webinar DynamoDB deutsch

id = 100date = 2012-05-16-

09-00-10 total = 25.00

id = 101date = 2012-05-15-

15-00-11 total = 35.00

id = 101date = 2012-05-16-

12-00-10 total = 100.00

date = 2012-03-20-

Tabelle

Page 41: Webinar DynamoDB deutsch

id = 100date = 2012-05-16-

09-00-10 total = 25.00

id = 101date = 2012-05-15-

15-00-11 total = 35.00

id = 101date = 2012-05-16-

12-00-10 total = 100.00

date = 2012-03-20-

Element (Item)

Page 42: Webinar DynamoDB deutsch

id = 100date = 2012-05-16-

09-00-10 total = 25.00

id = 101date = 2012-05-15-

15-00-11 total = 35.00

id = 101date = 2012-05-16-

12-00-10 total = 100.00

date = 2012-03-20-

Attribut

Page 43: Webinar DynamoDB deutsch

Wo ist das Schema?

Tabellen benötigen kein formales Schema

Elemente sind Hashes beliebiger Größe

Sekundäre Indizes legen teilweise Schema fest

Page 44: Webinar DynamoDB deutsch

Indexe

Elemente werden über primäre und sekundäre Schlüssel indiziert

Primäre Schlüssel können zusammengesetzt werden

Sekundäre Schlüssel sind lokal oder global

Page 45: Webinar DynamoDB deutsch

ID Date Total

id = 100 date = 2012-05-16-09-00-10 total = 25.00

id = 101 date = 2012-05-15-15-00-11 total = 35.00

id = 101 date = 2012-05-16-12-00-10 total = 100.00

id = 102 date = 2012-03-20-18-23-10 total = 20.00

id = 102 date = 2012-03-20-18-23-10 total = 120.00

Page 46: Webinar DynamoDB deutsch

ID Date Total

id = 100 date = 2012-05-16-09-00-10 total = 25.00

id = 101 date = 2012-05-15-15-00-11 total = 35.00

id = 101 date = 2012-05-16-12-00-10 total = 100.00

id = 102 date = 2012-03-20-18-23-10 total = 20.00

id = 102 date = 2012-03-20-18-23-10 total = 120.00

Hash key

Page 47: Webinar DynamoDB deutsch

ID Date Total

id = 100 date = 2012-05-16-09-00-10 total = 25.00

id = 101 date = 2012-05-15-15-00-11 total = 35.00

id = 101 date = 2012-05-16-12-00-10 total = 100.00

id = 102 date = 2012-03-20-18-23-10 total = 20.00

id = 102 date = 2012-03-20-18-23-10 total = 120.00

Hash key Range key

Zusammengesetzter Primärschlüssel

Page 48: Webinar DynamoDB deutsch

ID Date Total

id = 100 date = 2012-05-16-09-00-10 total = 25.00

id = 101 date = 2012-05-15-15-00-11 total = 35.00

id = 101 date = 2012-05-16-12-00-10 total = 100.00

id = 102 date = 2012-03-20-18-23-10 total = 20.00

id = 102 date = 2012-03-20-18-23-10 total = 120.00

Hash key Range key Sekundärer range key

Page 49: Webinar DynamoDB deutsch

ID Date Total

id = 100 date = 2012-05-16-09-00-10 total = 25.00

id = 101 date = 2012-05-15-15-00-11 total = 35.00

id = 101 date = 2012-05-16-12-00-10 total = 100.00

id = 102 date = 2012-03-20-18-23-10 total = 20.00

id = 102 date = 2012-03-20-18-23-10 total = 120.00

Sekundärer Hash key Sekundärer Range Key

Neu

Page 50: Webinar DynamoDB deutsch

Programmierung von DynamoDB.

Kleines aber wohlgeformtes API

Page 51: Webinar DynamoDB deutsch

CreateTable

UpdateTable

DeleteTable

DescribeTable

ListTables

Query

Scan

PutItem

GetItem

UpdateItem

DeleteItem

BatchGetItem

BatchWriteItem

Page 52: Webinar DynamoDB deutsch

CreateTable

UpdateTable

DeleteTable

DescribeTable

ListTables

Query

Scan

PutItem

GetItem

UpdateItem

DeleteItem

BatchGetItem

BatchWriteItem

Page 53: Webinar DynamoDB deutsch

CreateTable

UpdateTable

DeleteTable

DescribeTable

ListTables

Query

Scan

PutItem

GetItem

UpdateItem

DeleteItem

BatchGetItem

BatchWriteItem

Page 54: Webinar DynamoDB deutsch

dynamoDB = new AmazonDynamoDBClient(new ClasspathPropertiesFileCredentialsProvider());

dynamoDB.setEndpoint("https://dynamodb.eu-west-1.amazonaws.com");

CreateTableRequest createTableRequest = new CreateTableRequest().withTableName(tableName)

.withKeySchema(new KeySchema(new KeySchemaElement().withAttributeName("name").withAttributeType("S")))

.withProvisionedThroughput(new ProvisionedThroughput().withReadCapacityUnits(10L).withWriteCapacityUnits(10L));

TableDescription createdTableDescription = dynamoDB.createTable(createTableRequest).getTableDescription();

//Wait for table to become available

DescribeTableRequest describeTableRequest = new DescribeTableRequest().withTableName(tableName);

TableDescription tableDescription = dynamoDB.describeTable(describeTableRequest).getTable();

Map<String, AttributeValue> item = newItem("Bill & Ted's Excellent Adventure", 1989, "****", "James", "Sara");

PutItemRequest putItemRequest = new PutItemRequest(tableName, item);

PutItemResult putItemResult = dynamoDB.putItem(putItemRequest);

HashMap<String, Condition> scanFilter = new HashMap<String, Condition>();

Condition condition = new Condition()

.withComparisonOperator(ComparisonOperator.GT.toString())

.withAttributeValueList(new AttributeValue().withN("1985"));

scanFilter.put("year", condition);

ScanRequest scanRequest = new ScanRequest(tableName).withScanFilter(scanFilter);

ScanResult scanResult = dynamoDB.scan(scanRequest);

Page 55: Webinar DynamoDB deutsch

Bedingte Updates.

PutItem, UpdateItem, DeleteItem

können optionale Bedingung enthalten.

UpdateItem ermöglicht atomare Inkrements/Dekrements

Page 56: Webinar DynamoDB deutsch

Ein API Aufruf, mehrere Elemente

BatchGet gibt mehrere Elemente nach Schlüssel zurück

Durchsatz wird nach IOs berechnet, nicht nach API Aufrufen

BatchWrite führt bis zu 25 Put oder Delete Operationen aus

Page 57: Webinar DynamoDB deutsch

CreateTable

UpdateTable

DeleteTable

DescribeTable

ListTables

Query

Scan

PutItem

GetItem

UpdateItem

DeleteItem

BatchGetItem

BatchWriteItem

Page 58: Webinar DynamoDB deutsch

Query kontra Scan

Query für Composite Key Abfragen

Scan für Full Table Scans, Exports.

Beide unterstützen Seiten und Begrenzungen.

Maximale Antwortgröße ist 1 MB

Page 59: Webinar DynamoDB deutsch

Abfragemuster

Alle Elemente nach Hash Key.

Range key Bedingungen:

==, <, >, >=, <=, begins with, between.

Count, Top und Bottom n Werte

Seitenweise Ergebnisse

Page 60: Webinar DynamoDB deutsch

Beziehungen modellieren

BEISPIEL 1:

Page 61: Webinar DynamoDB deutsch

Spieler

user_id =

mza

location =

Cambridge

joined =

2011-07-04

user_id =

jeffbarr

location =

Seattle

joined =

2012-01-20

user_id =

werner

location =

Worldwide

joined =

2011-05-15

Page 62: Webinar DynamoDB deutsch

Spieler

user_id =

mza

location =

Cambridge

joined =

2011-07-04

user_id =

jeffbarr

location =

Seattle

joined =

2012-01-20

user_id =

werner

location =

Worldwide

joined =

2011-05-15

Ergebnisseuser_id =

mza

game =

angry-birds

score =

11,000

user_id =

mza

game =

tetris

score =

1,223,000

user_id =

werner

location =

bejewelled

score =

55,000

Page 63: Webinar DynamoDB deutsch

Spieler

user_id =

mza

location =

Cambridge

joined =

2011-07-04

user_id =

jeffbarr

location =

Seattle

joined =

2012-01-20

user_id =

werner

location =

Worldwide

joined =

2011-05-15

Ergebnisse Bestenliste

user_id =

mza

game =

angry-birds

score =

11,000

user_id =

mza

game =

tetris

score =

1,223,000

user_id =

werner

location =

bejewelled

score =

55,000

game =

angry-birds

score =

11,000

user_id =

mza

game =

tetris

score =

1,223,000

user_id =

mza

game =

tetris

score =

9,000,000

user_id =

jeffbarr

Page 64: Webinar DynamoDB deutsch

Spieler

user_id =

mza

location =

Cambridge

joined =

2011-07-04

user_id =

jeffbarr

location =

Seattle

joined =

2012-01-20

user_id =

werner

location =

Worldwide

joined =

2011-05-15

user_id =

mza

game =

angry-birds

score =

11,000

user_id =

mza

game =

tetris

score =

1,223,000

user_id =

werner

location =

bejewelled

score =

55,000

Ergebnissegame =

angry-birds

score =

11,000

user_id =

mza

game =

tetris

score =

1,223,000

user_id =

mza

game =

tetris

score =

9,000,000

user_id =

jeffbarr

Bestenliste

Abfrage: Ergebnisse

nach Spielern

Page 65: Webinar DynamoDB deutsch

Spieler

user_id =

mza

location =

Cambridge

joined =

2011-07-04

user_id =

jeffbarr

location =

Seattle

joined =

2012-01-20

user_id =

werner

location =

Worldwide

joined =

2011-05-15

Ergebnisse Bestenliste

user_id =

mza

game =

angry-birds

score =

11,000

user_id =

mza

game =

tetris

score =

1,223,000

user_id =

werner

location =

bejewelled

score =

55,000

game =

angry-birds

score =

11,000

user_id =

mza

game =

tetris

score =

1,223,000

user_id =

mza

game =

tetris

score =

9,000,000

user_id =

jeffbarr

Bestenliste pro Spiel

Alternativ: Globaler sekundärer Index

mit projizierten Attributen

Page 66: Webinar DynamoDB deutsch

Speicherung von großen Elementen

BEISPIEL 2:

Page 67: Webinar DynamoDB deutsch

Unbegrenzter Speicherplatz

Unbegrenzte Attribute pro Element

Unbegrenzte Elemente pro Tabelle

Maximal 64k pro Element

Page 68: Webinar DynamoDB deutsch

message_id = 1 part = 1message =

<first 64k>

message_id = 1 part = 2message =

<second 64k>

message_id = 1 part = 3joined =

<third 64k>

Aufteilen auf mehrere Elemente

Page 69: Webinar DynamoDB deutsch

message_id = 1message =

http://s3.amazonaws.com...

message_id = 2message =

http://s3.amazonaws.com...

message_id = 3message =

http://s3.amazonaws.com...

Speichern eines Pointers in S3

Page 70: Webinar DynamoDB deutsch

Zeitreihen-Daten

EXAMPLE 3:

Page 71: Webinar DynamoDB deutsch

event_id =

1000

timestamp =

2013-04-16-09-59-01

key =

value

event_id =

1001

timestamp =

2013-04-16-09-59-02

key =

value

event_id =

1002

timestamp =

2013-04-16-09-59-02

key =

value

Heiße und kalte TabellenApril

März

event_id =

1000

timestamp =

2013-03-01-09-59-01

key =

value

event_id =

1001

timestamp =

2013-03-01-09-59-02

key =

value

event_id =

1002

timestamp =

2013-03-01-09-59-02

key =

value

Page 72: Webinar DynamoDB deutsch

AprilMärzFebruarJanuarDezember

Page 73: Webinar DynamoDB deutsch

Daten-Archivierung

Alte Daten nach S3: niedrigere Kosten

Verfügbar für Analysen

Abfragen über heiße und kalte Daten

mit Elastic MapReduce.

Page 74: Webinar DynamoDB deutsch

Partitionierung

3

Page 75: Webinar DynamoDB deutsch

Einheitliche Workload.

Daten in mehreren Partitionen

Daten hauptsächlich über Primärschlüssel verteilt

Provisionierter Durchsatz gleichmäßig über Partitionen verteilt

Page 76: Webinar DynamoDB deutsch

Um den vollen provisionierten Durchsatz zu

nutzen muss die Workload gleichmäßig auf die

Hash Keys verteilt sein

Page 77: Webinar DynamoDB deutsch

Ungleichmäßig verteilte Workloads

Können auch bei hohem provisionierten Durchsatz

gedrosselt werden

Page 78: Webinar DynamoDB deutsch

Unterschiedliche Werte für Hash Keys

BEST PRACTICE 1:

Hash Keys sollten eine große Zahl

unterschiedlicher Werte haben

Page 79: Webinar DynamoDB deutsch

user_id =

mza

first_name =

Matt

last_name =

Wood

user_id =

jeffbarr

first_name =

Jeff

last_name =

Barr

user_id =

werner

first_name =

Werner

last_name =

Vogels

user_id =

simone

first_name =

Simone

last_name =

Brunozzi

... ... ...

Viele Benutzer mit eindeutiger user_id.

Workload gut verteilt über Hash Keys

Page 80: Webinar DynamoDB deutsch

Vermeide begrenzte Hash Key Werte

BEST PRACTICE 2:

Hash Keys sollten eine große Zahl

unterschiedlicher Werte haben

Page 81: Webinar DynamoDB deutsch

status =

200

date =

2012-04-01-00-00-01

status =

404

date =

2012-04-01-00-00-01

status

404

date =

2012-04-01-00-00-01

status =

404

date =

2012-04-01-00-00-01

Geringe Anzahl Status Codes

Ungleichmäßig verteilte Schlüsselwerte

Page 82: Webinar DynamoDB deutsch

Modell für gleichmäßige Verteilung

BEST PRACTICE 3:

Zugriff nach Hash Key Wert sollte gleichmäßig verteilt sein

Page 83: Webinar DynamoDB deutsch

mobile_id =

100

access_date =

2012-04-01-00-00-01

mobile_id =

100

access_date =

2012-04-01-00-00-02

mobile_id =

100

access_date =

2012-04-01-00-00-03

mobile_id =

100

access_date =

2012-04-01-00-00-04

... ...

Große Anzahl Geräte.

Wenige Geräte sind sehr populär, viele sind es nicht

Ungleichmäßig verteilte Workload

Page 84: Webinar DynamoDB deutsch

mobile_id =

100.1

access_date =

2012-04-01-00-00-01

mobile_id =

100.2

access_date =

2012-04-01-00-00-02

mobile_id =

100.3

access_date =

2012-04-01-00-00-03

mobile_id =

100.4

access_date =

2012-04-01-00-00-04

... ...

Beispiel-Zugriffsmuster

Workload nach Hash Key

Page 85: Webinar DynamoDB deutsch

Vermeide heiße Hash Keys

BEST PRACTICE 4:

Keine streng monoton steigende Folge von Hash Keys

Aufsteigende Datums/Zeitwerte sind schlechte Hash Keys

Wenn Datum/Zeit,

dann mit niedrigstem Feld (z.B. Sekunde) beginnen

Page 86: Webinar DynamoDB deutsch

Reporting & Analytics

4

Page 87: Webinar DynamoDB deutsch

Skalierbarer Zugriff

Skalierbare Datenanalyse

Skalierbares Backup

Page 88: Webinar DynamoDB deutsch

Amazon Elastic MapReduce.

Verwalteter Hadoop-Dienst für

datenintensive Workloads

aws.amazon.com/emr

Page 89: Webinar DynamoDB deutsch

create external table items_db

(id string, votes bigint, views bigint) stored by

'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'

tblproperties

("dynamodb.table.name" = "items",

"dynamodb.column.mapping" =

"id:id,votes:votes,views:views");

Page 90: Webinar DynamoDB deutsch

select id, likes, views

from items_db

order by views desc;

Page 91: Webinar DynamoDB deutsch

1. Erste Schritte

2. Datenmodellierung

3. Partitionierung

4. Replikation & Analytics

Zusammenfassung

Page 92: Webinar DynamoDB deutsch

Free tier.

Page 93: Webinar DynamoDB deutsch

aws.amazon.com/dynamodb

Page 95: Webinar DynamoDB deutsch

Getting Started Guide:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Getti

ngStartedDynamoDB.html

http://aws.amazon.com/de

Beginnen Sie mit dem Free Tier:

http://aws.amazon.com/de/free/

Twitter: @AWS_Aktuell

Facebook: http://www.facebook.com/awsaktuell

Webinare: http://aws.amazon.com/de/about-aws/events/

Slides: http://de.slideshare.net/AWSAktuell/

Youtube: http://www.youtube.com/awsaktuell

Ressourcen