dynamodb-deepdive-DMM勉強会[30min]1

Similar documents
PowerPoint Presentation

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

FINAL FANTASY XV POCKET EDITION を支える AWS サーバレス技術 LOGO ILLUSTRATION: 2016 YOSHITAKA AMANO 2018 SQUARE ENIX CO., LTD. All Rights Reserved.

Startup_on_AWS_usecases_StartupDay

AWSにおけるデータベース・サービスの活用

TC-01 ビッグデータだけじゃない! Amazon DynamoDB の活用事例 Cassandra から DynamoDB への移行で見えたその特徴 サイバーエリアリサーチ株式会社中西健

スライド 1

PostgreSQL SQL チューニング入門 ~ Explaining Explain より ~ 2012 年 11 月 30 日 株式会社アシスト 田中健一朗

PowerPoint プレゼンテーション

データベースの近代化:シンプルなクロスプラットフォーム、最小のダウンタイムで実現するクラウド移行

AWS およびパートナーサービスを使った、データの集約および活用設計パターン

よくある問題を解決する~ 5 分でそのままつかえるソリューション by AWS ソリューションズビルダチーム

AWS 上でのサーバーレスアーキテクチャ 入 門 AWS Black Belt Online Seminar 2016 アマゾンウェブサービスジャパン株式会社 ソリューションアーキテクト清 水崇之 , Amazon Web Services, Inc. or its Aff

自 己紹介 アマゾンウェブサービス ジャパン株式会社 ソリューションアーキテクト Amazon Kinesis うちうみえいいちろう 内海英 Java LMAX Disruptor

Rmenuフレームワーク

サーバレスアーキテクチャで実現した M-1 グランプリ敗者復活戦投票システム

使ってみよう!データベースとストレージ ~ Getting Started with AWS Database and Storage Services ~

PowerPoint プレゼンテーション


AWS Deck Template

pg_monz 監視アイテム一覧 :Template App PostgreSQL Template App PostgreSQL アプリケーション LLD アイテムトリガー監視タイプ更新間隔ヒストリトレンドデフォルト説明ステータス pg.get pgsql.get.pg.bgwriter Zabb

PowerPoint Presentation

Microsoft Word - tutorial3-dbreverse.docx

PowerPoint Presentation

クラウドネイティブサービスのご紹介 〜高い可用性と拡張性をリーズナブルに今すぐ実現〜

【Cosminexus V9】クラウドサービスプラットフォーム Cosminexus

PostgreSQL による クラスタ構成の可能性 SRA OSS, Inc. 日本支社 取締役支社長 石井達夫

Symantec AntiVirus の設定

スライド 1

Zabbix で PostgreSQL を監視! pg_monz のご紹介 Zabbix Conference Japan 年 11 月 20 日 SRA OSS, Inc. 日本支社マーケティング部

AWS Black Belt Online Seminar Amazon Kinesis アマゾンウェブサービスジャパン株式会社 ソリューションアーキテクト 内海英 一郎郎

Enterprise Cloud + 紹介資料

日経電子版におけるAWSとその周辺サービスの活用事例

AWS の NoSQL 入門 〜Amazon ElastiCache, Amazon DynamoDB〜

PowerPoint プレゼンテーション

オージス総研0707セミナー

はじめてみよう AWS ~これだけでわかる、できる、AWS のコアサービスを活用した基本のシステム構成~

PowerPoint プレゼンテーション

