Webinar DynamoDB deutsch

1.137 Aufrufe

Veröffentlicht am

Webinar vom 18.12.2013
Amazon DynamoDB ist eine hoch skalierbare NoSQL Datenbank, die konsistente Lese- und Schreibperformance im einstelligen Millisekundenbereich auch für sehr große Anzahlen von Lese- und Schreibvorgängen bietet ohne dass sich der Entwickler um das Aufsetzen und die Wartung des Clusters kümmern muss. In diesem Webinar geben wir einen Überblick, erklären Datenmodelle und Anwendungfälle.

0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.137
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
7
Aktionen
Geteilt
0
Downloads
11
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Webinar DynamoDB deutsch

  1. 1. DynamoDB- NoSQL as a Service Steffen Krause Technology Evangelist @AWS_Aktuell skrause@amazon.de
  2. 2. Überblick 1. Erste Schritte 2. Datenmodellierung 3. Partitionierung 4. Reporting & Analytics
  3. 3. 1 Erste Schritte
  4. 4. Globale Infrastruktur Region Eine 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 Zone Deployment & Administration Entworfen als unabhängige Verfügbarkeitszone Physisch getrennt innerhalb eines geografischen Gebiets App Services Comput e Storage Databas e Edge Location Für die Auslieferung von Inhalten mit geringer Latenz Networking Globales Netzwerk von Edge Locations Bietet globale DNS Infrastruktur (Route53) und CloudFront AWS Global Infrastructure Content Delivery Network
  5. 5. Datenbank Relational Database Service (RDS) Database-as-a-Service Datenbank-Instanzen ohne Installation und Administration Skalierbare und fehlertolerante Konfigurationen DynamoDB NoSQL Datenbank mit provisioniertem Durchsatz Hohe, vorhersagbare Performance Deployment & Administration App Services Compute Storage Vollständig verteilte, fehlertolerante Architektur SimpleDB Database Networking Redshift Data Warehouse Dienst bis in den Petabyte-Bereich Kostengünstig, vollständig verwaltet AWS Global Infrastructure Einfache Anbindung an BI Lösungen
  6. 6. DynamoDB ist ein verwalteter NoSQL Datenbankdienst Speichern und Lesen von beliebigen Datenmengen Beliebige Anzahl Abfragen
  7. 7. Ohne die administrative Last
  8. 8. Konsistente, vorhersagbare Performance. Latenz im einstelligen Millisekundenbereich Auf SSDs gespeichert
  9. 9. Flexibles Datenmodell Key/Attribut Paare. Kein Schema erforderlich Leicht zu erstellen. Leicht anzupassen
  10. 10. Umfassende Skalierbarkeit Keine Größenbeschränkung für Tabellen. Unbegrenzter Speicherplatz Keine Downtime.
  11. 11. Dauerhaft Konsistentes Schreiben direkt auf Festplatte Replikation in mehrere Data Center und Availability Zones
  12. 12. Sie können sich auf Ihre Anwendung konzentrieren
  13. 13. Zwei Entscheidungen + drei Klicks = bereit zur Verwendung
  14. 14. Provisionierter Durchsatz Primärschlüssel Zwei Entscheidungen + drei Klicks = bereit zur Verwendung
  15. 15. Provisionierter Durchsatz Primärschlüssel Zwei Entscheidungen + drei Klicks = bereit zur Verwendung
  16. 16. Provisionierter Durchsatz Reservierte IOPS für Lesen und Schreiben Jederzeit nach oben und unten skalierbar
  17. 17. Bezahlt nach Capacity Unit. Preise pro Stunde provisionierter Durchsatz Berechnet in Capacity Units (bis zu 4kB Lesen oder 1kB Schreiben)
  18. 18. Schreib-Durchsatz Größe der Elemente x Schreibvorgänge pro Sekunde US $ 0,0065 für 10 Write Units (US-East-1)
  19. 19. Konsistentes Schreiben Atomare Inkrement und Dekrement Operationen Optimistische Parallelität: Bedingte Schreiboperationen
  20. 20. Transaktionen Nur Transaktionen auf Elementebene Puts, Updates und Deletes sind ACID. Transaktionen über mehrere Schritte in Java Bibliothek
  21. 21. Strong oder Eventual Consistency Lese-Durchsatz
  22. 22. Strong oder Eventual Consistency Lese-Durchsatz Größe der Elemente x Lesevorgänge pro Sekunde US$ 0,0065 pro Stunde für 50 Units (US-EAST-1)
  23. 23. Strong oder Eventual Consistency Lese-Durchsatz Größe der Elemente x Lesevorgänge pro Sekunde 2 US$ 0,0065 pro Stunde für 100 Units (US-EAST-1)
  24. 24. Strong oder Eventual Consistency Lese-Durchsatz Dieselbe Latenz Verwendung nach Bedarf zur Lese-Zeit
  25. 25. Der provisionierte Durchsatz wird von DynamoDB verwaltet
  26. 26. Daten werden von DynamoDB partitioniert und verwaltet
  27. 27. Reservierte Kapazität Einsparung bis 53% bei 1 Jahr Reservierung Einsparung bis 76% bei 3 Jahren Reservierung
  28. 28. Indizierter Speicherplatz US$ 0,25 pro GB pro Monat (US-EAST-1) Datentransfer out wie üblich: aws.amazon.com/dynamodb/pricing
  29. 29. 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.
  30. 30. Monitoring. CloudWatch Metriken: Latenz, Verwendeter Lese- und Schreibdurchsatz, Fehler, Drosselung,...
  31. 31. Bibliotheken, Wrapper, APIs ColdFusion, Django, Erlang, Java, .Net, Node.js, Perl, PHP, Python, Ruby... http://j.mp/dynamodb-libs
  32. 32. DEMO
  33. 33. 2 Datenmodellierung
  34. 34. id = 100 date = 2012-05-1609-00-10 total = 25.00 id = 101 date = 2012-05-1515-00-11 total = 35.00 id = 101 date = 2012-05-1612-00-10 total = 100.00
  35. 35. Tabelle id = 100 date = 2012-05-1609-00-10 total = 25.00 id = 101 date = 2012-05-1515-00-11 total = 35.00 id = 101 date = 2012-05-1612-00-10 total = 100.00
  36. 36. id = 100 date = 2012-05-1609-00-10 total = 25.00 Element (Item) id = 101 date = 2012-05-1515-00-11 total = 35.00 id = 101 date = 2012-05-1612-00-10 total = 100.00
  37. 37. id = 100 date = 2012-05-1609-00-10 total = 25.00 Attribut id = 101 date = 2012-05-1515-00-11 total = 35.00 id = 101 date = 2012-05-1612-00-10 total = 100.00
  38. 38. Wo ist das Schema? Tabellen benötigen kein formales Schema Elemente sind Hashes beliebiger Größe Sekundäre Indizes legen teilweise Schema fest
  39. 39. 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
  40. 40. 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
  41. 41. Hash key 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
  42. 42. Hash key ID Range key Date Total Zusammengesetzter Primärschlüssel 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
  43. 43. Hash key ID Range key Date Sekundärer range key 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
  44. 44. Sekundärer Hash key ID Date Sekundärer Range Key Total Neu 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
  45. 45. Programmierung von DynamoDB. Kleines aber wohlgeformtes API
  46. 46. CreateTable PutItem UpdateTable GetItem DeleteTable DescribeTable ListTables Query Scan UpdateItem DeleteItem BatchGetItem BatchWriteItem
  47. 47. CreateTable PutItem UpdateTable GetItem DeleteTable DescribeTable ListTables Query Scan UpdateItem DeleteItem BatchGetItem BatchWriteItem
  48. 48. CreateTable PutItem UpdateTable GetItem DeleteTable DescribeTable ListTables Query Scan UpdateItem DeleteItem BatchGetItem BatchWriteItem
  49. 49. 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);
  50. 50. Bedingte Updates. PutItem, UpdateItem, DeleteItem können optionale Bedingung enthalten. UpdateItem ermöglicht atomare Inkrements/Dekrements
  51. 51. Ein API Aufruf, mehrere Elemente BatchGet gibt mehrere Elemente nach Schlüssel zurück BatchWrite führt bis zu 25 Put oder Delete Operationen aus Durchsatz wird nach IOs berechnet, nicht nach API Aufrufen
  52. 52. CreateTable PutItem UpdateTable GetItem DeleteTable DescribeTable ListTables Query Scan UpdateItem DeleteItem BatchGetItem BatchWriteItem
  53. 53. 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
  54. 54. Abfragemuster Alle Elemente nach Hash Key. Range key Bedingungen: ==, <, >, >=, <=, begins with, between. Count, Top und Bottom n Werte Seitenweise Ergebnisse
  55. 55. BEISPIEL 1: Beziehungen modellieren
  56. 56. 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
  57. 57. 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 Ergebnisse
  58. 58. 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 Bestenliste Ergebnisse user_id = mza game = angry-birds score = 11,000 game = angry-birds score = 11,000 user_id = mza user_id = mza game = tetris score = 1,223,000 game = tetris score = 1,223,000 user_id = mza user_id = werner location = bejewelled score = 55,000 game = tetris score = 9,000,000 user_id = jeffbarr
  59. 59. 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 Abfrage: Ergebnisse nach Spielern Bestenliste Ergebnisse user_id = mza game = angry-birds score = 11,000 game = angry-birds score = 11,000 user_id = mza user_id = mza game = tetris score = 1,223,000 game = tetris score = 1,223,000 user_id = mza user_id = werner location = bejewelled score = 55,000 game = tetris score = 9,000,000 user_id = jeffbarr
  60. 60. 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 Bestenliste pro Spiel Alternativ: Globaler sekundärer Index mit projizierten Attributen Bestenliste Ergebnisse user_id = mza game = angry-birds score = 11,000 game = angry-birds score = 11,000 user_id = mza user_id = mza game = tetris score = 1,223,000 game = tetris score = 1,223,000 user_id = mza user_id = werner location = bejewelled score = 55,000 game = tetris score = 9,000,000 user_id = jeffbarr
  61. 61. BEISPIEL 2: Speicherung von großen Elementen
  62. 62. Unbegrenzter Speicherplatz Unbegrenzte Attribute pro Element Unbegrenzte Elemente pro Tabelle Maximal 64k pro Element
  63. 63. Aufteilen auf mehrere Elemente message_id = 1 part = 1 message = <first 64k> message_id = 1 part = 2 message = <second 64k> message_id = 1 part = 3 joined = <third 64k>
  64. 64. Speichern eines Pointers in S3 message_id = 1 message = http://s3.amazonaws.com... message_id = 2 message = http://s3.amazonaws.com... message_id = 3 message = http://s3.amazonaws.com...
  65. 65. EXAMPLE 3: Zeitreihen-Daten
  66. 66. Heiße und kalte Tabellen April 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 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 = timestamp = key = März
  67. 67. Dezember Januar Februar März April
  68. 68. Daten-Archivierung Alte Daten nach S3: niedrigere Kosten Verfügbar für Analysen Abfragen über heiße und kalte Daten mit Elastic MapReduce.
  69. 69. 3 Partitionierung
  70. 70. Einheitliche Workload. Daten in mehreren Partitionen Daten hauptsächlich über Primärschlüssel verteilt Provisionierter Durchsatz gleichmäßig über Partitionen verteilt
  71. 71. Um den vollen provisionierten Durchsatz zu nutzen muss die Workload gleichmäßig auf die Hash Keys verteilt sein
  72. 72. Ungleichmäßig verteilte Workloads Können auch bei hohem provisionierten Durchsatz gedrosselt werden
  73. 73. BEST PRACTICE 1: Unterschiedliche Werte für Hash Keys Hash Keys sollten eine große Zahl unterschiedlicher Werte haben
  74. 74. Viele Benutzer mit eindeutiger user_id. Workload gut verteilt über Hash Keys 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 ... ... ...
  75. 75. BEST PRACTICE 2: Vermeide begrenzte Hash Key Werte Hash Keys sollten eine große Zahl unterschiedlicher Werte haben
  76. 76. Geringe Anzahl Status Codes Ungleichmäßig verteilte Schlüsselwerte 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
  77. 77. BEST PRACTICE 3: Modell für gleichmäßige Verteilung Zugriff nach Hash Key Wert sollte gleichmäßig verteilt sein
  78. 78. Große Anzahl Geräte. Wenige Geräte sind sehr populär, viele sind es nicht Ungleichmäßig verteilte Workload 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 ... ...
  79. 79. Beispiel-Zugriffsmuster Workload nach Hash Key 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 ... ...
  80. 80. BEST PRACTICE 4: Vermeide heiße Hash Keys 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
  81. 81. 4 Reporting & Analytics
  82. 82. Skalierbarer Zugriff Skalierbare Datenanalyse Skalierbares Backup
  83. 83. Amazon Elastic MapReduce. Verwalteter Hadoop-Dienst für datenintensive Workloads aws.amazon.com/emr
  84. 84. 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");
  85. 85. select id, likes, views from items_db order by views desc;
  86. 86. Zusammenfassung 1. Erste Schritte 2. Datenmodellierung 3. Partitionierung 4. Replikation & Analytics
  87. 87. Free tier.
  88. 88. aws.amazon.com/dynamodb
  89. 89. Danke! skrause@amazon.de @AWS_Aktuell
  90. 90. Ressourcen 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

×