20120409 aws meister-reloaded-dynamo-db
Upcoming SlideShare
Loading in...5
×
 

20120409 aws meister-reloaded-dynamo-db

on

  • 7,997 views

 

Statistics

Views

Total Views
7,997
Views on SlideShare
6,407
Embed Views
1,590

Actions

Likes
22
Downloads
194
Comments
1

15 Embeds 1,590

http://morizyun.github.io 1140
http://shmachid.com 317
http://feedly.com 75
http://0.0.0.0 24
http://feeds.feedburner.com 12
https://si0.twimg.com 6
http://www.feedspot.com 5
http://translate.googleusercontent.com 2
http://digg.com 2
https://twitter.com 2
http://reader.aol.com 1
http://localhost 1
http://feedproxy.google.com 1
http://twitter.com 1
http://s.deeeki.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • いつも参考にさせていただいており、ありがとうございます。

    早速ですが、本スライドの記載ミスではないかと思う箇所がございました。
    P.41の「データ容量」に
    > ハッシュキーは2048KBまで
    > レンジキーは1024KBまで
    とありますが、単位はキロバイトではなくて、バイトではないでしょうか?

    http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/Limits.html
    > Hash primary key attribute value: 2048 bytes
    > Range primary key attribute value: 1024 bytes

    お忙しいところ恐縮ですが、ご確認いただければ幸いです。
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

