• Save
aws-dynamo.sdk
Upcoming SlideShare
Loading in...5
×
 

aws-dynamo.sdk

on

  • 1,149 views

 

Statistics

Views

Total Views
1,149
Views on SlideShare
1,149
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

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…
Post Comment
Edit your comment

aws-dynamo.sdk aws-dynamo.sdk Presentation Transcript

  • DynamoDB ジャンプスタートプログラムSDK経由でDynamoDBを使うアマゾン データ サービス ジャパン 株式会社
  • このセッションの目的DynamoDBの利⽤⽅法をハンズオンを通して理解する AWS SDKの理解 プログラミング⾔語からの利⽤ モニタリングの方法 Copyright © 2012 Amazon Web Services
  • アジェンダAWS SDK 各言語の説明( Java, PHP, Python, Ruby, .Net) スニペットの説明ハンズオン SDKセットアップ on Amazon Linux サンプルプログラムの実⾏と動作確認 Copyright © 2012 Amazon Web Services
  • AWS SDKについて SDK for Java http://aws.amazon.com/jp/sdkforjava/ http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/index.html SDK for PHP http://aws.amazon.com/jp/sdkforphp/ http://docs.amazonwebservices.com/AWSSDKforPHP/latest/ SDK for Ruby http://aws.amazon.com/jp/sdkforruby/ http://docs.amazonwebservices.com/AWSRubySDK/latest/frames.html Boto (Python) http://aws.amazon.com/jp/python/ https://github.com/boto/boto SDK for .NET http://aws.amazon.com/jp/sdkfornet/ http://docs.amazonwebservices.com/sdkfornet/latest/apidocs/Index.html Sample Code & Libraries http://aws.amazon.com/code/
  • サンプルプログラムの説明操作対象テーブルemployee id (long) <= Hash Key time (long) <= Range Key fitstname (string) lastname (string) role (string set) version (long)操作内容 テーブル操作(作成、更新、削除) レコード操作(PUT/GET/UPDATE/DELETE)
  • サンプルプログラムの説明サンプルプログラム保存場所 http://goo.gl/699Pyハンズオン SDKセットアップ on Amazon Linux レコード操作(PUT/GET/UPDATE/DELETE)の確認 サンプルプログラムの実⾏ レコード操作プログラムの作成、実⾏
  • SDKセットアップ(Java) Linuxでの場合 JDKインストール http://www.oracle.com/technetwork/java/javase/downloads/ind ex.html AWS SDK for Java インストール http://aws.amazon.com/jp/sdkforjava/ $ wget http://sdk-for-java.amazonwebservices.com/latest/aws- java-sdk.zip $ unzip aws-java-sdk.zip –d ~/aws-java-sdk $ export CLASSPATH=$CLASSPATH:~/aws-java-sdk/lib/aws-java-sdk- 1.3.8.jar
  • SDKセットアップ(Java) Windowsでの場合 JDKインストール http://www.oracle.com/technetwork/java/javase/downloads/ind ex.html Eclipseのインストール AWS Eclipse Toolkitインストール AWS SDK for Java インストール http://aws.amazon.com/jp/sdkforjava/
  • DynamoDBで開発するにはSDKを使うAPIをたたくサードパーティライブラリを使う
  • DynamoDB SDK Java PHP Ruby .NET
  • 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 key = new Key();key.setHashKeyElement(new AttributeValue().withN("1"));key.setRangeKeyElement( new AttributeValue().withN(String.valueOf(time)));GetItemRequest getItemRequest = new GetItemRequest(tableName, key) .withAttributesToGet("id", "firstname", "lastname");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());}
  • アイテムの取得+アトリビュート制限 キー指定+アトリビュート指定 アイテム プライマリキー アトリビュート レンジキー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が1000以上の社員検索。ただしテーブル全検索は⾏うMap<String, Condition> filters = …//filters.put("id",new Condition().withComparisonOperator( ComparisonOperator.GE).withAttributeValueList( new AttributeValue().withS("1000")));ScanRequest scanRequest = new ScanRequest() .withTableName(tableName).withScanFilter(filters);ScanResult fullScanResult = client.scan(scanRequest);List<Map<String, AttributeValue>> items = fullScanResult.getItems();//…
  • 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
  • アイテムのクエリ+アトリビュート制限//ハッシュキー(ID)が4のアイテムを抜き出す。レンジキーは指定しないQueryRequest q = new QueryRequest(tableName, new AttributeValue().withN("4"));q.setAttributesToGet(asList("time", "firstname", "lastname"));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
  • アイテムのクエリ+レンジキーフィルタ//ハッシュキー(ID)が4でレンジキー < Xな指定QueryRequest q = new QueryRequest(tableName, new AttributeValue().withN("4")) .withRangeKeyCondition(new Condition() .withComparisonOperator(ComparisonOperator.LT) .withAttributeValueList(new AttributeValue().withN(“…")));q.setAttributesToGet(asList("time", "firstname", "lastname"));QueryResult qr = client.query(q);//…
  • DynamoDBのQUERY+Condition 同一ハッシュキーで条件にあったレンジキー アイテム プライマリキー アトリビュート レンジキー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 ret = mapper.load(Employee.class, 1, getRKey ());//従業員を挿入Employee emp = new Employee();emp.setId(1000);emp.setTime(t);emp.setFirstname("HLFirstname");emp.setLastname("HLLastname");emp.setRole(asSet("TechSales"));mapper.save(emp);
  • SDKセットアップ(PHP) PHPインストール $ sudo yum install php php-pear php-xml SDKインストール $ sudo pear channel-discover pear.amazonwebservices.com $ sudo pear install aws/sdk 確認 $ vi test.php $ php test.php
  • SDKセットアップ(Ruby) Ruby関連パッケージインストール $ sudo yum install gcc make libxml2-devel libxslt-devel $ sudo yum ruby-devel rubygems $ sudo gem install nokogiri SDKインストール $ sudo gem install aws-sdk 確認 $ vi test.rb $ ruby test.rb
  • SDKセットアップ(Python) 関連パッケージインストール $ sudo yum install python-setuptools $ sudo easy_install pip Boto インストール $ sudo pip install –U boto 認証設定 [Credentials] aws_access_key_id = {ACCESS KEY ID} Aws_secret_access_key = {SECRET ACCESS KEY} 動作確認 $ python test.py