Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Amazon DynamoDB Deep Dive
アマゾンデータサービスジャパン株式会社
シニアソリューションアーキテクト
安川 健太
自己紹介
• 安川 健太 (@thenkentiest)
– AWSソリューションアーキテクト
– 担当するお客様の範囲
• スタートアップ
• ゲーム・ソーシャルサービス
• 時々エンタープライズ
• 略歴
– エリクソンリサーチにてM2Mや...
IT インフラストラクチャ
Amazonの3つのコアビジネス
セラー向け
ビジネス
アマゾンの
ウェブサイト上で販売
自社小売ウェブサイトに
Amazonの技術を利用
アマゾンフルフィルメント
センター(物流センター)
の活用
コンシューマ向け...
クラウドコンピューティングとは?
スケールアップ・
ダウンが容易
初期投資が不要 実際の使用分
のみ支払い
セルフサービスな
インフラ
ビジネススピードの
改善
低額な利用価格
Deploy
AWS が提供するデータベースサービス
完全マネージド型で、セットアップ、運用、拡張が
容易なリレーショナル・データベースサービスAmazon RDS
Amazon DynamoDB
完全マネージド型で、高速なパフォーマンス、シー
ムレスな拡張...
AWS が提供するデータベースサービス
完全マネージド型で、セットアップ、運用、拡張が
容易なリレーショナル・データベースサービスAmazon RDS
Amazon DynamoDB
完全マネージド型で、高速なパフォーマンス、シー
ムレスな拡張...
Amazon DynamoDBとは
• NoSQL as a Service
• 超高速・予測可能な一貫したパフォーマンス
• シームレスなスケーラビリティと低コスト
運用管理必要なし
低レイテンシ、SSD
プロビジョンスループット
無限に使え...
Amazon DynamoDBの生い立ち
• RDBMSのスケールの限界を超えるため開発された
Dynamoが祖先
• 結果整合性モデル採用に
よる可用性向上
• HWを追加する毎に性能
が向上するスケーラビリ
ティ
• シンプルなクエリモデル...
Amazon DynamoDBの特徴
管理不要で信頼性が高い
プロビジョンスループット
ストレージの容量制限がない
特長1:管理不要で信頼性が高い
• SPOFの存在しない構成
• データは3箇所のAZに保存されるので信頼性が高い
• ストレージは自動的にパーティショニング・スケール
クライアント
特長2:プロビジョンスループット
• ReadとWrite、それぞれに対して必要な分だけのスループットキャ
パシティをプロビジョンする(割り当てる)ことができる
• 例えば一般的なReadヘビーなDBなら
– Read : 1,000
– Wr...
特長3:ストレージの容量制限がない
• 使った分だけの従量課金制のストレージ
• データ容量が増えてきたのでディスクを足した
り、ノードを足したりという作業が不要
Amazon DynamoDBの料金体系
• プロビジョンスループットで決まる時間料金
– Read/Writeそれぞれプロビジョンしたスループットによって時間あたりの
料金がきまる
– 大規模に利用するのであればリザーブ度による割引もあり
•...
Amazon DynamoDBを使い始めるには
1. テーブルのKeyやIndexを決める
2. Read/Writeそれぞれのスループットを
決める
That’s it, write your code!
ご利用のお客様の一部
AWSの利用:
世界最大級のスポーツイベント
「Super Bowl 2012」の広告配信で
利用
DynamoDBを使用し、秒間50万以上
の書き込み要求を処理
ビジネス効果:
試合当日の急激なトラフィック増加の
ピークに対応
Amazon ...
web
Web
Web
Web
Web
Web
・
・
・
Shazam for TV
Shazamableな広告コン
テンツを配信
利用者はテレビに
スマートホンをかざす キャンペーン情報などを配信
Amazon DynamoDBに増え続けるチャットデータを確
実に保存しつつ、サービスの成長に備える
AWSの利用:
2012年のサービスの開始時からEC2上
にシステムを構築
ビジネス効果:
Amazon DynamoDBの導入で増え続け
る...
RedisからAmazon DynamoDBへ
EC2
Redis
タイムスタンプでの検索が主用途だったので
Rangeキーを用いた検索で置き換えRedisは高機能だがデータ保
存容量の単価は高い
http://timers-tech.hate...
Amazon DynamoDBの基礎知識
テーブル設計のための基礎知識(1/2)
• Table
– いわゆるテーブル
– プライマリキーの持ち方が2つ
• Hash keyをプライマリキー
• Hash keyとRange keyの複合キーをプライマリキー
• Hash key
– ...
テーブル設計のための基礎知識(2/2)
• Item
– RDBで言ういわゆるレコード
– 1つ以上のAttributeを持つ
• Attributes
– データの中身。RDBで言うカラム。
– Hash key, Range keyに該当す...
データモデル (1/2)
Hash Keyのみの場合
Item
Primary Key
Attribute
A1-1Hash Key
データモデル (2/2)
• Hash Key + Range Key の場合
Item
Primary Key
Attribute
A1-1
Hash Key
A
Range Key 1
Range Key 2
Range Key 3
Att...
A,D B,E C,F
123456789
Parition1 Partition2 ParitionN
Range key
Partition内での
データの並びを
保証する
Hash key
Partition間での
データ分散に利
用され...
A,D B,E C,F
123456789
Parition1 Partition2 ParitionN
Hash keyとRange keyの概念(2/2)
Partition
• DynamoDBはデータを複数のPartitionに分
散格...
テーブル操作についての基礎知識(1/3)
• GetItem
• Hash keyを条件として指定し、
一件のアイテムを取得
• PutItem
• 1件のアイテムを書き込む
• Update
• 1件のアイテムを更新
• Delete
• 1...
テーブル操作についての基礎知識(2/3)
• 強一貫性を持ったReadオペレーション
• GetItem、QueryにはConsistent Readオプションを指定可
• Readリクエストを受け取るよりも前に成功しているすべてのWriteリ...
テーブル操作についての基礎知識(3/3)
• UpdateItemにおけるAttributeへの操作
• Attributeに対して、UpdateItemでPut、Add、Deleteという3種類の操作が可能
• Put:Attributeを指...
QueryのためのIndex
• Local Secondary Index (LSI)
– Range key以外に絞り込み検索のためのキーを持つことができる
– Hash keyが同一のアイテム群の中からの検索のために利用
– インデックス...
ユースケースとテーブル設計例
ユースケースごとのテーブル設計及びクエリの例
1. アプリのイベント履歴管理
– Hash + Range keyの利用例
2. ソーシャル画像共有アプリ
– 複数テーブルによるデータモデル、LSI、GSIの利用例
3. ◯☓ゲーム
– 楽観的...
ゲームの行動履歴管理データベース
User
(Hash)
Timestamp
(Range)
Opponent Result
Alice 2014-02-21 12:21:20 Bob Lost
Alice 2014-02-21 12:42:0...
Amazon DynamoDBのデータも解析に利用
• Amazon Elastic MapReduce (EMR)
で読み出し
• Amazon Redshiftで直接読み込み
• EMRでFilterした後、Redshiftに読み
込み
•...
ソーシャル画像共有アプリ
Home My Posts My Profile
Bob
Steak!
10:18
Carol
BBQ! w/Alice
10:12
Dan
Riajuee…
10:11
Alice
Beer!
10:21
Alice...
テーブル設計
Users TableFriends Table
2つのテーブルを定義
• ユーザ情報テーブル
• 友達リストテーブル
User
(Hash)
Nicknames
Bob [ Rob, Bobby ]
Alice [ Allie ]
Carol [ Caroline ]
Dan [ Daniel, Danny ]
友達一覧を取得
Users Table
Item...
User
(Hash)
Nicknames
Bob [ Rob, Bobby ]
Alice [ Allie ]
Carol [ Caroline ]
Dan [ Daniel, Danny ]
友達一覧を取得
Friends Table
Us...
Friends Table Users Table
User
(Hash)
Nicknames
Bob [ Rob, Bobby ]
Alice [ Allie ]
Carol [ Caroline ]
Dan [ Daniel, Danny ...
投稿画像の保存と検索
Images Table
User
(Hash)
Image
(Range)
Date Link
Bob aed4c 2013-10-01 s3://…
Bob cf2e2 2013-09-05 s3://…
Bob f9...
ある日時の画像取得
Images Table
User Image Date Link
Bob aed4c 2013-10-01 s3://…
Bob cf2e2 2013-09-05 s3://…
Bob f93bae 2013-10-08 ...
画像にユーザのタグ付け
ImageTags Table
Image User
aed4c Alice
aed4c Bob
f93bae Alice
f93bae Bob
Image f93baeにAliceをタグ付け
PutItem(Table...
ユーザのタグ付き画像一覧
ImageTags Table
UserにImageをRangeキーとした
Global Secondary Indexを張る
User
(Hash)
Image
(Range)
Bob aed4c
Bob f93ba...
◯☓ゲームのステート管理
◯☓ゲーム
{
Id : abecd,
Players : [ Alice, Bob ],
State : STARTED,
Turn : Bob,
Top-Right : O
}
Game Item
◯☓ゲーム
Amazon
DynamoDB
Alice Bob
◯☓ゲーム
Amazon
DynamoDB
Alice Bob
Update:
Top-Left : X
Turn : Alice
◯☓ゲーム – 今のままだとチートが可能
Alice Bob (1)
Amazon
DynamoDB
Bob (2) Bob (3)
◯☓ゲーム – 今のままだとチートが可能
Bob (1)
Amazon
DynamoDB
Bob (2)
Bob (3)
Update:
Turn : Alice
Top-Left : X
Update:
Turn : Alice
Mid : ...
◯☓ゲーム – 今のままだとチートが可能
Bob (1)
Amazon
DynamoDB
Bob (2)
Bob (3)
Update:
Turn : Alice
Top-Left : X
Update:
Turn : Alice
Mid : ...
条件付きアップデート(楽観的ロック)
• 現在の特定のAttributeに特定の値が入っていた
場合にのみ更新を実施
• 条件が合わなかったら更新せずに終了
• (但し、1つのアイテムのみで適用可能)
修正版◯☓ゲーム
Bob (1)
Amazon
DynamoDB
Bob (2)
Bob (3)
Update:
Turn : Alice
Top-Left : X
Expect:
Turn : Bob
Top-Left : null
Stat...
修正版◯☓ゲーム
Bob (1)
Amazon
DynamoDB
Bob (2)
Bob (3)
State : STARTED,
Turn : Bob,
Top-Right : O
Update:
Turn : Alice
Top-Left ...
修正版◯☓ゲーム
Bob (1)
Amazon
DynamoDB
Bob (2)
Bob (3)
State : STARTED,
Turn : Alice,
Top-Right : O,
Top-Left : X
Update:
Turn :...
バッチ処理のロック管理
S3 S3
Worker1
Jobs Table
JobID
(Hash)
Created
Time(Range)
Process1 Process2
aed4c 2014-01-01
00:00:00
Done InP...
バッチ処理のロック管理
S3 S3
処理1
Jobs Table
JobID
(Hash)
Created
Time(Range)
Process1 Process2
aed4c 2014-01-01
00:00:00
Done InProce...
まとめ
• Amazon DynamoDBの特徴
– 高い可用性
– 一貫した性能
– 低い運用負荷
• Amazon DynamoDBの高度な機能
– Local Secondary Indexes
– Global Secondary In...
DB Tech Showcase 大阪: Amazon DynamoDB Deep Dive
Upcoming SlideShare
Loading in …5
×

DB Tech Showcase 大阪: Amazon DynamoDB Deep Dive

10,955 views

Published on

DynamoDBを用いたシステムの設計や開発を行おうとする方に向けて、基本的な機能を紹介しつつ、ソーシャルネットワークサービスやゲームなど、いくつかの典型的なユースケースを取り上げて、それをDynamoDBで実現するとしたらどういったテーブル設計とクエリの仕方が効果的なのかといったTipsや、DynamoDBの各種機能をどう活用していくべきかといったノウハウをご紹介します。

Published in: Technology
  • Best dissertation help you can get, thank god a friend suggested me ⇒⇒⇒WRITE-MY-PAPER.net ⇐⇐⇐ otherwise I could have never completed my dissertation on time.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hello! I can recommend a site that has helped me. It's called ⇒ www.HelpWriting.net ⇐ They helped me for writing my quality research paper.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I think this is such an incredible product: Profit Maximiser will make you money. Profit Maximiser will save you time. In a nutshell: Really is as simple as that. Give it a go and feel safe in the fact that there's a 30-day money back guarantee included if for any reason you don't get on with it. £1 trial for 14 days followed by a £96 + VAT. Cancel anytime. learn more...  http://t.cn/A6hPRSfx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • The Odds of The Lotto Are Changing With These Tricks! ➤➤ https://tinyurl.com/t2onem4
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • ACCESS that WEBSITE Over for All Ebooks (Unlimited) ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... DOWNLOAD FULL EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

DB Tech Showcase 大阪: Amazon DynamoDB Deep Dive

  1. 1. Amazon DynamoDB Deep Dive アマゾンデータサービスジャパン株式会社 シニアソリューションアーキテクト 安川 健太
  2. 2. 自己紹介 • 安川 健太 (@thenkentiest) – AWSソリューションアーキテクト – 担当するお客様の範囲 • スタートアップ • ゲーム・ソーシャルサービス • 時々エンタープライズ • 略歴 – エリクソンリサーチにてM2MやSNS + IoTな感じの技術の研究開発 – ユーザとして触ったAWSに感銘を受けてAWSソリューションアーキテ クトに (↑イマココ)
  3. 3. IT インフラストラクチャ Amazonの3つのコアビジネス セラー向け ビジネス アマゾンの ウェブサイト上で販売 自社小売ウェブサイトに Amazonの技術を利用 アマゾンフルフィルメント センター(物流センター) の活用 コンシューマ向け ビジネス 1億を超えるアクティブなア カウント 8カ国で展開 : 米国, 英国, ドイツ, 日本, フ ランス, カナダ, 中国, イタリア スケーラビリティ 高可用性 ITインフラストラク チャ ビジネス 2006年開始 ウェブスケールでの クラウド基盤の提供 190以上の国において、数十 万に及ぶ登録アカウント
  4. 4. クラウドコンピューティングとは? スケールアップ・ ダウンが容易 初期投資が不要 実際の使用分 のみ支払い セルフサービスな インフラ ビジネススピードの 改善 低額な利用価格 Deploy
  5. 5. AWS が提供するデータベースサービス 完全マネージド型で、セットアップ、運用、拡張が 容易なリレーショナル・データベースサービスAmazon RDS Amazon DynamoDB 完全マネージド型で、高速なパフォーマンス、シー ムレスな拡張性と信頼性をNoSQLサービス Amazon Redshift 高速で管理も万全なペタバイト規模のデータウェア ハウスサービス Amazon ElastiCache 完全マネージド型で、セットアップ、運用、拡張が 用意なキャッシュサービス
  6. 6. AWS が提供するデータベースサービス 完全マネージド型で、セットアップ、運用、拡張が 容易なリレーショナル・データベースサービスAmazon RDS Amazon DynamoDB 完全マネージド型で、高速なパフォーマンス、シー ムレスな拡張性と信頼性をNoSQLサービス Amazon Redshift 高速で管理も万全なペタバイト規模のデータウェア ハウスサービス Amazon ElastiCache 完全マネージド型で、セットアップ、運用、拡張が 用意なキャッシュサービス
  7. 7. Amazon DynamoDBとは • NoSQL as a Service • 超高速・予測可能な一貫したパフォーマンス • シームレスなスケーラビリティと低コスト 運用管理必要なし 低レイテンシ、SSD プロビジョンスループット 無限に使えるストレージ ADMIN
  8. 8. Amazon DynamoDBの生い立ち • RDBMSのスケールの限界を超えるため開発された Dynamoが祖先 • 結果整合性モデル採用に よる可用性向上 • HWを追加する毎に性能 が向上するスケーラビリ ティ • シンプルなクエリモデル による予測可能な性能
  9. 9. Amazon DynamoDBの特徴 管理不要で信頼性が高い プロビジョンスループット ストレージの容量制限がない
  10. 10. 特長1:管理不要で信頼性が高い • SPOFの存在しない構成 • データは3箇所のAZに保存されるので信頼性が高い • ストレージは自動的にパーティショニング・スケール クライアント
  11. 11. 特長2:プロビジョンスループット • ReadとWrite、それぞれに対して必要な分だけのスループットキャ パシティをプロビジョンする(割り当てる)ことができる • 例えば一般的なReadヘビーなDBなら – Read : 1,000 – Write : 100 • ライトヘビーなDBなら – Read : 500 – Write : 500 • この値はDB運用中にオンラインで変更可能 – ただし、スケールダウンに関しては日に4回までしかできないので注意
  12. 12. 特長3:ストレージの容量制限がない • 使った分だけの従量課金制のストレージ • データ容量が増えてきたのでディスクを足した り、ノードを足したりという作業が不要
  13. 13. Amazon DynamoDBの料金体系 • プロビジョンスループットで決まる時間料金 – Read/Writeそれぞれプロビジョンしたスループットによって時間あたりの 料金がきまる – 大規模に利用するのであればリザーブ度による割引もあり • ストレージ利用量 – 保存したデータ容量によって決まる月額利用料金 – 計算はGBあたりの単価が適用される 実際の料金については下記を参照 http://aws.amazon.com/jp/dynamodb/pricing/
  14. 14. Amazon DynamoDBを使い始めるには 1. テーブルのKeyやIndexを決める 2. Read/Writeそれぞれのスループットを 決める That’s it, write your code!
  15. 15. ご利用のお客様の一部
  16. 16. AWSの利用: 世界最大級のスポーツイベント 「Super Bowl 2012」の広告配信で 利用 DynamoDBを使用し、秒間50万以上 の書き込み要求を処理 ビジネス効果: 試合当日の急激なトラフィック増加の ピークに対応 Amazon DynamoDBを使用し、秒間50万以 上の書き込み要求に対応
  17. 17. web Web Web Web Web Web ・ ・ ・ Shazam for TV Shazamableな広告コン テンツを配信 利用者はテレビに スマートホンをかざす キャンペーン情報などを配信
  18. 18. Amazon DynamoDBに増え続けるチャットデータを確 実に保存しつつ、サービスの成長に備える AWSの利用: 2012年のサービスの開始時からEC2上 にシステムを構築 ビジネス効果: Amazon DynamoDBの導入で増え続け るデータの心配や、バックアップやメン テナンスを考慮する必要がなくなった 課題: MySQLとRedisでは増え続ける思い出 のデータを保持しながらのサービス成 長が 難しい
  19. 19. RedisからAmazon DynamoDBへ EC2 Redis タイムスタンプでの検索が主用途だったので Rangeキーを用いた検索で置き換えRedisは高機能だがデータ保 存容量の単価は高い http://timers-tech.hatenablog.com/entry/2013/10/31/232027
  20. 20. Amazon DynamoDBの基礎知識
  21. 21. テーブル設計のための基礎知識(1/2) • Table – いわゆるテーブル – プライマリキーの持ち方が2つ • Hash keyをプライマリキー • Hash keyとRange keyの複合キーをプライマリキー • Hash key – 順序を指定しないハッシュインデックスを構築するためのキー – 単体でプライマリキーとして利用されることがある • Range key – Hash keyに該当する複数のデータの順序を保証するためのキー – Hash + Rangeでプライマリキーとすることもできる
  22. 22. テーブル設計のための基礎知識(2/2) • Item – RDBで言ういわゆるレコード – 1つ以上のAttributeを持つ • Attributes – データの中身。RDBで言うカラム。 – Hash key, Range keyに該当するAttributes以外は事前定義不要 – レコード間でAttributesが不揃いであっても問題ない • Attributesの型 – String – Number – Binary – Set of String – Set of Number – Set of Binary
  23. 23. データモデル (1/2) Hash Keyのみの場合 Item Primary Key Attribute A1-1Hash Key
  24. 24. データモデル (2/2) • Hash Key + Range Key の場合 Item Primary Key Attribute A1-1 Hash Key A Range Key 1 Range Key 2 Range Key 3 Attribute A2-1 Attribute A3-1
  25. 25. A,D B,E C,F 123456789 Parition1 Partition2 ParitionN Range key Partition内での データの並びを 保証する Hash key Partition間での データ分散に利 用される Partition DynamoDBでは、性 能を確保するために データはパーティショ ンに分散して格納され る Hash keyとRange keyの概念(1/2)
  26. 26. A,D B,E C,F 123456789 Parition1 Partition2 ParitionN Hash keyとRange keyの概念(2/2) Partition • DynamoDBはデータを複数のPartitionに分 散格納 • プロビジョンしたスループットは各パー ティションに均等に付与、全体で合計値 の性能 • 負荷が特定のキーに偏るとプロビジョン した性能が出ない可能性があるため、 Hash keyの設計には注意 プロビジョンドスループット: x x/N x/N x/N
  27. 27. テーブル操作についての基礎知識(1/3) • GetItem • Hash keyを条件として指定し、 一件のアイテムを取得 • PutItem • 1件のアイテムを書き込む • Update • 1件のアイテムを更新 • Delete • 1件のアイテムを削除 • Query • Hash keyとRange keyの複合条件に マッチするアイテム群を取得 • BatchGet • 複数のプライマリキーを指定して マッチするアイテム群を取得 • Scan • テーブル総ナメする API操作
  28. 28. テーブル操作についての基礎知識(2/3) • 強一貫性を持ったReadオペレーション • GetItem、QueryにはConsistent Readオプションを指定可 • Readリクエストを受け取るよりも前に成功しているすべてのWriteリクエストが反映 された結果が返る • Read Capacity Unitを通常の2倍消費する • Conditional Write • 「キーにマッチするレコードが存在したら/しなかったら」や「この値が○○ 以上/以下だったら」という条件付き書き込み/更新ができる より高度なオペレーション
  29. 29. テーブル操作についての基礎知識(3/3) • UpdateItemにおけるAttributeへの操作 • Attributeに対して、UpdateItemでPut、Add、Deleteという3種類の操作が可能 • Put:Attributeを指定した値で更新 • Add:AttributeがNumber型なら足し算/引き算、Set型ならそのセットに対して値を追加 • Delete:当該Attributeを削除する • Atomic Counter • 上記のAddを利用することによって、Atomicなカウンターを実現することもできる より高度なオペレーション
  30. 30. QueryのためのIndex • Local Secondary Index (LSI) – Range key以外に絞り込み検索のためのキーを持つことができる – Hash keyが同一のアイテム群の中からの検索のために利用 – インデックスもテーブルにプロビジョンしたスループットを利用す る • Global Secondary Index (GSI) – Hash Keyをまたいで検索を行うためのインデックス – インデックスにテーブルとは独立したスループットをプロビジョン して利用する
  31. 31. ユースケースとテーブル設計例
  32. 32. ユースケースごとのテーブル設計及びクエリの例 1. アプリのイベント履歴管理 – Hash + Range keyの利用例 2. ソーシャル画像共有アプリ – 複数テーブルによるデータモデル、LSI、GSIの利用例 3. ◯☓ゲーム – 楽観的ロックによるゲームのステート管理 4. 分散処理におけるロック機構 – 楽観的ロックによる分散システムの競合制御
  33. 33. ゲームの行動履歴管理データベース User (Hash) Timestamp (Range) Opponent Result Alice 2014-02-21 12:21:20 Bob Lost Alice 2014-02-21 12:42:01 Bob Won Alice 2014-02-24 09:48:00 Dan Won Alice 2014-02-25 16:21:11 Charlie Won Battle History 自分のバトル履歴を確認するケースを想定 – Userに自分(Alice)を指定し、更にTimestampが7日以内のデータ をクエリしたりできる Charlie 02-25 16:21 Won! Your Battle History Dan 02-24 09:48 Won! Alice 02-21 12:42 Won!
  34. 34. Amazon DynamoDBのデータも解析に利用 • Amazon Elastic MapReduce (EMR) で読み出し • Amazon Redshiftで直接読み込み • EMRでFilterした後、Redshiftに読み 込み • etc EC2
  35. 35. ソーシャル画像共有アプリ Home My Posts My Profile Bob Steak! 10:18 Carol BBQ! w/Alice 10:12 Dan Riajuee… 10:11 Alice Beer! 10:21 Alice BBQ! w/Carol 10:12 Alice Starting BBQ! 10:09 Name: Alice Mail: foo Profile: some texts
  36. 36. テーブル設計 Users TableFriends Table 2つのテーブルを定義 • ユーザ情報テーブル • 友達リストテーブル
  37. 37. User (Hash) Nicknames Bob [ Rob, Bobby ] Alice [ Allie ] Carol [ Caroline ] Dan [ Daniel, Danny ] 友達一覧を取得 Users Table Item Attribute (string, number, binary, set) Primary Key (Hash)
  38. 38. User (Hash) Nicknames Bob [ Rob, Bobby ] Alice [ Allie ] Carol [ Caroline ] Dan [ Daniel, Danny ] 友達一覧を取得 Friends Table User (Hash) Friend (Range) Bob Alice Alice Bob Alice Carol Alice Dan Users Table Hash + Range Primary Key
  39. 39. Friends Table Users Table User (Hash) Nicknames Bob [ Rob, Bobby ] Alice [ Allie ] Carol [ Caroline ] Dan [ Daniel, Danny ] User (Hash) Friend (Range) Bob Alice Alice Bob Alice Carol Alice Dan 友達一覧を取得 Aliceの友達一覧を取得 1. Query (Table = Friends, Hash = Alice, Range = *) 2. BatchGetItem(Bob, Carol, Dan)
  40. 40. 投稿画像の保存と検索 Images Table User (Hash) Image (Range) Date Link Bob aed4c 2013-10-01 s3://… Bob cf2e2 2013-09-05 s3://… Bob f93bae 2013-10-08 s3://… Alice ca61a 2013-09-12 s3://… Bob Bobの投稿画像一覧を取得 Query (Table=Images, Hash= Bob, Range=*) でもある時刻以降の画像を取得し たかったら…?
  41. 41. ある日時の画像取得 Images Table User Image Date Link Bob aed4c 2013-10-01 s3://… Bob cf2e2 2013-09-05 s3://… Bob f93bae 2013-10-08 s3://… Alice ca61a 2013-09-12 s3://… User Date Image Bob 2013-09-05 cf2e2 Bob 2013-10-01 aed4c Bob 2013-10-08 f93bae Alice 2013-09-12 ca61a Table ByDate Local Secondary Index Local Secondary Index をDateに張る
  42. 42. 画像にユーザのタグ付け ImageTags Table Image User aed4c Alice aed4c Bob f93bae Alice f93bae Bob Image f93baeにAliceをタグ付け PutItem(Table = ImageTags, Hash = f93bae, Range = Alice) Bob でもあるユーザがタグ付けされて る画像の一覧を取得したかったら …? Image f93baeにタグ付けされたユーザ一覧 Query(Table = ImageTags, Hash = f93bae, Range = *)
  43. 43. ユーザのタグ付き画像一覧 ImageTags Table UserにImageをRangeキーとした Global Secondary Indexを張る User (Hash) Image (Range) Bob aed4c Bob f93bae Alice aed4c Alice f93bae ByUser Global Secondary Index Image (Hash) User (Range) aed4c Alice aed4c Bob f93bae Alice f93bae Bob Table Bob Aliceがタグ付けされた画像一覧
  44. 44. ◯☓ゲームのステート管理
  45. 45. ◯☓ゲーム { Id : abecd, Players : [ Alice, Bob ], State : STARTED, Turn : Bob, Top-Right : O } Game Item
  46. 46. ◯☓ゲーム Amazon DynamoDB Alice Bob
  47. 47. ◯☓ゲーム Amazon DynamoDB Alice Bob Update: Top-Left : X Turn : Alice
  48. 48. ◯☓ゲーム – 今のままだとチートが可能 Alice Bob (1) Amazon DynamoDB Bob (2) Bob (3)
  49. 49. ◯☓ゲーム – 今のままだとチートが可能 Bob (1) Amazon DynamoDB Bob (2) Bob (3) Update: Turn : Alice Top-Left : X Update: Turn : Alice Mid : X State : STARTED, Turn : Bob, Top-Right : O Update: Turn : Alice Low-Right : X
  50. 50. ◯☓ゲーム – 今のままだとチートが可能 Bob (1) Amazon DynamoDB Bob (2) Bob (3) Update: Turn : Alice Top-Left : X Update: Turn : Alice Mid : X State : STARTED, Turn : Alice, Top-Right : O, Top-Left : X, Mid: X, Low-Right: X Update: Turn : Alice Low-Right : X
  51. 51. 条件付きアップデート(楽観的ロック) • 現在の特定のAttributeに特定の値が入っていた 場合にのみ更新を実施 • 条件が合わなかったら更新せずに終了 • (但し、1つのアイテムのみで適用可能)
  52. 52. 修正版◯☓ゲーム Bob (1) Amazon DynamoDB Bob (2) Bob (3) Update: Turn : Alice Top-Left : X Expect: Turn : Bob Top-Left : null State : STARTED, Turn : Bob, Top-Right : O Update: Turn : Alice Mid : X Expect: Turn : Bob Mid : null Update: Turn : Alice Low-Right : X Expect: Turn : Bob Low-Right : null
  53. 53. 修正版◯☓ゲーム Bob (1) Amazon DynamoDB Bob (2) Bob (3) State : STARTED, Turn : Bob, Top-Right : O Update: Turn : Alice Top-Left : X Expect: Turn : Bob Top-Left : null Update: Turn : Alice Low-Right : X Expect: Turn : Bob Low-Right : null Update: Turn : Alice Mid : X Expect: Turn : Bob Mid : null
  54. 54. 修正版◯☓ゲーム Bob (1) Amazon DynamoDB Bob (2) Bob (3) State : STARTED, Turn : Alice, Top-Right : O, Top-Left : X Update: Turn : Alice Top-Left : X Expect: Turn : Bob Top-Left : null Update: Turn : Alice Mid : X Expect: Turn : Bob Mid : null Update: Turn : Alice Low-Right : X Expect: Turn : Bob Low-Right : null
  55. 55. バッチ処理のロック管理 S3 S3 Worker1 Jobs Table JobID (Hash) Created Time(Range) Process1 Process2 aed4c 2014-01-01 00:00:00 Done InProcess aed4c 2014-01-01 00:01:00 NotYet NotYet Worker2も処理のジョブ 一覧を取得 Scan (Table = jobs, Process1 = ‘NotYet’) Worker1が未処理のジョ ブ一覧を取得 Scan (Table = jobs, Process1 = ‘NotYet’) ワーカーが複数クラスタいるので、 複数箇所で同じデータが取得される Worker2
  56. 56. バッチ処理のロック管理 S3 S3 処理1 Jobs Table JobID (Hash) Created Time(Range) Process1 Process2 aed4c 2014-01-01 00:00:00 Done InProcess aed4c 2014-01-01 00:01:00 NotYet NotYet Worker2もProcess1をLockしようとする UpdateItem (Table = jobs, Key={JobID:aed4c}, AttributeUpdates={Process1:{Acti on:’Put’,Value:InProcess’}}, Expected:{Process1:‘NotYet’}) 片方だけUpdateに成功する (Lockできる) Worker1がProcess1をLockしようとする UpdateItem (Table = jobs, Key={JobID:aed4c}, AttributeUpdates={Process1:{Acti on:’Put’,Value:InProcess’}}, Expected:{Process1:‘NotYet’})
  57. 57. まとめ • Amazon DynamoDBの特徴 – 高い可用性 – 一貫した性能 – 低い運用負荷 • Amazon DynamoDBの高度な機能 – Local Secondary Indexes – Global Secondary Indexes • ユースケースを取り上げてテーブル設計やクエリの例 – ユーザの行動履歴 – ソーシャル画像共有アプリ – マルバツゲーム – 分散処理におけるロックの管理

×