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(初心者向け 超速マスター編)JAWSUG大阪

40,045 views

Published on

Published in: Technology

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

  1. 1. しみず @shimy_net2013 / 6 / 22Amazon DynamoDB初心者向け 超速マスター編
  2. 2. 自己紹介しみず @shimy_netWebアーキテクトアマゾン芸人無駄に技術を使って面白いことをする
  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 AttributesDynamoDB Table1Table2Table N・・・Item1Item2Item3Item N・・・{Id = 101ProductName = "Book 101 Title"ISBN = "111-1111111111"Authors = [ "Author 1", "Author 2" ]Price = -2Dimensions = "8.5 x 11.0 x 0.5"PageCount = 500InPublication = 1ProductCategory = "Book"}Attribute{Id = 201ProductName = "18-Bicycle 201"Description = "201 description"BicycleType = "Road"Brand = "Brand-Company A"Price = 100Gender = "M"Color = [ "Red", "Black" ]ProductCategory = "Bike"}Item1Item2利用可能な型・Scalar data types  Number, String, Binary・Multi-valued types  Number Set, String Set, Binary Set64KBまでスキーマレス
  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 3Attribute 1(Hash Primary Key)Attribute 2(Range Primary Key)Attribute 3Map<HashKey,Object>Map<HashKey, SortedMap<RangeKey,Object>>
  10. 10. Primary Key(具体例)□ サンプルデータTable Name Primary Key Type Hash Attribute Name Range Attribute NameForum ( Name, ... ) Hash Attribute Name: Name -Thread (ForumName, Subject, ... ) Hash and Range Attribute Name: ForumName Attribute Name: SubjectReply ( Id, ReplyDateTime, ... ) Hash and Range Attribute Name: Id Attribute Name: ReplyDateTimeAmazon DynamoDBAmazon DynamoDB#DynamoDB Thread 12011-12-11 00:40:57Amazon DynamoDBDynamoDB Thread1Amazon S3Amazon DynamoDBDynamoDB Thread2Amazon S3S3 Thread2Amazon DynamoDB#DynamoDB Thread 12011-12-18 00:40:57Amazon DynamoDB#DynamoDB Thread 12011-12-25 00:40:57Amazon DynamoDB#DynamoDB Thread 22011-12-25 00:40:57Amazon DynamoDB#DynamoDB Thread 22012-01-03 00:40:57Forum Thread ReplyHash Primary keyRange Primary keyHash Primary keyRange Primary keyHash Primary key
  11. 11. Primary Key(具体例)□ ForumName (Primary Key) Other Attributes"Amazon DynamoDB" {Category="Amazon Web Services"Threads=3Messages=4Views=1000LastPostBy="User A"LastPostDateTime= "2012-01-03T00:40:57.165Z"}"Amazon S3" {Category="Amazon Web Services"Threads=1}
  12. 12. Primary Key(具体例)□ ThreadName (Primary Key) Other AttributesForumName = "Amazon DynamoDB"Subject = "DynamoDB Thread 1"{Message = "DynamoDB thread 1 message text"LastPostedBy = "User A"Views = 0Replies = 0Answered = 0Tags = [ "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 = 0Replies = 0Answered = 0Tags = [ "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 = 0Replies = 0Answered = 0Tags = [ "largeobject", "multipart upload" ]LastPostDateTime = "2012-01-03T00:40:57.165Z"}
  13. 13. Primary Key(具体例)□ ReplyName (Primary Key) Other AttributesId = "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 Indexessecond=4id=3y=xx(Projected)Primary key Secondary Index□ Local Secondary Indexes とは ・テーブル毎に最大5つのローカルセカンダリインデックスをサポート ・テーブルの属性の一部もしくは全てを射影できる・・・id=3x=xxy=xxz=xxid=3x=xxy=xxz=xx
  15. 15. Local Secondary Indexes□ LSI がないとき□ LSI があるときTable Item1Item2Item Nプログラムloop (items) {  //処理}Item2・・・Item9必要な Item を抽出するフィルタが必要Table Item2Item9QueryQuery
  16. 16. Provisioned Throughput□ Unit とは書き込みの場合1 ユニット = 1KB の Item に対して 1 秒あたり 1 回の書き込みできる読み込みの場合1 ユニット = 4KB のItemに対して強い整合性のある読み込みを 1 秒あたり 1 回できる ※結果整合性のある読み込みは 1 秒あたり 2 回できる
  17. 17. 整合性モデル□ 結果的に整合性のある読み込み(デフォルト)‒ 結果的に整合性のあるオプションを選択すると、読み込みスループットが最大限に向上します。ただし、結果的に整合性のある読み込みには、最新の書き込み結果が反映されない可能性があります。データの全コピーの整合は通常 1 秒以内に行われます。短時間後に読み込みを繰り返すことによって、更新されたデータが返されます。□ 強い整合性の読み込み‒ 結果的に整合性のある読み込みに加えて、Amazon DynamoDB は、お客様のアプリケーションまたはお客様のアプリケーションの要素が必要とする場合に強い整合性のある読み込みをリクエストするための、柔軟性とコントロールを提供します。強い整合性のある読み込みが返す結果には、読み込みの前に適切な応答を受け取ったすべての書き込みが反映されています。
  18. 18. APICREATETABLE‒ テーブルを作成し、データアクセスに使用するプライマリインデックスを指定します。UPDATETABLE‒ 指定されたテーブルについて、 プロビジョニングされたスループット値を更新します。DELETETABLE‒ テーブルを削除します。DESCRIBETABLES‒ テーブルサイズ、ステータス、およびインデックス情報を返します。LISTTABLES‒ 現在のアカウントおよびエンドポイントに関連付けられたすべてのテーブルのリストを返します。PUTITEM‒ 新しい項目を作成するか、古い項目を(すべての属性を含め)新しい項目で置き換えます。指定したテーブルに同じプライマリキーを持つ項目が存在する場合、既存の項目は新しい項目に完全に置き換えられます。条件付き演算子を使用して、所定の条件に一致する属性値を持つ項目のみを置き換えたり、その項目が存在しない場合にのみ新しい項目を挿入したりすることもできます。BATCHWRITEITEM‒ 1回のトランザクションとしてではなく、1回のリクエストで、複数のテーブル間で複数の項目を挿入、置換、削除します。PUT または DELETE で最大25項目のバッチをサポートし、合計リクエストサイズは最大1 MB です。UPDATEITEM ‒ 既存の項目の属性を編集します。条件付き演算子を使用して、項目の属性値が所定の条件に一致する場合にのみ更新を実行することもできます。DELETEITEM‒ プライマリキーを使用してテーブルから1つの項目を削除します。条件付き演算子を使用して、項目の属性値が所定の条件に一致する場合にのみ項目を削除することもできます。
  19. 19. APIGETITEM‒ 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)remoteControlReceivedWithEvent:(UIEvent *)event {}EC2DynamoDBwebsocketaws-sdk応答結果により色が変わる
  42. 42. 手乗りDynamoDB
  43. 43. !    以上!ありがとうございました!
  44. 44. Items(参考)Hash Key Range Key

×