deep dive: amazon dynamodb (db tech showcase 2016)

61
Deep Dive: Amazon DynamoDB Takashi Narita Solutions Architect Amazon Web Services Japan K.K.

Upload: amazon-web-services-japan

Post on 14-Feb-2017

1.123 views

Category:

Data & Analytics


3 download

TRANSCRIPT

Page 1: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Deep Dive: Amazon DynamoDBTakashi NaritaSolutions ArchitectAmazon Web Services Japan K.K.

Page 2: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

自己紹介

• 成田 俊(なりた たかし)– アマゾン ウェブ サービス ジャパン株式会社

– ソリューションアーキテクト

• 担当– 主にWebプラットフォーム系のお客様の技術支援

• 経歴– 主にWeb系会社でインフラエンジニアを担当

– Cassandra Summit 2014 JPN スピーカー

Page 3: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Agenda

• DyanamoDBとは

• Table, API, Data Type• Indexes• Scaring• Data Modeling• ユースケース& ベストプラクティス

• DynamoDB Stream

Page 4: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

DyanamoDBとは

Page 5: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Amazon DynamoDBの⽣い⽴ち• Amazon.comではかつて全てのアクセスをRDBMSで処理して

いた• RDBMSのスケールの限界を超えるため開発されたDynamoが

祖先• 結果整合性モデル採⽤に

よる可⽤性向上

• HWを追加する毎に性能が向上するスケーラビリティ

• シンプルなクエリモデルによる予測可能な性能

Page 6: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Amazon DynamoDBの特徴

• 完全マネージド型の NoSQL データベースサービス• ハイスケーラブル、低レイテンシー• ⾼可⽤性– 3つのデータセンタにレプリケーション• シンプル且つパワフルAPI• ストレージの容量制限がない• 運⽤管理必要なし

クライアント

Page 7: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Gaming use case

Nexon delivers unparalleled mobile gaming with DynamoDB

Nexon is a leading South Korean video game developerand a pioneer in the world of interactive entertainment.

By using AWS, we decreased our initial

investment costs, and only pay for what we use.

Chunghoon RyuDepartment Manager, Nexon

“ • Nexon ではゲームでDynamoDBを

Primary DBとして採用

• 韓国で最もヒットしたモバイルゲームでは

初日に200万の登録ユーザーがいた

• Nexonは快適なゲーム環境の為に10ms以下の平均レスポンスを同時接続17万人

で実現出来る要件でDynamoDBを採用

Page 8: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Analytics use case

Expedia’s real-time analytics application uses DynamoDB

Expedia is a leader in the $1 trillion travel industry, with an extensive portfolio that includes some of the world’s most

trusted travel brands.

With DynamoDB, we were up and running in a less than

day, and there is no need for a team to maintain.

Kuldeep ChowhanEngineering Manager, Expedia

“ • Expediaではリアルタイム分析の為の

データ保存先としてDynamoDBを採

• この分析では200万件のメッセージが

日次で生成され保存する必要があっ

た。

• セットアップ、モニタリングの容易さ、

およびスケーリングがDynamoDBを

選ぶ際に重要な要因だった

Page 9: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Tables, API, Data Types

Page 10: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Table table

items

attributes

PartitionKey

SortKey

必須キーバリュー型のアクセスパターンデータ分散に利用される オプション

1:Nモデルのリレーションシップ豊富なQueryをサポート

Partation Key検索用

==,<,>,>=,<=“beginswith”“between”sortedresultscounts先頭/末尾 N件ページ単位出力

Page 11: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

• CreateTable• UpdateTable• DeleteTable• DescribeTable• ListTables

• GetItem• PutItem• UpdateItem• DeleteItem

• Query• Scan

• BatchGetItem• BatchWriteItem

• Liststreams• DescribeStream• GetShardIterator• GetRecords

Table API

Stream API

DynamoDB

Page 12: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

AWS SDKs and CLI

• 各種言語むけのオフィシャルSDKやCLIを利用

Java Python PHP .NET Ruby nodeJS

iOS AndroidJavascriptin the Browser AWS CLI

Page 13: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Data Types

• String (S)• Number (N)• Binary (B)

• String Set (SS)• Number Set (NS)• Binary Set (BS)

• Boolean (BOOL)• Null (NULL)• List (L)• Map (M)

