TTLとは レコード毎にデータの有効期限を指定でき、その有効期限を過ぎるとデータが自動削除される機能です 利用例 低アクセスデータをアーカイブTBLへ移動 メインTBLと同定義、キャパシティーだけ下げてOLDデータを保存 低アクセスデータを削除 削除時にトリガーして、LOGを残す トリガーさせるにはStreamの有効化が必要 TTL詳細 TTL の有効化 カラムで指定した有効期限を過ぎると、自動でデータが消える 変更が完全に処理されるまでに最大で 1 時間かかる TTL 属性 項目の TTL タイムスタンプを保存する DynamoDB 属性の名前 有効期限はNumber型のエポック時間(Unixtime(ミリ秒無し))を指定 現在の時間を、項目の Time To Live 属性に保存されている時間と比較 属性に保存されているエポック時間の値が現在の時間よりも少ない場合、項目は期限切れとマークされ、その後に削除される データは48時間以内に削除される リアルタイム性が重要でない場合(48時間後に消えてもOKな場合)は、とても有効な機能 スループットは消費せず、データ容量が減らせる エポック時間形式(Unixtime) コンピューターシステム上での時刻表現の一種 UNIXエポック、すなわち協定世界時 (UTC) での1970年1月1日午前0時0分0秒から形式的な経過秒数(すなわち、実質的な経過秒数から、その間に挿入された閏秒を引き、削除された閏秒を加えたもの) 現在時刻からエポック時間を取得する方法 Linux ターミナル: date +%s Python: import time; long(time.
Sparse Indexesとは DynamoDBのデータ抽出アプローチのテクニックの1つ 特定Itemにしか設定していない項目にGSIを含めることでプライマリーキー、ソートキー以外のキーでデータ抽出を容易に 以下の悩みを解決(プライマリーキー、ソートキー以外のキーでデータ抽出) scanだと高コスト、キーで検索しても高コスト、フィルターだとキー検索とコスト一緒 サンプル: gameから最優秀賞を取得 初期テーブル game単位で最優秀スコアのデータを取得したい scoreの最優秀をawdという項目を用意。対象以外は項目を設定しない awdを含めたグローバルセカンダリインデックスを作成 GSIを検索 最優秀賞が設定されている項目が少ないため、VIEWが出来た時点で絞り込まれている scanしても低コスト!←今回の一番のポイント aws dynamodb scan --table-name game --index-name name-awd-index { "Count": 1, "Items": [ { "score": { "S": "3" }, "id": { "S": "user3" }, "awd": { "S": "cp" }, "name": { "S": "game1" } } ], "ScannedCount": 1, "ConsumedCapacity": null }
Create Table (sample:mails) aws dynamodb create-table --table-name mails \ --attribute-definitions \ AttributeName=id,AttributeType=S \ AttributeName=Name,AttributeType=S \ --key-schema \ AttributeName=id,KeyType=HASH \ AttributeName=Name,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=2,WriteCapacityUnits=2 attribute-definitions プライマリーキーとソートキーを定義する それ以外のキーはテーブル作成時には定義しなくても良い key-schema HASH パーティションキー RANGE ソートキー provisioned-throughput ReadCapacityUnits 読み込みスループット WriteCapacityUnits 書き込みスループット put-item aws dynamodb put-item \ --table-name mails \ --item '{"id": {"S": "testid1"},"Name": {"S": "Alice"},"mail": {"S": "alice@test.