Amazon KeyspacesでデータのTTL機能をつかってみた

2022.03.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

Amazon KeyspacesではデータごとにTime to Live(TTL)設定を行うことが出来ます。
このデータをうまく使うと不要データの削除機能などをバッチ実行などをしなくてもよくなります。

AWSだと、DynamoDBなども同様にTTL機能があります。

新しい機能というわけではないのですが、最新少し触っていてTTLに関する記事が見当たらなかったので残すことにしました。

設定方法

テーブルごとにTTL機能の有効・無効の設定が存在しており、デフォルトのTTL期間を設定することが出来ます。
秒単位で指定し、最大20年分まで設定が可能です。

テーブル作成クエリの場合だと以下のようになります。(300秒を指定)

CREATE TABLE "hogekeyspace"."ttltable"(
    "id" int,
    "name" text,
    PRIMARY KEY("id"))
WITH default_time_to_live = 300 AND CUSTOM_PROPERTIES = {
    'capacity_mode':{
        'throughput_mode':'PAY_PER_REQUEST'
    }, 
    'encryption_specification':{
        'encryption_type':'AWS_OWNED_KMS_KEY'
    }
}

TTL値の確認

上記設定を行った状態で、ttl()で該当レコードが期限切れになるまでの秒数を取得出来ます。

SELECT id, name, ttl(name) FROM hogekeyspace.ttltable;

期間すぎるとクエリで取得されなくなり、その後一定期間(約10日間)で自動で削除されるとのことです。

TTL値の上書き

テーブルに設定した値はあくまでもデフォルトのTTL値であり、USING TTLを使うことで、デフォルト値を無視することが出来ます。
例えば、デフォルトTTL300秒のテーブルに対してTTL600秒のデータを作成する場合は以下です。

INSERT INTO hogekeyspace.hogetable (id, name) VALUES (5, 'eee') USING TTL 600;

TTL設定が無効なテーブルを有効化する

TTL設定が無効なテーブルに対して、先程のttl()などを使おうとするとエラーとなります。
SELECTもINSERTも出来ません。

ALTER TABLEでTTLの有効化を行う必要があります。

ALTER TABLE hogekeyspace.hogetable WITH custom_properties = {'ttl': {'status': 'enabled'}}

ちなみに、TTL無効化時に作成したデータはTTLがnullとなり、永続的に期限切れになりません。

料金

このTTL機能は別途利用料金が発生します。
TTLを私用して削除(または更新)される行のサイズに基づいて決まります。
1KBごとに1件のTTL削除としてカウントされ、本日時点では100万件ごとに約1.2ドルです。

DynamDBのTTLは無料で利用出来たと思いますが、Keyspacesの場合は料金が発生するのでご注意ください。

さいごに

Keyspacesを使ったワークロードで、ユーザーセッションのような、データに利用期限の概念があるようなデータを扱う場合にとても有効だと思います。
また、活用できると削除バッチのようなものも用意しなくて済むのでうまくTTL設計を使っていきたいですね。