データのバージョン管理と有効期間 (TTL) を使用して、データを効率的に管理し、ストレージ使用量およびストレージコストを削減できます。
Max Versions
Max Versions は、各属性列に保持するデータバージョンの最大数を指定します。属性列のバージョン数がこの上限を超えた場合、システムは非同期で最も古いバージョンを削除します。
現在、Tablestore では Max Versions の上限は適用されていません。ただし、パフォーマンスおよび使いやすさの観点から、バージョン数を 500 以下にすることを推奨します。
データテーブル作成時に Max Versions パラメーターを指定しない場合、デフォルト値は 1 になります。UpdateTable 操作を呼び出すことで、後からこの値を変更できます。
Max Versions の上限を超えたデータバージョンは無効とみなされます。システムによる削除がまだ完了していない場合でも、これらのバージョンを読み取ることはできません。
-
Max Versions の値を小さくした場合、新しい上限を超える古いバージョンが非同期で削除されます。
-
Max Versions の値を大きくした場合、新しい上限内に収まりかつまだ削除されていない古いバージョンが再度読み取り可能になる可能性があります。
バージョン番号
データテーブルに対して Max Versions を設定すると、Tablestore は属性列の値を更新するたびに新しいバージョンを作成します。このバージョンには、ミリ秒単位のタイムスタンプであるバージョン番号が割り当てられます。
属性列にデータを書き込む際、バージョン番号を明示的に指定するか、システムに自動生成させることができます。バージョン番号はミリ秒単位のタイムスタンプであるため、TTL や Max Version Offset の計算を行う際には、1,000 で割って秒単位に変換する必要があります。
-
システムがバージョン番号を自動生成する場合、
1970-01-01 00:00:00 UTCを起点とする現在時刻のミリ秒タイムスタンプを使用します。 -
カスタムバージョン番号を指定する場合、有効なバージョン範囲内の 64 ビットミリ秒タイムスタンプである必要があります。
バージョン番号により、以下の機能が実現されます。
-
TTL
バージョン番号を使用して、属性列内の値のライフサイクルを定義できます。データバージョンの経過時間が設定された TTL を超えると、システムはそのバージョンを非同期で削除します。
例として、バージョン番号が 1468944000000(
2016-07-20 00:00:00 UTC + 08:00に対応)で、データテーブルの TTL が 86400(1 日)に設定されている場合、このバージョンは2016-07-21 00:00:00 UTC + 08:00に有効期限切れとなり、システムによって非同期で削除されます。 -
バージョン指定でのデータ読み取り
行データを読み取る際に、各列で読み取るバージョンの最大数や特定のバージョン番号の範囲を指定できます。詳細については、「データの読み取り」をご参照ください。
TTL
TTL はデータテーブルのプロパティであり、データ保持期間(秒単位)を指定します。属性列内のデータバージョンの経過時間が設定された TTL を超えると、システムはそのバージョンを非同期で削除します。行内のすべての属性列のデータバージョンが有効期限切れになると、システムはその行全体を非同期で削除します。
例として、データテーブルの TTL が 86400(1 日)に設定されている場合、2016-07-21 00:00:00 UTC + 08:00 時点で、バージョン番号が 1468944000000 未満のすべての属性列データが有効期限切れとなります。このタイムスタンプは秒単位に変換すると 2016-07-20 00:00:00 UTC + 08:00 に対応します。その後、システムは有効期限切れのデータを非同期で削除します。
データテーブル作成時に TTL を設定しない場合、デフォルト値は -1 となり、データは永久に有効期限切れになりません。後から UpdateTable 操作を呼び出して TTL を変更できます。
データテーブルの TTL とセカンダリインデックスの TTL は独立しています。ただし、データテーブルの TTL はセカンダリインデックスの TTL よりも大きい、または等しくなければなりません。セカンダリインデックスを持つデータテーブルの TTL を変更する場合は、次の手順に従ってください。
-
データテーブルの新しい TTL がセカンダリインデックスの TTL より小さい場合、まず SDK を使用して UpdateTable 操作を呼び出し、セカンダリインデックスの TTL を目的の値以下に変更します。その後、データテーブルの TTL を目的の値に変更します。
-
データテーブルの新しい TTL がセカンダリインデックスの TTL 以上の場合、データテーブルの TTL を直接目的の値に変更できます。
TTL を超過したデータは有効期限切れとみなされ、システムによる削除がまだ完了していない場合でも読み取り不能になります。
-
TTL の値を小さくした場合、データテーブル内の一部のデータが有効期限切れとなり、システムは有効期限切れのデータを非同期で削除します。
-
TTL を大きくした場合、以前の TTL で有効期限切れとなった古いバージョンが、新しい TTL 期間内に収まりかつまだ削除されていない場合、再度読み取り可能になる可能性があります。
Max Version Offset
カスタムタイムスタンプがテーブルの TTL より古いためにデータが書き込み直後に有効期限切れとなることを防ぐために、Max Version Offset を設定できます。
Max Version Offset は、カスタムバージョン番号と現在のシステム時刻との間で許容される最大ずれ(秒単位)です。正の整数で指定します。
書き込み操作を成功させるために、システムは各属性列のデータのバージョン番号をチェックします。バージョン番号をミリ秒から秒に変換した値が、有効なバージョン範囲 [max{write_time - Max Version Offset, write_time - TTL}, write_time + Max Version Offset) 内にある場合にのみ、データを書き込むことができます。
例として、データテーブルの Max Version Offset が 86400(1 日)に設定されている場合、2016-07-21 00:00:00 UTC + 08:00 時点では、バージョン番号が 1468944000000(秒単位に変換すると 2016-07-20 00:00:00 UTC + 08:00 に対応)より大きく、かつ 1469116800000(秒単位に変換すると 2016-07-22 00:00:00 UTC + 08:00 に対応)未満のデータのみを書き込むことができます。行内の属性列のバージョン番号が 1468943999000(秒単位に変換すると 2016-07-19 23:59:59 UTC + 08:00 に対応)である場合、その行の書き込み操作は失敗します。
データテーブル作成時に Max Version Offset を設定しない場合、デフォルト値は 86400 になります。後から UpdateTable 操作を呼び出してこの値を変更できます。
構成方法
Max Versions や TTL などのパラメーターは、データテーブル作成時に設定できます。また、テーブル作成後にもこれらのパラメーターを変更できます。以下の例は、既存のテーブルの構成を変更する方法を示しています。
データテーブル作成時の Max Versions または TTL の設定方法については、「テーブル操作」をご参照ください。
コンソール
CLI
SDK
課金
-
複数のデータバージョンを使用すると、各バージョンのバージョン番号とデータの両方がストレージに保存されるため、ストレージコストが増加します。
-
TTL に基づくデータのクリーンアップは無料です。ただし、TTL を有効にすると、各属性列にタイムスタンプ(バージョン番号)が追加されるため、ストレージ使用量が増加します。
詳細については、「データストレージ」をご参照ください。