DynamoDBについて学んでみる
NoSQLデータベースサービスです。
サーバーレスアーキテクチャのWebアプリやmBaaSの構築に役立てられます。
今回は、このDynamoDBについて学習しながら、チュートリアルをこなしてみたいと思います。
Key-Value型はいわゆるキーと値のセットで連想配列のようなデータになります。
ドキュメントデータモデルはJSONのようなデータ構造をテキストで表せるデータですね。
SQLを使えないので、高度な検索や、取ったデータをこねくりまわすのはアプリケーションの役割になりますね。
単純な分高速にI/Oを行えるのがメリットです。
ACID特性の要件を満たしたデータ操作を実現することができます。
そのためテーブルの命名はAWSアカウント内でユニークである必要があります。
開発と本番でテーブルを切り替えたいときなどちょっと不便です。
サーバマシンにインストールすることができるDynamoDB ローカルを使うか、テーブル名に「dev_」や「prod_」などのプレフィックスを付けるなど配慮が必要ですね。
「テーブルの作成」を選択し、次のページの右上の「チュートリアル」を押すと、ガイドポップアップが出るのでこれに従って進めていきます。
ガイドが間違ったバリデーションチェックをかけてきますが、和訳を入力すると突破できます。
テーブルができました。どうやらこれでチュートリアル終わりっぽいです笑
データを登録してみました。
パーティションキーが所謂RDBの主キーでソートキーを追加すると複合キーになるようです。
RDBでいうところの行が項目、列が属性。
パーティションキー、ソートキー以外の属性はいくらでも足すことが可能なよう。
トリガーにDynamoDBを割り当てます。
コードはnode.jsでこんな感じで記述します。
まだあんまりLambda関数の書き方わかってないので適当です…。
テスト実行で渡すパラメータはテーブルの属性を指定したJSONです。
実行すると、データがJSON形式で取得でき、DynamoDBに項目がセットされました。
ざっくり使い方が学べました。
RDB的なテーブルの操作より、どちらかというとオブジェクトを操作しているような感覚ですね。
RDBのテーブル設計しかしたことないSIer育ちの小生は、NoSQLデータベースでどういうテーブル設計をすればよいかイマイチわかりません…。
では。
Amazon DynamoDBはAWSの提供する
サーバーレスアーキテクチャのWebアプリやmBaaSの構築に役立てられます。
今回は、このDynamoDBについて学習しながら、チュートリアルをこなしてみたいと思います。
DynamoDBの特徴
ざっと調べた特徴はこんな感じ容量無制限
容量無制限。つまりいくらでもデータを格納できるので、容量オーバーを気にしなくてよいと。オートスケーリング
高負荷時のスケールアップを自動で行うことができます。NoSQL
Key-Value型とドキュメントデータモデル型をサポートするNoSQLデータベースです。Key-Value型はいわゆるキーと値のセットで連想配列のようなデータになります。
ドキュメントデータモデルはJSONのようなデータ構造をテキストで表せるデータですね。
SQLを使えないので、高度な検索や、取ったデータをこねくりまわすのはアプリケーションの役割になりますね。
単純な分高速にI/Oを行えるのがメリットです。
トランザクションをサポート
NoSQLデータベースはトランザクションをサポートしないというのを以前耳にしましたが、DynamoDBはトランザクションをサポートしています。ACID特性の要件を満たしたデータ操作を実現することができます。
スキーマの概念がない
DynamoDBはテーブルを名前空間でまとめるスキーマの概念がありません。そのためテーブルの命名はAWSアカウント内でユニークである必要があります。
開発と本番でテーブルを切り替えたいときなどちょっと不便です。
サーバマシンにインストールすることができるDynamoDB ローカルを使うか、テーブル名に「dev_」や「prod_」などのプレフィックスを付けるなど配慮が必要ですね。
チュートリアル
とにかく触ってみないことには始まらないのでチュートリアルを試してみます。「テーブルの作成」を選択し、次のページの右上の「チュートリアル」を押すと、ガイドポップアップが出るのでこれに従って進めていきます。
ガイドが間違ったバリデーションチェックをかけてきますが、和訳を入力すると突破できます。
テーブルができました。どうやらこれでチュートリアル終わりっぽいです笑
データを登録してみました。
パーティションキーが所謂RDBの主キーでソートキーを追加すると複合キーになるようです。
RDBでいうところの行が項目、列が属性。
パーティションキー、ソートキー以外の属性はいくらでも足すことが可能なよう。
Lambdaでデータを読み書きしてみる
これだけでは寂しいので、AWS Lambdaを使ってデータの読み書きをしてみたいと思います。 DynamoDBをLambdaで使う場合、使用するIAMロールには「AmazonDynamoDBFullAccess」を割り当てます。トリガーにDynamoDBを割り当てます。
コードはnode.jsでこんな感じで記述します。
まだあんまりLambda関数の書き方わかってないので適当です…。
let AWS = require('aws-sdk'); let dynamodb = new AWS.DynamoDB.DocumentClient(); exports.handler = async (event) => { //レコード読み込み let params = { TableName: "Music", Key:{ Artist: "hide", SongTitle: "ピンクスパイダー" } }; dynamodb.get(params, function(err, data){ console.log("data:", data); console.log("error:", err); }); //レコード追加 dynamodb.put({ "TableName": "Music", "Item": { "Artist": event.Artist, "SongTitle": event.SongTitle } },function(err, data){ console.log("err:", err); }); };
テスト実行で渡すパラメータはテーブルの属性を指定したJSONです。
{
"Artist": "X JAPAN",
"SongTitle": "紅"
}
実行すると、データがJSON形式で取得でき、DynamoDBに項目がセットされました。
ざっくり使い方が学べました。
RDB的なテーブルの操作より、どちらかというとオブジェクトを操作しているような感覚ですね。
RDBのテーブル設計しかしたことないSIer育ちの小生は、NoSQLデータベースでどういうテーブル設計をすればよいかイマイチわかりません…。
では。
ディスカッション
コメント一覧
まだ、コメントがありません