20120409 aws meister-reloaded-dynamo-db 20120409 aws meister-reloaded-dynamo-db Presentation Transcript

  • Amazon DynamoDB-NoSQL Service in the Cloud- AWSマイスターシリーズRELOADED Shinpei OHTANI ohtani@amazon.co.jp
  • アジェンダNoSQLとは何かAmazon DynamoDBDynamoDB機能DynamoDBでの開発コストモデルDynamoDBとエコシステムDynamoDB利用事例まとめ Copyright © 2011 Amazon Web Services
  • 進化・深化するAWSプラットフォーム お客様のアプリケーション IDE プラグイン Tools to ライブラリ & SDKs Web インターフェース デプロイと自動化 Access Java, PHP, .NET, Eclipse AWS Elastic Beanstalk Services Python, Ruby Management Console Visual Studio AWS CloudFormation ネットワーク&ルーティング 認証 & 請求 Amazon VPC Cross- AWS IAM モニタリング スケーリング Amazon Elastic LB Service Identity Federation Amazon CloudWatch Auto Scale Amazon Route 53 Features Consolidated Billing AWS Direct Connect コンテンツ配信 メッセージ メール配信 オンデマンド High-Level 分散処理 Amazon Amazon SNS Amazon ワークホース Building Elastic MapReduce CloudFront Amazon SQS SES Amazon Mechanical Turk Blocks データベース ストレージ Amazon RDS コンピュータ処理 Amazon S3 Low-Level Amazon DynamoDB Amazon EC2 Amazon EBS Amazon SimpleDB Building AWS StorageGateway Amazon Elasticache Blocks AWS のグローバルなインフラ Geographical Regions, Availability Zones, Points of Presence3
  • AWSの提供するデータベースサービス• データベースの管理負荷を減らす• すぐに利用可能• コストを最小化出来る NoSQL データベース 管理不要・スキーマレス・スケーラブル リレーショナルデータベース 管理レス・既存知識活用・移行容易性 インメモリキャッシュ 読込高速化・DB負荷削減
  • NoSQL(DynamoDB)
  • の前に・・・
  • YesSQL(RDBMS)
  • YesSQL=Amazon RDS Amazon RDS 可用性の スループッ レイテンシ ElastiCacheの利用 設定 向上 トの向上 の削減 ボタン1発スケール マルチ AZ リードレプリカ ElastiCacheの利用ボタン1発スケール マルチAZ リードレプリカ ゾーンA ゾーンB リージョン
  • NoSQLとはなにか Not Only SQLなデータベース群の総称 特徴  目的特化型・ユースケース特化型が多い  スケールアウト  伸縮自在  高い可用性 特に書き込み負荷の軽減が目的な事が多い
  • NoSQL(DynamoDB)
  • One SizeDoes Not Fit All
  • データベース 4象限by James Hamilton
  • スケール シンプルな ストレージ 優先 機構 機能 目的 特化型 優先 ストア
  • Amazon DynamoDBとは?・フルマネージドなNoSQLデータベース・超高速・予測可能な一貫したパフォーマンス・シームレスなスケーラビリティ、そして低コスト 運用管理必要なし 低レイテンシ、SSD プロビジョンスループット 無限に使えるストレージ
  • Amazon10年以上の経験の末に・・・• Amazonの継続構築・改善・運用経験 • 大規模なデータベースの構築経験 • RDBMSからNoSQLデータベースまで• AWSで培ってきた、拡張性が高く信頼性 の高いクラウドサービスの構築経験 • S3, SimpleDB, RDS…• 上記の経験を活かしてDynamoDBという、 データベースサービスを実現 Copyright © 2012 Amazon Web Services
  • DynamoDBの特徴• 管理不要である• プロビジョンスループット• データへの高速アクセス• 信頼性が高い Copyright © 2012 Amazon Web Services
  • 管理不要なデータベース・サービス管理不要で高い拡張性を提供 ADMINサービス vs プロダクトの違い  DynamoDBはサービス  他のデータベースはプロダクト  運用コストに大きな差が出る Copyright © 2012 Amazon Web Services
  • プロビジョンスループット Copyright © 2012 Amazon Web Services
  • プロビジョンスループット Copyright © 2012 Amazon Web Services
  • プロビジョンスループットとは• IOPSを開発者がいつでも指定できる  テーブル作成時、あとからでも可能  ダウンタイムなし  秒間あたりの、読み/書きを指定  1レコードが1KBとした場合の数値  事実上IOPSの値は無制限 Copyright © 2012 Amazon Web Services
  • データへの高速なアクセスAWSクラウドの特性を活用  ストレージにSSD(Solid State Drive)利用  SSD用に最適化  データへの高速なアクセスデータベースがいかに大規模になっていようと、数ミリ秒のアクセス速度が可能 Copyright © 2012 Amazon Web Services
  • 非常に低いレイテンシ数ミリ秒のレイテンシ Read Latenc y
  • DCレベルの障害にも耐える高い堅牢性 Copyright © 2012 Amazon Web Services
  • DynamoDB基本機能
  • DynamoDBのデータモデルテーブルアイテム プライマリキー アトリビュート Copyright © 2012 Amazon Web Services
  • プライマリーキー• ハッシュキー • シンプルなキーバリュー • ハッシュ値なので、ソートなし• ハッシュキー+レンジキー • コンポジットプライマリーキー • レンジキーはソートあり Copyright © 2012 Amazon Web Services
  • DynamoDBデータモデルハッシュキーのみの場合アイテム プライマリキー アトリビュート ハッシュキー A1-1 Copyright © 2012 Amazon Web Services
  • DynamoDBデータモデルハッシュキー+レンジキーの場合アイテム プライマリキー アトリビュート レンジキー1 A1-1 ハッシュ アトリビュート キーA レンジキー2 A2-1 アトリビュート レンジキー3 A3-1 Copyright © 2012 Amazon Web Services
  • 一貫性モデル• 強い一貫性 • 書き込み/読み込み• 結果一貫性 • 読み込み• 書き込みは即座にSSDで永続化• 1行の書き込みはトランザクショナル Copyright © 2012 Amazon Web Services
  • (余談)一貫性の強度• 強一貫性(WRITE/READ) • 書き込み直後から値が反映される• 因果一貫性 • イベント順序を維持し一貫性を維持• 結果一貫性(READ) • ある一定の伝播期間を持って、最 終的に結果が維持できる Copyright © 2012 Amazon Web Services
  • DynamoDBが持てるデータ構造• 4種類のデータ構造 • String • Number • String配列 • Number配列 Copyright © 2012 Amazon Web Services
  • DynamoDBの基本クエリ• Get/Put/Update/Delete/BatchGet• Scan • テーブル総ナメする• Query • ハッシュ+レンジキーのみ Copyright © 2012 Amazon Web Services
  • 条件付き書込/アトミックカウンタ Copyright © 2012 Amazon Web Services
  • マネージメントコンソールで運用管理可能
  • DynamoDBの監視・セキュリティ• CloudWatchで運用監視可能 • アカウント全体またはテーブル毎 • メトリクスも豊富• SNS経由で通知も可能• セキュリティ • IAM連携によりアクション・リソース共に可能 • アクション:UpdateできてもDeleteできない等 • リソース:テーブル指定 Copyright © 2012 Amazon Web Services
  • DynamoDB+EMR連携• モダンデータベースはHadoop連携が必須 • Hadoopに即連携できるのがベスト• Elastic MapReduce=Hadoopサービス• 小さく大量なデータはDynamoDBで蓄積• DynamoDBでリアルタイム処理• EMRでデータをオフロードしバッチ処理
  • EMR連携1:データのインポート/エクスポート Elastic MapReduce=Hadoopサービス オープンデータフォーマットであるCSVへ展開 CSV DynamoDB EMR S3
  • EMR連携2:データのジョインEMR上のSQLライクな言語(Hive)でのジョインも可能 DynamoDB EMR S3 Hive
  • EMR連携3:別データベースからの移行S3経由でDynamoDBへデータをロード S3 DynamoDB EMR Hive
  • DynamoDBの制約• テーブルサイズ • 制限なし• プロビジョンスループット • テーブル単位 • 10,000 read、10,000 write • アカウント単位 • 20,000 read、20,000 write • 上限は申請により解除可能 Copyright © 2012 Amazon Web Services
  • DynamoDBの制約(2)• プロビジョンスループットの更新 • スループットを上げる • 最低10%、最大200%まで • 上限を下げる • 1テーブル1日1回まで• データ容量 • 1アイテムは64KBまで(名前と値含む) • ハッシュキーは2048KBまで • レンジキーは、1024KBまで Copyright © 2012 Amazon Web Services
  • DynamoDBのコストモデル
  • DynamoDBのコストモデル• 実は非常にわかりやすい、しかも計算しやすい• コストファクタは下記のみ • データストレージ容量 • プロビジョンスループット指定値 • データ転送量
  • 料金 (東京リージョン利用)• データ保存容量に応じた料金  $1.20 GBあたり/月• 読込/書込スループットに応じた料金  $0.012 /時間 50読込みスループットあたり  $0.012 /時間 10書込みスループットあたり• データ転送量 • INは無料 • OUTは$0.201/GBから
  • 料金 (東京リージョン利用)• 無料使用枠  DynamoDB の保存容量 100 MB までは無料  さらに書込み最大 5 回/秒、 読込み最大 10 回/秒のスループットを無料
  • 料金試算例(1)• 10 書込スループット/秒• 100 読込スループット/秒• 10GB のデータ• 1 KB のアイテムサイズ 月額コストは、約2900円 ($38 - 77円/$換算)
  • 料金試算例(2)• 100 書込スループット/秒• 100 読込スループット/秒• 50GB のデータ• 1 KB のアイテムサイズ 月額コストは、約10000円 ($140 - 77円/$換算)
  • DynamoDBでの 開発とTips
  • DynamoDBの利用を推奨するケース• 高速アクセスが必要なアプリケーション• 新しく構築するプロジェクト• モバイル、ソーシャルなアプリケーション• 管理の手間を省き、TCOの削減したい• 複雑なクエリーが必要でないとき• ビッグデータにリアルタイムアクセスさせたい 場合
  • YesSQL(RDS) vs NoSQL(DynamoDB)下記項目を検討して、使い分け・併用する技術が重要。要素 YesSQL=RDBMS(RDS) NoSQL (DynamoDB) • 既存アプリケーション • Webスケールが必要なアプリ • ビジネスプロセス中心 • 大量の小さな書き込みと読み込みアプリケーションのタイプ 例: 金融業務、ERP、複数プロセ 例: ソーシャルメディア, モバイル、 スを行う業務ワークフロー ショッピングカート, ユーザプリファレン ス、ビッグデータアプリケーション • リレーショナルデータモデル • シンプルなデータモデルの特徴 • 複雑なクエリ, ジョインと更新 • レンジクエリ, シンプルな更新 エンジニアがDB構築時に選択 シームレス、かつオンデマンドで自動的スケール クラスタリング, パーティショニ にスケールする ング, シャーディング • パフォーマンス – RDB要素依存 • パフォーマンス -ユーザが常に調整可能 • 信頼性 – RDSが管理 • 信頼性 – DynamoDBが管理QoS • 可用性 – RDSが管理 • 可用性 – DynamoDBが管理 • 堅牢性 – RDSが管理 • 堅牢性 – DynamoDBが管理 既存のプログラミングスキル Webスタイルのプログラミングスキルセット SQL + プログラミング言語 AWS SDKでプログラミング AWSではYesSQLからNoSQLまで提供している
  • 余談:NoSQLサービスとプロダクト• コアビジネスは何か?• サービス • サービス • DynamoDB、RDS、 • 運用は楽になる ElastiCache • プロダクト • ロックイン? • EC2上のDB• プロダクト • 運用は非常に大変 • 自分で自動化する必要あり
  • お客様がDynamoDBでやること必要なテーブルを作成する各テーブル毎に読み書きのIOPSを指定するSDKを使って、アプリケーションを書く
  • お客様がDynamoDBでやらなくてよい事テーブルの容量拡張ハードウェア拡張やスケーラビリティの確保データベースの障害管理・フェイルオーバ機能の実装・管理データベースの堅牢性の維持アプリケーションの開発に集中してほしい
  • DynamoDBで開発するにはSDKを使うAPIをたたくサードパーティライブラリを使う
  • DynamoDB SDK Java  http://aws.amazon.com/sdkforjava/ PHP  http://aws.amazon.com/sdkforphp/ Ruby  http://aws.amazon.com/sdkforruby/ .NET  http://aws.amazon.com/sdkfornet/
  • 例:DynamoDBのJava SDK 低レベル  AmazonDynamoDBClient  AmazonDynamoDBAsyncClient 高レベル  DynamoDBMapperフレームワーク
  • AmazonDynamoDBClientの作成AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials);// エンドポイントをセットclient.setEndpoint("https://dynamodb.ap-northeast-1.amazonaws.com");http://docs.amazonwebservices.com/general/latest/gr/rande.html#ddb_region
  • テーブルの作成
  • テーブルの作成AmazonDynamoDB client = createClient();//ハッシュキー、レンジキーの作成とセットKeySchema keySchema = new KeySchema(); keySchema.setHashKeyElement(hashKey); keySchema.setRangeKeyElement(rangeKey);ProvisionedThroughput throughput =//プロビジョンスループット作成 throughput.setReadCapacityUnits(20L);//読み込みで20 throughput.setWriteCapacityUnits(20L);//書き込みで20CreateTableRequest request = …//テーブル生成のリクエスト作成request.setProvisionedThroughput(throughput);CreateTableResult result = client.createTable(request);
  • テーブルの作成テーブル名とプライマリーキーを作成アイテム プライマリキー ハッシュ レンジキー キー Copyright © 2012 Amazon Web Services
  • アイテムの挿入Map<String, AttributeValue> item = new HashMap<String, AttributeValue>();{ item.put("id", new AttributeValue().withN(String.valueOf(i))); item.put("time", new AttributeValue().withN(String.valueOf(t))); item.put("firstname", new AttributeValue("firstname" + i)); item.put("lastname", new AttributeValue("lastname" + i)); item.put("role", new AttributeValue().withSS("Sales"));}PutItemRequest putItemRequest = new PutItemRequest(tableName, item);client.putItem(putItemRequest);
  • データの挿入アトリビュートに何を入れるかはアイテム毎で自由アイテム プライマリキー アトリビュート レンジキー1 A1-1 ハッシュ アトリビュート キーA レンジキー2 A2-1 アトリビュート レンジキー3 A3-1 Copyright © 2012 Amazon Web Services
  • アイテムの取得Key key = new Key();key.setHashKeyElement(new AttributeValue().withN("1"));key.setRangeKeyElement( new AttributeValue().withN(String.valueOf(time)));GetItemRequest getItemRequest = new GetItemRequest(tableName, key);GetItemResult item = client.getItem(getItemRequest);Map<String, AttributeValue> result = item.getItem();for (Map.Entry<String, AttributeValue> e : result.entrySet()) { System.out.println(e.getKey() + " : " + e.getValue());}
  • DynamoDBからのGET ハッシュキー+レンジキー指定 アイテム プライマリキー アトリビュート レンジキー1 A1-1 ハッシュ アトリビュート キーA レンジキー2 A2-1 アトリビュート レンジキー3 A3-1 Copyright © 2012 Amazon Web Services
  • アイテムの更新Key k = new Key().withHashKeyElement( new AttributeValue().withN("4")).withRangeKeyElement( new AttributeValue().withN(dateString));Map<String, AttributeValueUpdate> updates = new HashMap<String, AttributeValueUpdate>();updates.put("firstname", new AttributeValueUpdate() .withValue(new AttributeValue().withS("edited_firstname4")));UpdateItemRequest updateItemRequest = new UpdateItemRequest().withTableName(tableName) .withReturnValues(ReturnValue.ALL_NEW) .withKey(k).withAttributeUpdates(attributeUpdates);UpdateItemResult result =client.updateItem(updateItemRequest);
  • アイテムのスキャン//フルスキャンはテーブル全部検索するScanRequest scanRequest = new ScanRequest() .withTableName(tableName);ScanResult fullScanResult = client.scan(scanRequest);List<Map<String, AttributeValue>> items = fullScanResult.getItems();for (Map<String, AttributeValue> map : items) { for (Map.Entry<String, AttributeValue> e : map.entrySet()) { System.out.println(String.format("%s, %s", e.getKey(), e.getValue())); } System.out.println("");}
  • DynamoDBのSCAN テーブルから総取得 アイテム プライマリキー アトリビュート レンジキー1 A1-1 ハッシュ アトリビュート キーA レンジキー2 A2-1 アトリビュート レンジキー3 A3-1 Copyright © 2012 Amazon Web Services
  • アイテムのクエリ//ハッシュキー(ID)が4のアイテムを抜き出す。レンジキーは指定しないQueryRequest q = new QueryRequest(tableName, new AttributeValue().withN("4"));QueryResult qr = client.query(q);for (Map<String, AttributeValue> items : qr.getItems()) { for (Map.Entry<String, AttributeValue> item : items.entrySet()){ AttributeValue value = item.getValue(); System.out.println(item.getKey() + " : " + value.getS()); } System.out.println("");}
  • DynamoDBのQUERY ハッシュキーのみ指定 アイテム プライマリキー アトリビュート レンジキー1 A1-1 ハッシュ アトリビュート キーA レンジキー2 A2-1 アトリビュート レンジキー3 A3-1 Copyright © 2012 Amazon Web Services
  • DynamoDBMapper シンプルなクラスをデータモデルとみなして 処理可能 アノテーションベースでデータを操作可能  @DynamoDBTable(tableName = "employee")  @DynamoDBHashKey(attributeName = "id")  @DynamoDBRangeKey(attributeName = "time")  @DynamoDBAttribute 楽観的ロック機能  @DynamoDBVersionAttribute
  • DynamoDBMapper Model@DynamoDBTable(tableName = "employee")public class Employee { @DynamoDBHashKey(attributeName = "id") public long getId() { return id; } @DynamoDBRangeKey(attributeName = "time") public long getTime() { return time; } @DynamoDBAttribute(attributeName = "firstname") public String getFirstname() { return firstname; } @DynamoDBVersionAttribute public Long getVersion() { return version; }}
  • DynamoDBMapperの操作DynamoDBMapper mapper = new DynamoDBMapper(client);//従業員を取得Employee e = mapper.load(Employee.class, hashkey, rkey);//従業員を挿入Employee emp = new Employee();emp.setId(1000);emp.setTime(t);emp.setFirstname("HLFirstname");emp.setLastname("HLLastname");emp.setRole(asSet("TechSales"));mapper.save(emp);
  • DynamoDBでスケールさせるには• プライマリキーできちんと分散させる • ポイントはハッシュキーで適度に分散 するように設計する事• アイテムの大きさを大きくしすぎない • 大きなデータはS3へ置く• Scanはなるべく避ける
  • DynamoDBでスケールさせるには(良い例)・理想ケース:リクエストとそのサイズが均等 DynamoDBが測定する期間 各リクエスト・良好ケース:サイズは均等ただしバーストあり リクエストが多すぎるのでやや詰まる Copyright © 2012 Amazon Web Services
  • DynamoDBでスケールさせるには(悪い例)・悪いケース1:リクエストサイズのばらつき・悪いケース2:頻繁な大量のテーブル全体検索 Copyright © 2012 Amazon Web Services
  • DynamoDBを使った設計方法• キーをいかに分散するか• データ構造が柔軟なのを活かす • データの保存方法よりクエリ重視 • クエリ毎にデータを持つ方法 • データは検索されてこそ • コンポジットキー • 一貫性とスケールのトレードオフ • とはいえDynamoDBは力技も効く
  • DynamoDBと エコシステム
  • 広がるDynamoDBのエコシステム1. Datomic 1. http://datomic.com/2. 各種オープンソースライブラリ 1. Scala 2. Node.js 3. Python3. もちろんAWS SDKも!
  • DynamoDBを使うためのライブラリまとめ言語 ライブラリ マッパー モックColdFusion CFDynamo django-Django dynamodb- sessionsErlang Dinerl jsodaJava AWS SDK for Java phoebe-dynamodb.NET AWS SDK for .NET DynodeNode.js awssum dynamo Net::Amazon::DynPerl amoDBPHP AWS SDK for PHP Boto DynamoDB-Python Mapper fake_dynamo AWS SDK for Ruby mince_dynamo_dbRuby clientside_dynamo Dynamoid db
  • DynamoDB利用事例
  • DynamoDBの利用事例
  • Amazon DynamoDBとは?・フルマネージドなNoSQLデータベース・超高速・予測可能な一貫したパフォーマンス・シームレスなスケーラビリティ、そして低コスト 運用管理必要なし 低レイテンシ、SSD プロビジョンスループット 無限に使えるストレージ
  • DynamoDBを始めるには?• http://aws.amazon.com/dynamodb/• 開発者ガイド – http://bit.ly/ddbguide Copyright © 2012 Amazon Web Services