JSON用に定義

Page 14: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

00 55 A954 AA FF

Partition Table• Partition key は単体でプライマリキーとして利用

• 順序を指定しないハッシュインデックスを構築するためのキー

• テーブルは、性能を確保するために分割(パーティショニング)される場合あり

00 FF

Id = 1Name = Jim

Partition (1) = 7B

Id = 2Name = AndyDept = EnggPartition (2) = 48

Id = 3Name = KimDept = Ops

Partition (3) = CD

Key Space

Page 15: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

データは3箇所にレプリケーション

Id = 2Name = AndyDept = Engg

Id = 3Name = KimDept = Ops

Id = 1Name = Jim

Id = 2Name = AndyDept = Engg

Id = 3Name = KimDept = Ops

Id = 1Name = Jim

Id = 2Name = AndyDept = Engg

Id = 3Name = KimDept = Ops

Id = 1Name = Jim

Replica 1

Replica 2

Replica 3

Partition 1 Partition 2 Partition N

Page 16: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Partition-Sort Table• Partition + Sortでプライマリキーとすることもできる(RDBMSでいう複合キー)• Partition keyに該当する複数のデータの順序を保証するためにSort keyが使われる• Partition Keyの数に上限はありません

(Local Secondary Indexesを使用時は上限あり)

00:0 FF:∞

Partition (2) = 48

Customer# = 2Order# = 10Item = Pen

Customer# = 2Order# = 11Item = Shoes

Customer# = 1Order# = 10Item = Toy

Customer# = 1Order# = 11Item = Boots

Partition (1) = 7B

Customer# = 3Order# = 10Item = Book

Customer# = 3Order# = 11Item = Paper

Partition (3) = CD

55 A9:∞54:∞ AAPartition 1 Partition 2 Partition 3

Page 17: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

DynamoDBの整合性モデル

• Write• 少なくとも2つのレプリカでの書き込み完了が確認とれた時点

で完了• Read

• 標準• 結果整合性のある読み込み• 読み込み時に最新の書き込み結果が反映されない可能性がある。

• Consistent Readオプションを付けたリクエスト• 強⼒な整合性のある読み込み• Readリクエストを受け取る前までの書き込みがすべて反映された

レスポンスを保証

Page 18: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Indexes

Page 19: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Local Secondary Index (LSI)• Sort key以外に絞り込み検索を行うkeyを持つことができる• Partition keyが同一で、他のアイテムからの検索のために利用• すべての要素(テーブルとインデックス)の合計サイズを、各ハッシュキーごとに 10 GB に制限

A1(PK)

A3(Sort)

A2(tablekey)

A1(PK)

A2(Sort)

A3 A4 A5

LSIs A1(PK)

A4(Sort)

A2(tablekey)

A3(projected)

Table

KEYS_ONLY

INCLUDE A3

A1(PK)

A5(Sort)

A2(tablekey)

A3(projected)

A4(projected) ALL

Page 20: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

LSI利用例:自分の友だちリストの検索用

• 太郎さんの友達の次郎は何で繋がっている?が元のテーブルでは取得可能

• 太郎さんのサッカー友達は誰?がLSIで検索可能

• Queryを使う事で太郎さん

の友達はそもそも誰がいる?太郎さんは何繋がりの友達がいる?も両方のテーブルを使う事で検索可能

Page 21: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Global Secondary Index (GSI)• Partition Key属性の代わりとなる

• Partition Keyをまたいで検索を行うためのインデックスA1(PK)

A2 A3 A4 A5

GSIs A5(PK)

A4(Sort)

A1(tablekey)

A3(projected)

Table

INCLUDE A3

A4(PK)

A5(Sort)

A1(tablekey)

A2(projected)

A3(projected) ALL

A2(PK)

A1(tablekey)

KEYS_ONLY

Page 22: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

GSI利用例:全体友だちリストの検索用

• 次郎さんの友達は誰がいる?と言った逆引きをマッピング用GSIで検索可能

• テニスで太郎さんや幸子さんと繋がっている人は誰がいる?がつながりからの検索用GSIで検索可能

I

K

KG

I

Page 23: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

GSIの更新フロー

Table

Primary tablePrimary

tablePrimary tablePrimary

tableGlobal

Secondary Index

