データバージョンと Time To Live(TTL)を使用して、データを効率的に管理し、ストレージの使用量とストレージコストを最小限に抑えることができます。
バージョンの最大数
バージョンの最大数の値は、属性列のデータに対して保持できるバージョンの最大数を指定します。属性列のデータのバージョン数がバージョンの最大数を超えると、システムは非同期モードで以前のバージョンのデータを自動的に削除します。
Tablestore は、バージョンの最大数に制限を設けていません。ただし、最適なパフォーマンスと使いやすさを実現するために、バージョンの最大数を 500 以下の値に設定することをお勧めします。
データテーブルを作成するときにバージョンの最大数を指定しない場合、デフォルト値の 1 が使用されます。属性列のデータに対して、バージョンの最大数のカスタム値を指定することもできます。データテーブルを作成した後、UpdateTable 操作を呼び出して、データテーブルのバージョンの最大数を変更できます。
バージョン数が指定したバージョンの最大数を超えると、以前のバージョンのデータは無効になり、Tablestore によってデータが削除されていない場合でも、データを読み取ることができなくなります。
バージョンの最大数を減らすと、データのバージョン数がバージョンの最大数の新しい値を超えた場合、Tablestore は非同期的に以前のバージョンのデータを削除します。
バージョンの最大数を増やすと、Tablestore がそのバージョンのデータを削除しておらず、そのバージョンが新しいバージョン範囲内にある場合、特定のバージョンのデータを読み取ることができます。
バージョン番号
データテーブルのバージョンの最大数を構成した後、属性列の値を更新するたびに、Tablestore はその値の新しいバージョンを生成します。バージョン番号はミリ秒単位のタイムスタンプです。
属性列にデータを書き込むときに、バージョン番号を指定できます。バージョン番号を指定しない場合、Tablestore は自動的にバージョン番号を生成します。バージョン番号はミリ秒単位のタイムスタンプです。バージョン番号を TTL 値と比較したり、最大バージョンオフセットを計算したりする場合は、バージョン番号を 1,000 で割る必要があります。
デフォルトでは、Tablestore によって生成されるバージョン番号は現在のタイムスタンプです。これは、
1970 年 1 月 1 日 00:00:00 UTCから経過したミリ秒数です。属性列のバージョン番号を指定する場合は、バージョン番号がミリ秒単位で正確な 64 ビットのタイムスタンプであり、有効なバージョン範囲内にあることを確認してください。
バージョン番号を使用して、次の機能を実装できます。
TTL
データテーブルの属性列値の TTL をバージョン番号に基づいて指定できます。属性列の特定のバージョンのデータが TTL 値を超える期間保持されると、Tablestore は非同期モードで特定のバージョンのデータを自動的に削除します。
たとえば、属性列のデータのバージョン番号が 1468944000000 であるとします。これは、
2016 年 7 月 20 日 00:00:00 UTC + 08:00に相当します。TTL の値を 86,400 秒(1 日)に設定すると、このバージョンのデータは2016 年 7 月 21 日 00:00:00 UTC + 08:00に期限切れになります。Tablestore は、データの期限が切れると、非同期モードでデータを自動的に削除します。Tablestore が各属性列から読み取るバージョンの最大数またはバージョン番号の範囲
Tablestore がデータの行を読み取るときに、Tablestore が各属性列から読み取るバージョンの最大数またはバージョン番号の範囲を指定できます。詳細については、「データの読み取り」をご参照ください。
TTL
TTL は、データテーブルのデータの有効期間を秒単位で指定します。属性列の特定のバージョンのデータが TTL 値を超える期間保持されると、Tablestore は属性列から特定のバージョンのデータを非同期モードで自動的に削除します。行のすべての属性列のデータが TTL 値を超える期間保持されると、Tablestore は行を非同期モードで自動的に削除します。
たとえば、データテーブルのデータの TTL を 86,400 秒(1 日)に設定したとします。2016 年 7 月 21 日 00:00:00 UTC + 08:00 に、バージョン番号が 1468944000000 より小さいデータは期限切れになります。バージョン番号 1468944000000 は、1,000 で割って秒に変換すると、2016 年 7 月 20 日 00:00:00 UTC + 08:00 に相当します。Tablestore は、期限切れのデータを非同期モードで自動的に削除します。
データテーブルを作成するときに TTL の値を指定しない場合、デフォルト値の -1 が使用されます。値 -1 は、データテーブルのデータが期限切れにならないことを示します。カスタム TTL 値を指定することもできます。データテーブルを作成した後、UpdateTable 操作を呼び出して、データテーブルのデータの TTL 値を変更できます。
データが TTL 値を超える期間保持されると、データは無効になり、Tablestore によってデータが削除されていない場合でも、データを読み取ることができなくなります。
データテーブルの TTL は、データテーブルに対して作成されたセカンダリインデックスの TTL とは独立しており、セカンダリインデックスの TTL 以上である必要があります。データテーブルにセカンダリインデックスが作成されていて、データテーブルの TTL を変更する場合は、実際の状況に基づいて操作を実行します。
データテーブルの新しい TTL がセカンダリインデックスの TTL より小さい場合は、SDK を使用して UpdateTable 操作を呼び出し、セカンダリインデックスの TTL をデータテーブルの新しい TTL 以下の値に変更してから、データテーブルの TTL を新しい値に変更します。
データテーブルの新しい TTL がセカンダリインデックスの TTL 以上である場合は、データテーブルの TTL を新しい値に変更します。
TTL 値を減らすと、Tablestore は新しい TTL 値を超える期間保持されているデータを非同期的に削除します。
TTL 値を増やすと、Tablestore がデータを削除しておらず、そのバージョンのデータが新しい TTL 値以内の期間保持されている場合、特定のバージョンのデータを読み取ることができます。
最大バージョンオフセット
現在時刻と指定したバージョンのタイムスタンプの差が、データテーブルに指定した TTL 値を超えると、書き込まれたデータはすぐに期限切れになります。この問題を解決するために、Tablestore では最大バージョンオフセットを構成できます。
最大バージョンオフセットは、現在のシステム時刻と指定されたバージョン番号の最大差を秒単位で指定します。最大バージョンオフセットの値は、1970 年 1 月 1 日 00:00:00 UTC から経過した秒数よりも大きい正の整数です。
属性列にデータを書き込むと、Tablestore はデータのバージョン番号を確認します。属性列のデータの有効なバージョン範囲は、次の式を使用して計算されます。有効なバージョン範囲 = [max{データ書き込み時刻 - 最大バージョンオフセット, データ書き込み時刻 - TTL 値}, データ書き込み時刻 + 最大バージョンオフセット)。データのバージョン番号(1,000 で割って秒に変換)が有効なバージョン範囲内にある場合にのみ、属性列にデータを書き込むことができます。
たとえば、データテーブルの各属性列のデータの最大バージョンオフセットを 86,400 秒(1 日)に設定したとします。2016 年 7 月 21 日 00:00:00 UTC には、バージョン範囲が 1468944000000(2016 年 7 月 20 日 00:00:00 UTC + 08:00)から 1469116800000(2016 年 7 月 22 日 00:00:00 UTC + 08:00)の間のデータのみを書き込むことができます。属性列のデータのバージョン番号が 1468943999000(2016 年 7 月 19 日 23:59:59 UTC + 08:00)であるデータ行を書き込もうとすると、行の書き込みは失敗します。
データテーブルを作成するときに最大バージョンオフセットの値を指定しない場合、デフォルト値の 86400 が使用されます。データテーブルのデータのカスタム最大バージョンオフセットを指定することもできます。データテーブルを作成した後、UpdateTable 操作を呼び出して、データテーブルのデータの最大バージョンオフセットを変更できます。
使用方法
データテーブルを作成するときに、バージョンの最大数や TTL などのパラメータを構成できます。データテーブルを作成した後に、バージョンの最大数や TTL などのパラメータを変更することもできます。このセクションでは、データテーブルの作成後にデータテーブルの構成を変更する方法について説明します。
データテーブルを作成するときにデータバージョンと TTL を構成する方法の詳細については、「テーブルに対する操作」をご参照ください。
Tablestore コンソールの使用
Tablestore CLI の使用
Tablestore SDK の使用
課金
バージョンの最大数機能を使用する場合、バージョン番号とさまざまなバージョン番号を持つデータのストレージ使用量に対して課金されます。
TTL を構成してデータを削除する場合、Tablestore によって実行される削除操作に対して課金されません。TTL 機能を有効にすると、Tablestore は各属性列にタイムスタンプをバージョン番号として追加します。バージョン番号とさまざまなバージョン番号を持つデータのストレージ使用量に対して課金されます。
詳細については、「ストレージの使用量」をご参照ください。