…l…b…g…‘†[…N…v…“…O…›…~…fi…OfiÁŸ_

10年オンプレで運用したmixiをAWSに移行した10の理由

今さら聞けない!? Oracle入門 ~後編~

test

160311_icm2015-muramatsu-v2.pptx

PowerPoint Presentation

サーババンドル版ライセンス NX7700x シリーズ Express5800 シリーズのサーバと同時に購入することで パッケージ製品よりも安価 に導入することのできるライセンスも提供しています ライセンスの注意事項 サーババンドル版のライセンスについてサーババンドル版では 通常のサーバライセンスおよ

2. Save をクリックします 3. System Options - Network - TCP/IP - Advanced を開き Primary DNS server と Secondary DNS Server に AXIS ネットワークカメラ / ビデオエンコーダが参照できる DNS サ

Joint Content Development Proposal Tech Docs and Curriculum

変更履歴 項番版数内容更新日 版新規作成 2013 年 11 月 18 日 1

MIB サポートの設定

Agenda Scalability Availability CAP Theorem Scalability Availability Consistency BASE Transaction

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

WEBサービス超入門 mask.key

スライド 1

~~~~~~~~~~~~~~~~~~ wait Call CPU time 1, latch: library cache 7, latch: library cache lock 4, job scheduler co

モバイルアプリを Azure で作る - データを扱う Azure Storage を利 してデータを保存する 本稿では PHP と Windows Azure を使って 画像などのファイルを扱うアプリケーションを開発する方法を説明します Windows Azure Platform では データの

最新 IoT デザインパターン 〜AWS IoT と AWS Greengrass を用いた構築パターン〜

勉強会の流れ Google API の概要 デモ curl で実際に体験 Copyright 2010 SRA OSS, Inc. Japan All rights reserved. 2

Webhard_Users manual

構成例 システム名 : 単独サーバ業務システムユーザ数 : 1 ユーザ マルチコア CPU のサーバ 1 台で開発 運用します ソート機能を使用します COBOL SE Developer COBOL SE Server Runtime SORTKIT/Enterprise for Windows

最新アップデート AWS IoT Solution 〜 事例とサービスアップデート 〜

第 7 章 ユーザー データ用表領域の管理 この章では 表や索引を格納するユーザー データ用表領域の作成や 作成後のメンテナンスに ついて解説します 1. ユーザー データ用表領域の管理概要 2. ユーザー データ用表領域作成時の考慮事項 3. ユーザー データ用表領域の作成 4. ユーザー データ

Infor 10 ERP Enterprise Overview

3. XML, DB, DB (AP). DB, DB, AP. RDB., XMLDB, XML,.,,.,, (XML / ), XML,,., AP. AP AP AP 検索キー //A=1 //A=2 //A=3 返却 XML 全体 XML 全体 XML 全体 XMLDB <root> <A

AWS Mobile Deep Dive - 入門から実践までの最短コース 〜 ライブコーディングで学ぶ AWS を活用したモバイルアプリの開発 〜

Transcription:

Amazon DynamoDB Yuko Mori Solutions Architect Amazon Data Services Japan K.K.

自己紹介 森祐孝 ( もりゆうこう ) アマゾンデータサービスジャパン株式会社 ソリューションアーキテクト 経歴 Sier などで アプリケーション開発 PL PM などを担当 ゲーム会社 ( テクニカルディレクタ ) ブラウザソーシャルゲーム スマートフォン向けソーシャルゲーム 担当 ソーシャルゲーム コンソールゲーム系のお客様の AWS 構築 支援

Agenda DyanamoDBとは Table, API, Data Type Indexes Scaring ユースケース & ベストプラクティス DynamoDB Streams

DyanamoDB とは

Amazon DynamoDB の 生い 立立ち Amazon.com ではかつて全てのアクセスパターンを RDBMS で処理理していた RDBMS のスケールの限界を超えるため開発された Dynamo が祖先 結果整合性モデル採 用による可 用性向上 HW を追加する毎に性能が向上するスケーラビリティ シンプルなクエリモデルによる予測可能な性能

Amazon DynamoDB の特徴 完全マネージド型の NoSQL データベースサービス ストレージの容量量制限がない 運 用管理理必要なし ハイスケーラブル 低レイテンシー 高可 用性 3x レプリケーション シンプル且つパワフル API クライアント

Tables, API, Data Types

Table table items attributes 必須キーバリュー型のアクセスパターンデータ分散に利用される Hash Key Range Key オプション 1:N モデルのリレーションシップ豊富な Query をサポート ハッシュキー検索用 ==, <, >, >=, <= begins with between sorted results counts 先頭 / 末尾 N 件ページ単位出力

Table API CreateTable Query UpdateTable Scan DeleteTable DescribeTable BatchGetItem ListTables BatchWriteItem GetItem PutItem UpdateItem DeleteItem DynamoDB In preview Streams API Liststreams DescribeStream GetShardIterator GetRecords

AWS SDKs and CLI 各種言語むけのオフィシャル SDK や CLI を利用 Java Python PHP.NET Ruby nodejs Javascript in the Browser ios Android AWS CLI

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 用に定義

Document データ型 (JSON) データタイプ (M, L, BOOL, NULL) として JSON をサポート Document SDKs 単純なプログラミングモデル JSON から JSON への変換 Java, JavaScript, Ruby,.NET Javascript string number boolean null array object DynamoDB S N BOOL NULL L M

Hash Table Hash key は単体でプライマリキーとして利用 順序を指定しないハッシュインデックスを構築するためのキー テーブルは 性能を確保するために分割 ( パーティショニング ) される場合があ る Id = 1 Name = Jim Hash (1) = 7B Id = 2 Name = Andy Dept = Engg Hash (2) = 48 Id = 3 Name = Kim Dept = Ops Hash (3) = CD 00 00 54 55 Key Space A9 AA FF

データは 3 箇所にレプリケーション Id = 2 Name = Andy Dept = Engg Id = 1 Name = Jim Id = 3 Name = Kim Dept = Ops Replica 1 Id = 2 Name = Andy Dept = Engg Id = 1 Name = Jim Id = 3 Name = Kim Dept = Ops Replica 2 Id = 2 Name = Andy Dept = Engg Id = 1 Name = Jim Id = 3 Name = Kim Dept = Ops Replica 3 Partition 1 Partition 2 Partition N

Hash-Range Table Hash + Range でプライマリキーとすることもできる Hash key に該当する複数のデータの順序を保証するために Range key が使われる Hash Key の数に上限はありません (Local Secondary Indexes を使用時は上限あり ) Partition 1 Partition 2 Partition 3 00:0 54: 55 A9: AA FF: Customer# = 2 Order# = 10 Item = Pen Customer# = 2 Order# = 11 Item = Shoes Customer# = 1 Order# = 10 Item = Toy Customer# = 1 Order# = 11 Item = Boots Customer# = 3 Order# = 10 Item = Book Customer# = 3 Order# = 11 Item = Paper Hash (2) = 48 Hash (1) = 7B Hash (3) = CD

DynamoDB の整合性モデル Write 少なくとも 2 つのレプリカでの書き込み完了了が確認とれた時点で Ack Read デフォルト 結果整合性のある読み込み 最新の書き込み結果が反映されない可能性がある Consistent Read オプションを付けたリクエスト 強い整合性のある読み込み Read リクエストを受け取る前までの Write がすべて反映されたレスポンスを保証

Indexes

Local Secondary Index (LSI) Range key 以外に絞り込み検索を行う key を持つことができる Hash key が同一で 他のアイテムからの検索のために利用 すべての要素 ( テーブルとインデックス ) の合計サイズを 各ハッ シュキーごとに 10 GB に制限 Table A1 (hash) A2 (range) A3 A4 A5 LSIs A1 (hash) A1 (hash) A1 (hash) A3 (range) A4 (range) A5 (range) A2 (table key) A2 (table key) A2 (table key) KEYS_ONLY A3 (projected) A3 (projected) INCLUDE A3 A4 (projected) ALL

Global Secondary Index (GSI) Hash Key 属性の代わりとなる Hash Key をまたいで検索を行うためのインデックス Table A1 (hash) A2 A3 A4 A5 A2 (hash) A1 (table key) KEYS_ONLY GSIs A5 (hash) A4 (range) A1 (table key) A3 (projected) INCLUDE A3 A4 (hash) A5 (range) A1 (table key) A2 (projected) A3 (projected) ALL

GSI の更新フロー Client Table Primary Primary table Primary table Primary Global table Secondary table Index 2. 非同期 Update (in progress) GSI にはテーブルとは独立したスループットをプロビジョンして利用するため十分なスループットが必要

Scaling

Scaling スループット DynamoDB はテーブル単位で 読み書きのスループットを指定する必要がある ( プロビジョニングするスループットキャパシティ ) サイズ テーブルには任意の数のアイテムが追加可能 1 つのアイテムの合計サイズは 400 KB local secondary index について 異なるハッシュキーの値ごとに最大 10GB のデータを格納

スループット テーブルレベルによってプロビジョニング Read Capacity Units (RCU) 1 秒あたりの読み込み項目数 x 項目のサイズ (4 KB ブロック ) 結果整合性のある読み込みをする場合はスループットが 2 倍 例 1) アイテムサイズ :1.2KB(1.2/ 4 = 0.3 1 繰り上げ ) 読み込み項目数 1000 回 / 秒 1000 1 = 1000 RCU 例 2) アイテムサイズ :4.5KB (4.5 / 4 1.1 2 繰り上げ ) 読み込み項目数 1000 回 / 秒 1000 2 = 2000 RCU 結果整合性のある読み込みの場合 1000 2 ½ = 1000 RCU