Client

2. 非同期Update(in progress)

GSIにはテーブルとは独立したスループットをプロビジョンして利用するため十分なスループットが必要

Page 24: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Scaling

Page 25: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Scaling• スループット

– テーブル単位で、読み書きのスループットを指定(プロビジョニングされたスループット)

• サイズ– テーブルには任意の数のアイテムが追加可能

• 1 つのアイテムの合計サイズは 400 KB • local secondary index について、異なるハッシュキーの値ごとに最大 10

GB のデータを格納

• スケーリングはパーティショニングによってオンラインで自動的に実現

Page 26: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

スループット

• テーブルレベルによってプロビジョニング– Write Capacity Units (WCU)

• 1 秒あたりの項目書き込み回数 x 項目のサイズ (1 KB ブロック)– Read Capacity Units (RCU)

• 1 秒あたりの読み込み回数 x 項目のサイズ (4 KB ブロック)• 結果整合性のある読み込みをする場合はスループットが 2 倍

• 読み込みと書き込みのスループットはそれぞれ独立

WCURCU

Page 27: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

パーティショニングの算出方法

#𝑜𝑓𝑃𝑎𝑟𝑡𝑖𝑡𝑖𝑜𝑛𝑠 = 𝑇𝑎𝑏𝑙𝑒𝑆𝑖𝑧𝑒𝑖𝑛𝐺𝐵

10𝐺𝐵(𝑓𝑜𝑟𝑠𝑖𝑧𝑒)

#𝑜𝑓𝑃𝑎𝑟𝑡𝑖𝑡𝑖𝑜𝑛𝑠(𝑓𝑜𝑟𝑡ℎ𝑟𝑜𝑢𝑔ℎ𝑝𝑢𝑡)

= 𝑅𝐶𝑈@ABBCDEF3000𝑅𝐶𝑈 +

𝑊𝐶𝑈@ABJBKLCF1000𝑊𝐶𝑈

(𝑓𝑜𝑟𝑡ℎ𝑟𝑜𝑢𝑔ℎ𝑝𝑢𝑡)(𝑓𝑜𝑟𝑠𝑖𝑧𝑒)(𝑡𝑜𝑡𝑎𝑙)

• スループット

• ストレージサイズ

• 大きいほうを採用

Page 28: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

パーティショニング算出例

#𝑜𝑓𝑃𝑎𝑟𝑡𝑖𝑡𝑖𝑜𝑛𝑠 = MNOPQNO = 0.8 = 1(𝑓𝑜𝑟𝑠𝑖𝑧𝑒)

#𝑜𝑓𝑃𝑎𝑟𝑡𝑖𝑡𝑖𝑜𝑛𝑠(𝑓𝑜𝑟𝑡ℎ𝑟𝑜𝑢𝑔ℎ𝑝𝑢𝑡)

