いえらぶのAdventCalendarの11日目です。
Dev開発合宿(いえらぶの開発合宿)で作ったチャットをもっとブラッシュアップすべく、チャット用のDBを構築中です。
たまには業務で使わないものも触ってみようと、AWSのDynamoDBを使っています。
Amazon DynamoDBの特徴
- 大規模サービスや急激な利用率向上するサービスに向いている。
- Nosqlのデータベース(key-value型)
- マネージド型
- オートスケールが可能
- サーバーレス
公式サイト曰く、
「1 日に 10 兆件以上のリクエストを処理することができ、毎秒 2,000 万件を超えるリクエストをサポート」
1. DynamoDB Localを使えるようにする
DynamoDBはAWSのサービスだから開発も本番でやるかなと思っていたら、
天下のAWS様はDynamoDBのローカル環境を用意してくれているので、さっそくインストール。
個人の開発環境はDockerなので、Docker Imageを使用しています。
##手順
1. docker-compose.ymlで以下を記述
dynamodb:
image: amazon/dynamodb-local
container_name: dynamodb
volumes:
- ./chat/db:/home/dynamodblocal/data
ports:
- 5984:5984
command: "-jar DynamoDBLocal.jar -port 5984 -dbPath ./data -sharedDb"
※ portsのデフォルトは8000
2. docker compose up
3. DynamoDB JavaScript Shellを開く。
URL: http://localhost:5984/shell/
このShell上でテーブル作成ができます。MysqlでいうphpMyAdminみたいなものです。
2.テーブルを作成する
ローカルの開発環境ができたので、次はchat用のテーブルを作ります。
今回は簡単なチャットを作りたいので、とりあえず以下ができるようにします。
## chatの仕様
* APIでチャットルームを呼び出せる。
* チャットルームに入ると、過去のやり取りを確認できる。
* メッセージを入力して「送信」を押すと、メッセージを送信することができる。
* メッセージが即時で相手方にも表示される。
## 保持したいデータ
* メッセージ内容 (string型、とりあえずテキストのみ)
* 送信者 (int型、idで管理する)
* 送信日時 (マイクロ秒まで取得)
DyanamoDB Localでは、テーブル作成の補助機能があるので、それを使うと早いです。
右上の>のアイコンをクリック→CreateTableを押します。
サンプルコードを以下のように修正して、クエリを流すとテーブルが出来上がります。
var params = {
TableName: 'chat',
KeySchema: [
{
AttributeName: 'room_id',
KeyType: 'HASH',
},
{
AttributeName: 'created',
KeyType: 'RANGE',
}
],
AttributeDefinitions: [
{
AttributeName: 'room_id',
AttributeType: 'N',
},
{
AttributeName: 'created',
AttributeType: 'N',
},
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1,
},
};
dynamodb.createTable(params, function(err, data) {
if (err) ppJson(err); // an error occurred
else ppJson(data); // successful response
});
- TableName: テーブル名
- KeySchema: 指定の仕方は、HashのみとHash&Rengeの2種類ある。データ取得をする際に、今回は作成日時で絞りたいので、Hash&Rengeタイプを使います。
まとめ
NoSQL初めて触りましたが、RDBとは全然違うので仕組みの理解に時間がかかります。
チャットからの読み込み&書き込みについてはまた後日。
参考