スループット Write Capacity Units (WCU) 1 秒あたりの書き込み項目数 x 項目のサイズ (1 KB ブロック ) 1KB を下回る場合は繰り上げられて計算 例 1) アイテムサイズ :512B(0.512/ 1 0.5 1 繰り上げ ) 書き込み項目数 1000 項目 / 秒 1000 1 = 1000 WCU 例 2) アイテムサイズ :2.5KB (2.5 / 1 = 2.5 3 繰り上げ ) 書き込み項目数 1000 項目 / 秒 1000 3 = 3000 WCU 読み込みと書き込みのキャパシティユニットは独立して設定 RCU WCU

スループットの設定 1 概算の見積もりから キャパシティユニットを大きめに設定 2CloudWatch にて負荷試験 実運用で様子を見て キャパシティユニットを調整 あまり大きくし設定し過ぎると パーテション分割時のキャパシティ分割に注意

パーティショニング DynamoDB はプロビジョンされたスループットキャパシティを確保するためにテーブルを複数のパーティションに分散して格納 table ハッシュキーをパーティション間でのデータ分散に利利 用し 格納ストレージサイズやプロビジョンされたスループットによって 自動的にパーティショニングが実施 partitions 1.. N partition 1..N

パーティショニングの算出 11 つのパーティションに対して 最大 3,000 個の読み込みキャパシティーユニットまたは 1,000 個の書き込みキャパシティーユニットを割り当てられる # of Partitions (for throughput) = RCU 678 89:;< 3000 RCU + WCU 678 A8BC9< 1000 WCU 2 単一のパーティションには 約 10 GB のデータを保持される # of Partitions = (for size) Table Size in GB 10 GB

