COLUMN

DynamoDBを試してみました

あけましておめでとうございます。ウィザードの石井です。
DynamoDBとはAmazon Web Servicesが提供するフルマネージドのNoSQLサーバーです。
今回はAWS SDK for Javaを用いてDynamoDBの操作を行ってみます。

概要

Java用のDynamoDBのAPIは3種類ありますが、今回は高レベルAPIを使用します。
ORMなのでオブジェクト指向に慣れ親しんでいる方なら使いやすいかと思います。
事前にAWS SDK for Java、また入出力にはLambdaを使用するためAWS Lambda Java Function Runtimeを導入しておく必要があります。
例として、「The Game Awards 2015」の受賞作品をDynamoDBに格納し、取得するという処理を実装してみます。

テーブルの作成

まず、AWSのコンソールからテーブルを作成しておきます。
テーブル名はTheGameAwardsNominees、プライマリキーはcategory、ソートキーはtitleとします。

モデルの実装

次に、モデルの基底クラス及び先ほどのテーブルに対応させるTheGameAwardsNomineesモデルを実装します。
以下になります。


クラスに対してDynamoDBのモデルであることを示すDynamoDBTableアノテーションを指定します。
DBの項目名に合わせたゲッターとセッターを作成し、そのゲッターに上記のようにアノテーションを指定します。
DynamoDBAttributeは必須ではありませんが、ここではわかりやすさを重視しています。
各アノテーションでattributeNameを指定することで、実際の項目名とは違うメソッド名とすることもできます。

Lambdaハンドラの実装

最後に、Lambdaハンドラを実装します。
入力されたJSONにsave項目があれば保存処理、query項目があれば検索処理という流れになっています。
AWSの日本語ドキュメントには詳しく書かれていませんが、リクエストやレスポンスとして使用できる型には
文字列やPOJOの他、コレクションや、POJOのプロパティとして更にPOJOを持たせたりと柔軟に対応できるようです。
その柔軟性を利用して今回はTheGameAwardsNomineesモデルをPOJOとして流用しています。
以下になります。

動作確認

Lambdaのコンソールから以下のJSONを入力し、適切に保存・検索ができれば完了です。

まとめ

特にSQLをよく使われていた方からするとDynamoDBのNoSQLにはかなり抵抗があると思いますが、私が使ってみた感想としては洗練されているという印象でした。
SQLのように多機能とは言い難いのですが、これからは選択肢の一つとしてマスターしておきたいところです。
APIもわかりやすく作られていて、勘で作ってみてもどうにかなるという感じです。(あまり良くないやり方ですが)
最近は何を始めるにも環境が整っていて始めやすいですね。