Table of Contents
はじめに
FundastA Inc.の鈴木です。
現在、AWSとJavaを使用した業務の中でDynamoDBのデータを取得し表示するまでを行いました。
それを備忘録として残しておきます。
DynamoDBとは
規模に関係なく数ミリ秒台のパフォーマンスを実現する、key-value およびドキュメントデータベース
DynamoDBについては私の方でまとめたブログ記事もあるので、詳しく知りたい方はこちらをご覧ください。
↓
DynamoDBからのデータ取り出し
使用したDynamoDBの中身
今回は「person_id(String型)」と「name(String型)」のシンプルなデータにしてみました。
コード例
1 2 3 |
TestDynamoDB data = new TestDynamoDB(); data.IdCollation(person_id); |
TestクラスからTestDynamoDBクラスを呼び出し、IdCollationメソッドを呼び出すことでデータの取り出しをしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class TestDynamoDB{ public Boolean IdCollation(String id){ String table_name = "自分が使用したいテーブル名"; try{ // すべてのデフォルトが設定されたBuilderの新しいインスタンスを作成 AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard().withRegion("ap-northeast-1").build(); // Mapを作成し、キー:Stringと値:AttributeValueのインスタンスを作成 HashMap<String,AttributeValue> key_to_get = new HashMap<String,AttributeValue>(); // キー:person_idと変数idを追加 key_to_get.put("person_id", new AttributeValue(id)); // 必要な項目のテーブル名とプライマリキー値を持つGetItemRequestオブジェクト GetItemRequest request = new GetItemRequest().withKey(key_to_get).withTableName(table_name); // 項目に関連付けられた、キーと値のマップを取得 Map<String,AttributeValue> returned_item = ddb.getItem(request).getItem(); // もしreturned_idが入っていたらtrue、入っていなければfalse if(returned_item != null){ return true; }else{ return false; } }catch(Exception ex){ // 例外処理 StackTraceElement[] ste = ex.getStackTrace(); System.out.println(ex.getClass().getName() + ":" + ex.getMessage()); System.out.println("tat" + ste[ste.length-1]); } return null; } } |
Javaでコードを書く際には役割毎にクラスを分けた方が良いので、メインで動かすクラスとDynamoDBからデータを取ってくるクラスに分けました。
コード詳細説明
では、コードの詳細を上から説明していきます。
1.新しいインスタンスを作成する。
1 2 |
// すべてのデフォルトが設定されたBuilderの新しいインスタンスを作成 AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard().withRegion("ap-northeast-1").build(); |
最初にインスタンスの作成を行います。これがないとDynamoDBから項目を取得したりできないので、作成します。
withRegion(“ap-northeast-1”)の部分は、自分が使用したい地域に設定してください。
2.Mapを作成し、キー:Stringと値:AttributeValueのインスタンスを作成し、キー:person_idと変数idを追加する。
1 2 3 |
// Mapを作成し、キー:Stringと値:AttributeValueのインスタンスを作成 Map<String,AttributeValue> key_to_get = new HashMap<String,AttributeValue>(); key_to_get.put("person_id", new AttributeValue(id)); |
3.必要な項目のテーブル名とプライマリキー値を持つ
1 2 3 |
GetItemRequestオブジェクト GetItemRequest request = new GetItemRequest().withKey(key_to_get).withTableName(table_name); |
DynamoDBに投げたいリクエストのインスタンスを作成する。
中に入れるのは、先ほど作ったMap型の”person_id”と変数idの入ったkey_to_getと変数table_nameをセットして、GetItemRequest を作成する。
4.項目に関連付けられた、キーと値のマップを取得
1 |
Map<String,AttributeValue> returned_item = ddb.getItem(request).getItem(); |
DynamoDBインスタンスの中身を取るためにgetItemメソッドを使用する。そしてその中身をMap型に箱に入れる。
5.メインクラス実行
1 2 3 |
TestDynamoDB data = new TestDynamoDB(); data.IdCollation(person_id); |
最後にメインクラスであるTest.javaのコードを実行します。
TestDynamoDBのインスタンスを作成して、TestDynamoDBのIdCollationのメソッドを実行する。
その結果DynamoDBからデータが取得されます。
おわりに
今回はDynamoDBからデータを取り出すコードを載せました。
コードの作成は主にAWSのドキュメントを参考にしました。
AWSとJavaを使った例などが調べても記事が少なく、手こずる場面もありましたが、AWSドキュメントがしっかり作動してくれました。
今後はLambdaやKinesisを扱うコードやS3にアップロードするコードなどを記載したいと思います。
ご覧いただきありがとうございます。