パーティショニングの算出方法 大きいほうを採用 (total) (for size) (for throughput) table partitions 1.. N

パーティショニング算出例 スループット # of Partitions (for throughput) ストレージサイズ # of Partitions = M NO PQ NO = 0.8 = 1 (for size) 大きいほうを採用 = Table size = 8 GB, RCUs = 5000, WCUs = 500 RQQQ STU VQQQ WXY + RQQ ZTU PQQQ [XY = 2.17 = 3 (total) RCU と WCU の値は均一に各パーテションに割り当てられます RCUs per partition = 5000/3 = 1666.67 WCUs per partition = 500/3 = 166.67 Data/partition = 8/3 = 2.66 GB

DynamoDB のスループットを最大限に活用 DynamoDB のスループットを最大限に活用するには テーブルを作成するときに ハッシュキー要素に個別の値が多数含まれ できるだけランダムかつ均一に値がリクエストされるようにします Space: キーアクセスはなるべく均等になるように Time: リクエストはなるべく均等な間隔で DynamoDB Developer Guide

Example: Hot Keys Partition Heat Time

Example: Periodic spike

DynamoDB の料金体系 プロビジョニングされたスループットで決まる時間料金 Read/Write それぞれプロビジョンしたスループットによって時間あたりの料金がきまる 大規模に利用するのであればリザーブドキャパシティによる割引もあり ストレージ利用量 保存したデータ容量によって決まる月額利用料金 計算は GB あたりの単価が適用される 詳細はこちらを参照 http://aws.amazon.com/jp/dynamodb/pricing/

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

リアルタイム投票 システム Write-heavy items

投票システムの要件 投票は一回のみ 一度投票したものは変えられない リアルタイムに集計 投票者の統計 分析を行いたい

リアルタイム投票システムのアーキテクチャ 投票 Table Voters Voting App 票集計 Table

スケールすることによるボトルネック Voters 200,000 WCUs を設定 Partition 1 1000 WCUs Partition K 1000 WCUs Partition M 1000 WCUs Partition N 1000 WCUs Candidate A Candidate B 投票 Table

シャーディングでの書き込み Voter Candidate A_7 Candidate A_1 Candidate A_4 Candidate A_5 Candidate A_3 Candidate A_2 Candidate B_4 Candidate B_8 Candidate B_5 Candidate B_1 Candidate B_3 Candidate B_7 Candidate A_6 Candidate A_8 投票 Table Candidate B_2 Candidate B_6

シャーディングでの書き込み Voter UpdateItem: CandidateA_ + rand(0, 200) ADD 1 to Votes Candidate A_7 Candidate A_1 Candidate A_4 Candidate A_5 Candidate A_3 Candidate A_2 Candidate B_4 Candidate B_8 Candidate B_5 Candidate B_1 Candidate B_3 Candidate B_7 Candidate A_6 Candidate A_8 投票 Table Candidate B_2 Candidate B_6

