LoginSignup
10
0

More than 3 years have passed since last update.

DynamoDBを触ってみる#1

Last updated at Posted at 2019-12-11

いえらぶの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で以下を記述

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みたいなものです。

screencapture-localhost-5984-shell-2019-12-04-22_56_20.png

2.テーブルを作成する

ローカルの開発環境ができたので、次はchat用のテーブルを作ります。
今回は簡単なチャットを作りたいので、とりあえず以下ができるようにします。

## chatの仕様
* APIでチャットルームを呼び出せる。
* チャットルームに入ると、過去のやり取りを確認できる。
* メッセージを入力して「送信」を押すと、メッセージを送信することができる。
* メッセージが即時で相手方にも表示される。

## 保持したいデータ
* メッセージ内容 (string型、とりあえずテキストのみ)
* 送信者 (int型、idで管理する)
* 送信日時 (マイクロ秒まで取得)

DyanamoDB Localでは、テーブル作成の補助機能があるので、それを使うと早いです。
右上の</>のアイコンをクリック→CreateTableを押します。
image.png

サンプルコードを以下のように修正して、クエリを流すとテーブルが出来上がります。

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とは全然違うので仕組みの理解に時間がかかります。
チャットからの読み込み&書き込みについてはまた後日。

参考

10
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
0