selmertsxの素振り日記

ひたすら日々の素振り内容を書き続けるだけの日記

mongoDBでテーブル作成、アイテム作成、アイテム取得をやってみる

モチベーション

GitHub - selmertsx/serverless-prpolice

自分が作っているサービスでmongoDBを触ることになったので、下記の項目を理解したい。

  • mongoDBの概要
  • mongoDBにおける基本的な操作の把握
    • Tableの作成
    • Itemの作成
    • Itemの取得

mongoDBの概要

  • Table、Item、Attributesの3つで出来てる
  • TableはItemの集合
  • ItemはAttributesの集合

DynamoDBはプライマリキーを使用して、テーブルのItemを一意に識別する。Itemの一部には、入れ子のAttributesを作ることができる。

{
    "PersonID": 1, #こいつがプライマリキー
    "LastName": "Sample",
    "Address": {
        "Street": "123 Hoge"
    }
}

パーティションキー

一つの属性で構成されたシンプルなプライマリキー。パーティションキーの値を内部ハッシュ関数への入力として利用する。これによって、Itemを一意に識別できるようにする。

複合プライマリキー

最初の属性であるパーティションキーと2番めの属性のソートキーによって構成される。同じパーティションキーを持つ全てのItemは、ソートキー値でソートされて保存される。同じパーティションキーのItemは複数存在しても、同じパーティションキー & ソートキーのItemが複数存在することは許されない。

mongoDBにおける基本的な操作

Tableの作成

aws dynamodb create-table \
  --table-name User \
  --attribute-definitions \
    AttributeName=id,AttributeType=S \
  --key-schema AttributeName=id,KeyType=HASH \
  --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
  --endpoint-url http://localhost:8000
  • Attributesとして定義したものには KeySchemaを設定しなければならない
  • 複合プライマリキーの場合、二番めキーのKeyTypeはRANGEとなる
  • Attributesとして定義しなくとも、値を格納することはできる

Itemの作成

import AWS from "aws-sdk";

const dynamo = new AWS.DynamoDB({
  endpoint: "http://localhost:8000",
  region: "ap-north-east1"
});

const putParams = {
  TableName: "User",
  Item: { Id: { S: "SlackID" }, github: { S: "GitHubID" } }
};

dynamo.putItem(putParams, (err, data) => {
  console.log(err);
  console.log(data);
});

Itemの取得

import AWS from "aws-sdk";

const dynamo = new AWS.DynamoDB({
  endpoint: "http://localhost:8000",
  region: "ap-north-east1"
});

const getParams = {
  Key: {
    Id: {
      S: "SlackID"
    }
  },
  TableName: "User"
};

dynamo.getItem(getParams, (err, data) => {
  console.log(err);
  console.log(data);
});

その他リンク集

期限切れになった項目を自動的にテーブルから削除することも可能 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/TTL.html

ベストプラクティス集 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/BestPractices.html