正確な投票 1. 投票データの登録 重複排除 2. 投票データの集計 Voter 投票 Table UserId Candidate Date 1 A 2013-10-02 2 B 2013-10-02 3 B 2013-10-02 4 A 2013-10-02 投票集計 Table Segment Votes A_1 23 B_2 12 B_1 14 A_2 25

正確な集計は? Voter 投票 Table UserId Candidate Date 1 A 2013-10-02 2 B 2013-10-02 3 B 2013-10-02 4 A 2013-10-02 投票集計 Table Segment Votes A_1 23 B_2 12 B_1 14 A_2 25

DynamoDB Streams In preview

In preview What is DynamoDB Streams? It is a Streams of updates Scales with your table DynamoDB DynamoDB Streams

DynamoDB Streams テーブルの更新の情報を保持 非同期に更新 シリアライズされたデータ アイテム毎の厳密な管理 高耐久性 テーブルよるスケール 有効期限は24 時間 1 秒未満の遅延書き込み

View types 更新情報 (Name = John, Destination = Mars) (Name = John, Destination = Pluto) View Type Destination Old Image 更新前の情報 Name = John, Destination = Mars New Image 更新後の情報 Old and New Images Keys Only Name = John, Destination = Pluto Name = John, Destination = Mars Name = John, Destination = Pluto Name = John

DynamoDB Streams and Amazon Kinesis Client Library Partition 1 Shard 1 KCL Worker DynamoDB クライアントアプリケーション 更新 Partition 2 Partition 3 Partition 4 Shard 2 Shard 3 KCL Worker KCL Worker Table Partition 5 Shard 4 KCL Worker テーブル Streams Amazon Kinesis Client Library Application

DynamoDB Streams and AWS Lambda

AWS Lambda イベントをトリガーにコードを実 行行するコンピュートサービス イメージのリサイズやサムネイルの作成 元画像 1 3 Amazon S3 Bucket イベント サムネイル画像 2 値チェックや別テーブルへのコピー Amazon DynamoDB Table and Streams AWS Lambda AWS Lambda 別テーブルを更更新 プッシュ通知 特徴 (http://aws.amazon.com/jp/lambda/) OS キャパシティ等インフラの管理不要 S3 Kinesis SNS 等でのイベント発生を元にユーザが用意したコード (Node.js,java 8) を実行 ユーザアプリからの同期 / 非同期呼び出し 価格体系 (http://aws.amazon.com/jp/lambda/pricing/) コード実行時間 (100ms 単位 ) Lambdaファンクションへのリクエスト回数 1 月あたり100 万リクエスト 400,000GB/ 秒が無料で利用可能

Real-time voting architecture 投票集計 Table Voters Voting app 投票 Table 投票 DynamoDB Streams Your Amazon Kinesis Enabled App Amazon Redshift Amazon EMR

Real-time voting architecture 投票集計 Table Voters Voting app 投票 Table 投票 DynamoDB Streams Your Kinesis-enabled app Amazon Redshift Amazon EMR

Real-time voting architecture 投票集計 Table Voters Voting app 投票 Table 投票 DynamoDB Streams Your Kinesis-enabled app Amazon Redshift Amazon EMR

Real-time voting architecture 投票者の統計 分析 投票集計 Table Voters Voting app 投票 Table 投票 DynamoDB Streams Your Kinesis-enabled app Amazon Redshift Amazon EMR

DynamoDB が使われているユースケース KVS として Web アプリケーションのセッションデータベース ユーザー情報の格納するデータベース 広告やゲームなどのユーザー行動履歴 DB として ユーザー ID ごとに複数の行動履歴を管理するためのデータベース ソーシャルアプリのバックエンドとして モバイルアプリから直接参照できるデータベースとして 他にも バッチ処理のロック管理 フラッシュマーケティング ストレージのインデックス

NoSQL vs RDB NoSQL 得意 / メリット スケーラビリティ 不得意 / デメリット 複雑なクエリ トランザクション RDB 得意 / メリット 柔軟なクエリ トランザクション 不得意 / デメリット スケーラビリティ

ユースケースに合わせて DB 製品を選択 Amazon DynamoDB Managed NoSQL Amazon Redshift Managed data warehouse Elastic Load Balancing Amazon ElastiCache Managed in-memory caching Clients EC2 Amazon RDS Managed SQL BI tools

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