= RQQQSTUVQQQWXY +RQQZTUPQQQ[XY = 2.17 = 3

Tablesize=8GB,RCUs=5000,WCUs=500

(𝑡𝑜𝑡𝑎𝑙)

RCUsperpartition=5000/3=1666.67WCUsperpartition=500/3=166.67Data/partition=8/3=2.66GB

RCUとWCU の値は均一に各パーテションに割り当てられます

• スループット

• ストレージサイズ

• 大きいほうを採用

Page 29: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

DynamoDBの料金体系

• プロビジョニングされたスループットで決まる時間料金– Read/Writeそれぞれプロビジョンしたスループットによって時間あた

りの料金がきまる

– 大規模に利用するのであればリザーブドキャパシティによる割引もあり

• ストレージ利用量– 保存したデータ容量によって決まる月額利用料金

– 計算はGBあたりの単価が適用される

http://aws.amazon.com/jp/dynamodb/pricing/詳細はこちらを参照

Page 30: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

DynamoDB のスループットを最大限に活用

“DynamoDB のスループットを最大限に活用するには、テーブルを作成するときに、ハッシュキー要素に個別の値が多数含まれ、できるだけランダムかつ均一に値がリクエストされるようにします。”

– DynamoDB Developer Guide

• Space: キーアクセスはなるべく均等になるように

• Time: リクエストはなるべく均等な間隔で

Page 31: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Example: Hot Keys

Parti

tion

Time

Heat

Page 32: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Example: Periodic spike

Page 33: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

DynamoDBのバースト処理は?

• DynamoDBはパーティションごとのキャパシティのうち、利用されなかった分を過去300秒分までリザーブ

• プロビジョン分を超えたバーストラフィックを処理するために利用する– リザーブされたキャパシティは、各パーティションで利用可能

Page 34: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Burst capacity is built-in

0

400

800

1200

1600

Cap

acity

Uni

ts

Time

Provisioned Consumed

使われなかったキャパシティ分を保持

保持していたキャパシティを使用

バーストキャパシティ: 300秒(1200 × 300 = 3600 CU)

Page 35: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Burst capacity may not be sufficient

0

400

800

1200

1600

Cap

acity

Uni

ts

Time

Provisioned Consumed Attempted

バーストキャパシティ: 300秒(1200 × 300 = 3600 CU)

超過したリクエスト

バーストキャパシティの機能に依存しないように。

Page 36: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Data Modeling

Page 37: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

1:1 リレーション or キー・バリュー型

• Partition keyを使ったテーブルまたはGSI• GetItem かBatchGetItem APIを使用

例: UserIDやEmailから要素を抽出する場合UsersTablePartitionkey AttributesUserId =bob [email protected],JoinDate =2011-11-15UserId =fred [email protected],JoinDate =2011-12-01

Users-email-GSIPartitionkey [email protected] UserId =bob,JoinDate [email protected] UserId =fred,JoinDate =2011-12-01

Page 38: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

1:N リレーション or 親子関係

• Partition key とSort key を使ったテーブル、GSI• Query APIを使ってアクセス

例:1ユーザでN個のゲームをプレイしている場合User-Games

PartitionKey Sortkey AttributesUserId =bob GameId=Game1 HighScore =10500,ScoreDate =2011-10-20UserId=fred GameId=Game2 HIghScore =12000,ScoreDate =2012-01-10UserId =bob GameId=Game3 HighScore =20000,ScoreDate =2012-02-12

Page 39: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

N:M リレーション

• table と GSI を使用してPartition key とSort key の要素をスイッチして設計

• Query API を用いてアクセス

例: 1ユーザが複数のゲームをプレイし,1ゲームで複数のプレイヤーがゲームをしている場合

User-Games-TablePartitionKey SortkeyUserId =bob GameId =Game1UserId =fred GameId =Game2UserId=bob GameId =Game3

Game-Users-GSIPartitionKey SortkeyGameId=Game1 UserId =bobGameId=Game2 UserId=fredGameId =Game3 UserId =bob

Page 40: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Document (JSON)

• 新データタイプ (M, L, BOOL, NULL) としてJSONをサポート

• Document SDKs– 単純なプログラミングモデル

– JSONから、JSONへの変換

– Java, JavaScript, Ruby, .NET

Javascript DynamoDBstring S

number Nboolean BOOL

null NULLarray Lobject M

Page 41: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

ユースケース及び、ベストプラクティス

Page 42: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

イベントログ

Storing time series data

Page 43: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Time Series TablesEvents_table_2015_JuneEvent_id(Partition key)

Timestamp(Sort key)

Attribute1 …. Attribute N

Events_table_2015_MayEvent_id(Partition key)

Timestamp(Sort key)

Attribute1 …. Attribute N

Events_table_2015_AprilEvent_id(Partition key)

Timestamp(Sort key)

Attribute1 …. Attribute N

Events_table_2015_MarchEvent_id(Partition key)

Timestamp(Sort key)

Attribute1 …. Attribute N

RCU = 1000WCU = 100

RCU = 10000WCU = 10000

RCU = 100WCU = 10

RCU = 10WCU = 1

Current table

Older tables

Hot

dat

aC

old

data

ホットデータとコールドデータは混在させないアーカイブしたコールドデータはS3へ

Page 44: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

メッセージアプリ

Large ItemsFilters vs IndexesM:N modeling – Inbox & Sent Items

Page 45: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

MessagesTable

Messages App

David

SELECT *FROM MessagesWHERE Recipient='David'LIMIT 50ORDER BY Date DESC

Inbox

SELECT *FROM MessagesWHERE Sender ='David'LIMIT 50ORDER BY Date DESC

Outbox

Page 46: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Recipient Date Sender MessageDavid 2014-10-02 Bob …

… 48 more messages for David …David 2014-10-03 Alice …Alice 2014-09-28 Bob …Alice 2014-10-01 Carol …

大小のデータが混在

(Many more messages)

David

Messages Table

50 items × 平均 256 KB

大きなメッセージボディーを格納

SELECT *FROM MessagesWHERE Recipient='David'LIMIT 50ORDER BY Date DESC

Inbox

Page 47: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

クエリーコストの計算

1回の問い合わせによって取得されるアイテム数

平均アイテムサイズ

4KB毎に1RCU消費

結果整合性のある読み込み

Page 48: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Recipient Date Sender Subject MsgIdDavid 2014-10-02 Bob Hi!… afedDavid 2014-10-03 Alice RE: The… 3kf8Alice 2014-09-28 Bob FW: Ok… 9d2bAlice 2014-10-01 Carol Hi!... ct7r

大きいデータを分けて配置

Inbox-GSI Messages Table

MsgId Body9d2b …3kf8 …ct7r …afed …

David1. Query Inbox-GSI: 1 RCU2. BatchGetItem Messages: 1600 RCU

(50 separate items at 256 KB)

(50 sequential items at 128 bytes)

均等に大きいアイテムを読むように配置

(Recipientをindex,Message メタデータを格納)

Page 49: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Inbox GSI

Page 50: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

書き込み処理を単純化

David

PutItem{

MsgId: 123,Body: ...,Recipient: Steve,Sender: David,Date: 2014-10-23,...

}

InboxGlobal secondary

index

MessagesTable

Page 51: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Outbox Sender

Outbox GSI

SELECT *FROM MessagesWHERE Sender ='David'LIMIT 50ORDER BY Date DESC

Page 52: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Messaging app

MessagesTable

David

InboxGlobal secondary

index

Inbox

OutboxGlobal secondary

index

Outbox

update

Page 53: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

What is DynamoDB Stream?It is a stream of updates

Scales with your table

DynamoDB StreamDynamoDB

Page 54: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

• テーブルの更新の情報を保持

• 非同期に更新

• シリアライズされたデータ

• アイテム毎の厳密な管理

• 高耐久性

• テーブルよるスケール

• 有効期限は24時間

• 1秒未満の遅延書き込み

DynamoDB stream

Page 55: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

View Type Destination

Old Image – 更新前の情報 Name = John, Destination = Mars

New Image – 更新後の情報 Name = John, Destination = Pluto

Old and New Images Name = John, Destination = MarsName = John, Destination = Pluto

Keys Only Name = John

View types更新情報(Name = John, Destination = Mars)

⇒(Name = John, Destination = Pluto)

Page 56: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

Stream

Table

Partition 1

Partition 2

Partition 3

Partition 4

Partition 5

テーブル

Shard 1

Shard 2

Shard 3

Shard 4

KCLWorker

KCLWorker

KCLWorker

KCLWorker

Amazon Kinesis Client Library Application

DynamoDBクライアント

アプリケーション 更新

DynamoDB Stream andAmazon Kinesis Client Library

Page 57: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

DynamoDB Stream

Open Source Cross-Region Replication Library

Asia Pacific (Sydney) EU (Ireland) Replica

US East (N. Virginia)

クロスリージョンレプリケーション

Page 58: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

DynamoDB Stream and AWS Lambda

Page 59: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

DynamoDBが使われているユースケース

• KVSとして– Webアプリケーションのセッションデータベース

– ユーザー情報の格納するデータベース

• 広告やゲームなどのユーザー行動履歴DBとして– ユーザーIDごとに複数の行動履歴を管理するためのデータベース

• ソーシャルアプリのバックエンドとして– モバイルアプリから直接参照できるデータベースとして

• 他にも– バッチ処理のロック管理

– フラッシュマーケティング

– ストレージのインデックス

Page 60: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

ユースケースに合わせてDB製品を選択

Elastic Load

Balancing

ClientsEC2

Amazon DynamoDB

Managed NoSQL

Amazon RDSManaged SQL

Amazon ElastiCacheManaged in-memory caching

Amazon RedshiftManaged data

warehouse

BI tools

Page 61: Deep Dive: Amazon DynamoDB (db tech showcase 2016)

ありがとうございました!