Successfully reported this slideshow.

More Related Content

Similar to Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪

More from 崇之 清水

Related Books

Free with a 30 day trial from Scribd

See all

Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪

  1. 1. しみず @shimy_net 2013 / 6 / 22 Amazon DynamoDB 初心者向け 超速マスター編
  2. 2. 自己紹介 しみず @shimy_net Webアーキテクト アマゾン芸人 無駄に技術を使って 面白いことをする
  3. 3. 本を執筆しました http://goo.gl/QtaK6
  4. 4. やること □ 概説 □ Management Console から利用する ・Table の作成 ・Throughput の変更 ・Item の登録、取得、更新 □ Eclipse から利用する(Java) ・デモンストレーション □ 手乗りDynamoDB ・デモンストレーション
  5. 5. Amazon DynamoDB とは □ 完全マネージド型の NoSQL データベースサービス ・管理不要で高い拡張性を提供 ・ハードウェア調達、インストール、設定、レプリケーション、  ソフトウェア修正プログラムの適用、クラスタ化 が不要 ・開発者はAPI経由で利用するだけ(SDK) □ 高い拡張性 ・データベース容量は自動的に拡張 ・パフォーマンスを指定できる   ・利用者がダイヤルを設定するようにパフォーマンスを設定   ・秒間あたりの、読み込み/書き込みスループットを指定
  6. 6. Amazon DynamoDB とは □ データへの高速なアクセス ・AWSクラウドの特性を活用  ・十分な数のハードウェアに分散し、安定した高いパフォーマンスを提供  ・SSDを利用して高速アクセス ・データベースが大規模になっても、数ミリ秒のアクセス速度を期待 □ 高い信頼性 ・同期レプリケーションアーキテクチャ   ・データを複数のAZ(データセンター)にコピー   ・データセンターレベルの障害からもデータを守る
  7. 7. Amazon DynamoDB とは □ 整合性モデル  ・読み込みに対して結果的に整合性のある読み込みを設定するか   強い整合性を設定するかを指定できる □ Local Secondary Indexes  ・テーブル毎に最大5つのローカルセカンダリインデックスをサポート  ・テーブルの属性の一部もしくは全てを射影できる □ Amazon EMR 連携  ・S3 への Export / Import、Query、Join
  8. 8. Data Model □ Tables Items Attributes DynamoDB Table1 Table2 Table N ・・・ Item1 Item2 Item3 Item N ・・・ { Id = 101 ProductName = "Book 101 Title" ISBN = "111-1111111111" Authors = [ "Author 1", "Author 2" ] Price = -2 Dimensions = "8.5 x 11.0 x 0.5" PageCount = 500 InPublication = 1 ProductCategory = "Book" } Attribute { Id = 201 ProductName = "18-Bicycle 201" Description = "201 description" BicycleType = "Road" Brand = "Brand-Company A" Price = 100 Gender = "M" Color = [ "Red", "Black" ] ProductCategory = "Bike" } Item1 Item2 利用可能な型 ・Scalar data types   Number, String, Binary ・Multi-valued types   Number Set, String Set, Binary Set 64KBまで スキーマレス
  9. 9. Primary Key □ Hash Type Primary Key  ・1つの Attribute が Primary Key  ・DynamoDB は Primary Key に対して Hash Index を作成   □ Hash and Range Type Primary Key  ・2つの Attribute が Primary Key      1: Hash Primary Key      2: Range Primary Key  ・DynamoDB は Hash Primary Key に対して Hash Index を作成  ・DynamoDB は Range Primary Key に対して整列した Range Index を作成 Attribute 1 (Hash Primary Key) Attribute 2 Attribute 3 Attribute 1 (Hash Primary Key) Attribute 2 (Range Primary Key) Attribute 3 Map<HashKey,Object> Map<HashKey, SortedMap<RangeKey,Object>>
  10. 10. Primary Key(具体例) □ サンプルデータ Table Name Primary Key Type Hash Attribute Name Range Attribute Name Forum ( Name, ... ) Hash Attribute Name: Name - Thread (ForumName, Subject, ... ) Hash and Range Attribute Name: ForumName Attribute Name: Subject Reply ( Id, ReplyDateTime, ... ) Hash and Range Attribute Name: Id Attribute Name: ReplyDateTime Amazon DynamoDB Amazon DynamoDB#DynamoDB Thread 1 2011-12-11 00:40:57 Amazon DynamoDB DynamoDB Thread1 Amazon S3 Amazon DynamoDB DynamoDB Thread2 Amazon S3 S3 Thread2 Amazon DynamoDB#DynamoDB Thread 1 2011-12-18 00:40:57 Amazon DynamoDB#DynamoDB Thread 1 2011-12-25 00:40:57 Amazon DynamoDB#DynamoDB Thread 2 2011-12-25 00:40:57 Amazon DynamoDB#DynamoDB Thread 2 2012-01-03 00:40:57 Forum Thread Reply Hash Primary key Range Primary key Hash Primary key Range Primary key Hash Primary key
  11. 11. Primary Key(具体例) □ Forum Name (Primary Key) Other Attributes "Amazon DynamoDB" { Category="Amazon Web Services" Threads=3 Messages=4 Views=1000 LastPostBy="User A" LastPostDateTime= "2012-01-03T00:40:57.165Z" } "Amazon S3" { Category="Amazon Web Services" Threads=1 }
  12. 12. Primary Key(具体例) □ Thread Name (Primary Key) Other Attributes ForumName = "Amazon DynamoDB" Subject = "DynamoDB Thread 1" { Message = "DynamoDB thread 1 message text" LastPostedBy = "User A" Views = 0 Replies = 0 Answered = 0 Tags = [ "index", "primarykey", "table" ] LastPostDateTime = "2012-01-03T00:40:57.165Z" } ForumName = "Amazon DynamoDB" Subject = "DynamoDB Thread 2 { Message = "DynamoDB thread 2 message text" LastPostedBy = "User A" Views = 0 Replies = 0 Answered = 0 Tags = [ "index", "primarykey", "rangekey" ] LastPostDateTime = "2012-01-03T00:40:57.165Z" } ForumName = "Amazon S3" Subject = "S3 Thread 1" { Message = "S3 Thread 1 message text" LastPostedBy = "User A" Views = 0 Replies = 0 Answered = 0 Tags = [ "largeobject", "multipart upload" ] LastPostDateTime = "2012-01-03T00:40:57.165Z" }
  13. 13. Primary Key(具体例) □ Reply Name (Primary Key) Other Attributes Id = "Amazon DynamoDB#DynamoDB Thread 1" ReplyDateTime = "2011-12-11T00:40:57.165Z { Message = "DynamoDB Thread 1 Reply 1 text" PostedBy = "User A" } Id = "Amazon DynamoDB#DynamoDB Thread 1" ReplyDateTime = "2011-12-18T00:40:57.165Z { Message = "DynamoDB Thread 1 Reply 1 text" PostedBy = "User A" } Id = "Amazon DynamoDB#DynamoDB Thread 1" ReplyDateTime = "2011-12-25T00:40:57.165Z { Message = "DynamoDB Thread 1 Reply 3 text" PostedBy = "User B" } Id = "Amazon DynamoDB#DynamoDB Thread 2" ReplyDateTime = "2011-12-25T00:40:57.165Z { Message = "DynamoDB Thread 2 Reply 1 text" PostedBy = "User A" } Id = "Amazon DynamoDB#DynamoDB Thread 2" ReplyDateTime = "2012-01-03T00:40:57.165Z { Message = "DynamoDB Thread 2 Reply 2" PostedBy = "User A" }
  14. 14. Local Secondary Indexes second=4 id=3 y=xx(Projected) Primary key Secondary Index □ Local Secondary Indexes とは  ・テーブル毎に最大5つのローカルセカンダリインデックスをサポート  ・テーブルの属性の一部もしくは全てを射影できる ・・・ id=3 x=xx y=xx z=xx id=3 x=xx y=xx z=xx
  15. 15. Local Secondary Indexes □ LSI がないとき □ LSI があるとき Table Item1 Item2 Item N プログラム loop (items) {   //処理 } Item2 ・・・ Item9 必要な Item を抽出 するフィルタが必要 Table Item2 Item9 Query Query
  16. 16. Provisioned Throughput □ Unit とは 書き込みの場合 1 ユニット = 1KB の Item に対して 1 秒あたり 1 回の書き込みできる 読み込みの場合 1 ユニット = 4KB のItemに対して強い整合性のある読み込みを 1 秒あたり 1 回 できる ※結果整合性のある読み込みは 1 秒あたり 2 回できる
  17. 17. 整合性モデル □ 結果的に整合性のある読み込み(デフォルト) ‒ 結果的に整合性のあるオプションを選択すると、読み込みスループットが最大限 に向上します。ただし、結果的に整合性のある読み込みには、最新の書き込み結 果が反映されない可能性があります。データの全コピーの整合は通常 1 秒以内に 行われます。短時間後に読み込みを繰り返すことによって、更新されたデータが返 されます。 □ 強い整合性の読み込み ‒ 結果的に整合性のある読み込みに加えて、Amazon DynamoDB は、お客様のア プリケーションまたはお客様のアプリケーションの要素が必要とする場合に強い 整合性のある読み込みをリクエストするための、柔軟性とコントロールを提供し ます。強い整合性のある読み込みが返す結果には、読み込みの前に適切な応答を 受け取ったすべての書き込みが反映されています。
  18. 18. API CREATETABLE ‒ テーブルを作成し、データアクセスに使用するプライマリインデックスを指定します。 UPDATETABLE ‒ 指定されたテーブルについて、 プロビジョニングされたスループット値を更新します。 DELETETABLE ‒ テーブルを削除します。 DESCRIBETABLES ‒ テーブルサイズ、ステータス、およびインデックス情報を返します。 LISTTABLES ‒ 現在のアカウントおよびエンドポイントに関連付けられたすべてのテーブルのリストを返します。 PUTITEM ‒ 新しい項目を作成するか、古い項目を(すべての属性を含め)新しい項目で置き換えます。指定したテーブルに同じプライ マリキーを持つ項目が存在する場合、既存の項目は新しい項目に完全に置き換えられます。条件付き演算子を使用して、所定 の条件に一致する属性値を持つ項目のみを置き換えたり、その項目が存在しない場合にのみ新しい項目を挿入したりすること もできます。 BATCHWRITEITEM ‒ 1回のトランザクションとしてではなく、1回のリクエストで、複数のテーブル間で複数の項目を挿入、置換、削除します。 PUT または DELETE で最大25項目のバッチをサポートし、合計リクエストサイズは最大1 MB です。 UPDATEITEM ‒ 既存の項目の属性を編集します。条件付き演算子を使用して、項目の属性値が所定の条件に一致する場合に のみ更新を実行することもできます。 DELETEITEM ‒ プライマリキーを使用してテーブルから1つの項目を削除します。条件付き演算子を使用して、項目の属性値が所定の条件 に一致する場合にのみ項目を削除することもできます。
  19. 19. API GETITEM ‒ GETITEM 演算は、プライマリキーに一致する項目の属性セットを返します。GETITEM 演算は、デフォルトでは、結果的 に整合性のある読み込みを提供します。ご利用のアプリケーションで結果的に整合性のある読み込みを使用できない場合は、 CONSISTENTREAD を使用します。 BATCHGETITEMS ‒ BATCHGETITEMS 演算は、複数の項目の属性を複数のテーブルから、それぞれのプライマリキーを使用して返します。1 回の応答のサイズ制限は 1 MB で、最大 100 個の項目を返します。強い整合性と結果整合性の両方をサポートします。 QUERY ‒ テーブルのプライマリキーを使用して、または、セカンダリインデックスからセカンダリインデックスキーを使用して、1 つ以上の項目を取得します。範囲キー値またはセカンダリインデックスキーに対して比較演算子を使用することで、クエリの 範囲を絞り込むことができます。強い整合性と結果整合性の両方をサポートします。応答1つあたりのサイズ上限は1 MBです。 SCAN ‒ テーブルに対して完全スキャンを実行し、1つ以上の項目と属性を取得します。返される項目は、1つ以上の属性に対して指 定したフィルタで制限されている場合があります。したがって、この API は、テーブルのプライマリキーではない属性に対し て一時的なクエリを有効にするときに使用できます。ただし、これはインデックスを使用しない完全テーブルスキャンなので、 予測可能なパフォーマンスが必要なアプリケーションクエリには使用しないでください。スキャン API リクエストの結果 セットは結果的に整合性があります。スキャン API をインジケータと考えることができます。あるスキャン API リクエスト のスキャン項目の合計サイズが 1 MB の上限を超えると、そのリクエストは終了し、取得された結果は(以降のオペレーショ ンでスキャンを続行できるように)LASTEVALUATEDKEY と共に返されます。 デフォルトでは、スキャンオペレーションはデータを順次処理します。テーブルのスキャンを並列で行うことも可能です。ス キャンオペレーションでは、そのスキャンをいくつのセグメントに分割するかを指定し、複数のセグメントを同時にスキャン することができます。並列処理を使用したテーブルのスキャンの詳細については、並列スキャンのドキュメントを参照してく ださい。
  20. 20. 料金表
  21. 21. 開発・管理ツール □ AWS Management Console(Webブラウザ) □ AWS SDK for XXXX
  22. 22. やること □ 概説 □ Management Console から利用する ・Table の作成 ・Throughput の変更 ・Item の登録、取得、更新 □ Eclipse から利用する(Java) ・デモンストレーション □ 手乗りDynamoDB ・デモンストレーション
  23. 23. Management Console から利用 ① ここからスタート ② DynamoDBを選択
  24. 24. Table の作成 ③ Create Table をクリック
  25. 25. Table の作成 ④ テーブル名を指定 ⑤ Primary Key を指定
  26. 26. Table の作成 ⑥ Local Secondary Index を指定
  27. 27. Table の作成 ⑦ Throughput を指定
  28. 28. Table の作成 ⑧ 通知先 を指定
  29. 29. Table の作成 ⑨ 完了
  30. 30. Table の作成 Table が作成された
  31. 31. Throughput の変更 ① Modify Throughput をクリック
  32. 32. Throughput の変更 ② Throughput を変更 スループットを減らす作業は1日に4回まで ※グリニッジ標準時基準 1回の作業で最大2倍までスケール可能 ③ 完了
  33. 33. Item の登録 ① Explore Table をクリック
  34. 34. Item の登録 ② New Item をクリック
  35. 35. Item の登録 ③ 属性データを入力 ④完了
  36. 36. Item の取得(Scan) ① Scan を選択 ② Go をクリック
  37. 37. Item の取得(Scan) ③ Item Details をクリック Item 一覧が 表示される ④ Item 詳細が 表示される
  38. 38. Item の取得(Query) ① Query を選択 ② Hash Key と Range Key で検索
  39. 39. Item の更新 ① Edit Item をクリック ② Attribute を更新 ③ 完了
  40. 40. やること □ 概説 □ Management Console から利用する ・Table の作成 ・Throughput の変更 ・Item の登録、取得、更新 □ Eclipse から利用する(Java) ・デモンストレーション □ 手乗りDynamoDB ・デモンストレーション
  41. 41. 手乗りDynamoDBの仕組み LRMIC G センサー WebSocket (SocketRocket) - (void)remoteControlReceived WithEvent:(UIEvent *)event {} EC2 DynamoDB websocket aws-sdk 応答結果により 色が変わる
  42. 42. 手乗りDynamoDB
  43. 43. !     以上! ありがとうございました!
  44. 44. Items(参考) Hash Key Range Key

×