はじめに
AWS SDK for .NETにはC#からDynamoDBにアクセスするAPIが含まれているわけですが、それには低レベルAPIと高レベルAPIの2つがあります。
低レベルAPIというのが、これまで説明してきたやつです。
格納するデータのタイプまで指定する必要がありました。
これに対して高レベルAPIというのは名前のとおり、詳細をさらに隠して使いやすくなっています。
高レベルAPIを使ったデータの追加
高レベルAPIを使うと、データの追加を以下のように書くことができます。
データの構築にはAttributeValue
ではなく`Document(Amazon.DynamoDBv2.DocumentModel名前空間)クラスを使用します。
AttributeValue
では指定しなくてはならなかったデータのタイプなどはDocument
クラスがうまく隠してくれていて、データ型を気にする必要なくインスタンスにキーとデータをセットで放り込んでいくだけでOKという形になっています。
すばらしい。
AmazonDynamoDBClient client = new AmazonDynamoDBClient(); //今回、裏方に回った。
//目的のテーブルを取得
var table = Table.LoadTable(client, tableName);
//データはAttributeValueではなくDocumentを使って構築する。
//attributes列に入れるデータの構築
var attr2=new Document();
attr2["sign"] = "ふたご座";//文字列でも
attr2["number"] = 5;//整数でも
//気にせずに入れられる。
//挿入するレコードの構築
var item=new Document();
item["id"] = "testuser2";//id列
item["attributes"] = attr2;//attributes列。上で作成したattr2を入れる。
var result2= table.PutItemAsync(item).Result;
実行結果
これを実行すると、DynamoDBのテーブルには以下のようなデータが追加されます。
testuser2
というのが今回追加したデータです。
データの型が正しく指定されて格納されています。
おまけ
このDocumentクラスですが、どんな型でも突っ込めるのかなということで、List<string>
をいれてみました。
以下のように。
これでテーブルにデータを突っ込むと、どういう形で格納されるのか見てみましょう。
//目的のテーブルを取得
var table = Table.LoadTable(client, tableName);
//データはAttributeValueではなくDocumentを使って構築する。
//attributes列に入れるデータの構築
var attr2 = new Document();
attr2["sign"] = "ふたご座";//文字列でも
attr2["number"] = 5;//整数でも
//気にせずに入れられる。
//試しにList<string>を入れてみる
var list = new List<string>
{
"hello1",
"hello2",
};
attr2["list"] = list;
//挿入するレコードの構築
var item = new Document();
item["id"] = "testuser2";//id列
item["attributes"] = attr2;//attributes列。上で作成したattr2を入れる。
var result2 = table.PutItemAsync(item).Result;
DynamoDB側はこのようになります。
「SS」というのは「文字列のセット(String Set)」という意味ですね。
何も考えずにどんどん突っ込んでいけるのはとても便利ですね。