モチベーション
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