続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

AWS DynamoDB 入門

AWSのWebサイトでは、DynamoDBの説明として
DynamoDB は高速な完全マネージド型 NoSQL データベースサービスで、任意の量のデータを格納、取得し、任意のレベルのリクエストトラフィックを処理できます。
と記載されています。NoSQL? KVS? RDBとは違うことはよくわかっていても、どんなものか触って確かめてみますが、先にどんなものか簡単に書き起こします。 -KVSなのか? KVSであることには間違いないですが、イメージしているKVSとはかなり違います。文字通りKeyとValueだけではなく、少しSQLぽいことができるRangeIndexを作れる点がだだのKVSとは違います。また、expire機能も無いので、このままでmemchacedやredisの変わりとするのは工夫が必要です。 -スキーマレスなのか? スキーマレスと言って良いと思います。もちろんKVSに当たるKeyの部分は必須ですが、グローバルセカンダリインデックス、ローカルセカンダリインデックスという、なにやらRDBのインデックスに近いものは、Nullを許容しています。(正確にはNullを許容というより、そのアイテム(レコード)にはそのカラムがないということです) -NoSQLなのか? NoSQLです。SQLのような複雑な問い合わせや、集計と言った機能を持ちません。しかし、KVSのように Keyでアクセスするだけ!ではないので、少しSQLに近い側面を持っています。私はCouchBaseを少し触ったことが有りますが、MapReduceそのものの機能をDynamoDBは持ちません。 -難しいの? NoSQLというキーワードで切り分けるなら、RDBが分かる人にとって比較的習得は優しいと思います。セカンダリインデックスのおかげで、RDBに比較的近い考え方ができるからです。(もちろんRDBの考え方に引きずられるのはあまり良くないですが。) -RDSとどこが違う? RDSはRDB用のマネージドサービスという点で大きく違いますが、VPCの中で使うのがRDSです。それに対しDynamoDBはSQSなどと同じ、パブリックサービスです。つまりオンプレや他のクラウドサービスからDynamoDBだけを使うことが可能です。これを利用して、スマホアプリから直接DynamoDBにアクセスしてしまうことも可能です。 駆け足で説明しましたが、上記は自分の経験上、知りたかった内容です。 とりあえず触るだけなら簡単なので、テーブルを作ってみましょう。 CreateTableボタンで下記画面より、テーブル名を適当に決めます。 HashとRangeの指定ですが、サンプルどおり Hashは Customer ID, Rangeは Game IDとしましょう。
スクリーンショット 2014-08-27 20.28.46.png
次に、グローバルとRangeを指定したので、ローカルのセカンダリインデックスの設定画面が表示されます。グローバルでzip_codeをサンプルとして指定しました。
スクリーンショット 2014-08-27 20.31.09.png
その後、パフォーマンスの設定値を決めるのですが、デフォルトのままGO
スクリーンショット 2014-08-27 20.31.38.png
パフォーマンスが足りない時のアラームを飛ばすかと聞いてくるのですが、これはテストには不要なので、チェックを外して続行しましょう。 しばらく経つとテーブルが出来ます。 マネージメントコンソールで早速データを追加してみます。
スクリーンショット 2014-08-27 20.37.39.png
幾つか追加したデータがこれです。
スクリーンショット 2014-08-27 20.39.03.png
注目して欲しいのは、zip_code が空のレコードがあることです。セカンダリインデックスはNullを許容されています。(というよりカラム、正確にはアトリビュートなし)この絵から、DynamoはRDBに近いと私も誤認していましたが、これでスキーマレスだということが分かると思います。 後は、データの問い合わせ方法ですが、マネージメントコンソールでやっても実際コードをどうするかわからないと思うので、私の好きな aws-cliでつついてみます。
#テーブル一覧 $ aws dynamodb list-tables #keyで狙い撃ち $ aws dynamodb get-item --table-name imaTestDB --key '{"Customer ID" : {"N" : "1" } ,"Game ID" : {"N" : "1" } }' #zip-codeで狙い撃ち $ aws dynamodb query --table-name imaTestDB --key-conditions '{"zip_code": { "AttributeValueList": [ { "S" : "0001122" } ] , "ComparisonOperator": "EQ" } }' --index-name zip_code-index
JSONで問い合わせてJSONで返って来ます。プログラミング言語でやったほうが楽ですね。さらに、すぐにAPIリファレンスを読むことをオススメします。ググって楽しようと思っても無駄なことが多いとおもいます。 http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/Welcome.html DynamoDBはこれ以外にも認証や、最近発表されたオートスケール、運用面において特にRDBの常識からこういう時はこうするというケースを取り上げていきたいと思います。NoSQLの入り口としてはとてもよいものだと思うので、AWSのアカウント取得が少々面倒かもしれませんが、エンジニアの皆様はぜひとも使ってほしいと思いました。