すべてのプロダクト
Search
ドキュメントセンター

Tablestore:データのバージョン管理と TTL

最終更新日:May 07, 2026

データのバージョン管理と有効期間 (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 の設定方法については、「テーブル操作」をご参照ください。

コンソール

コンソールを使用して、データテーブルの Max Versions、TTL、および Max Version Offset を変更できます。

  1. Tablestore コンソールにログインします。

  2. 概要ページで、管理対象のインスタンスの操作列のインスタンスの管理をクリックします。

  3. インスタンスの詳細タブのテーブルリストセクションで、データテーブルの名前をクリックします。

  4. 基本情報タブの説明セクションで、ライフサイクルと最大バージョンの調整をクリックします。

  5. ライフサイクルと最大バージョンの調整ダイアログボックスで、次の表に従ってパラメーターを設定します。

    パラメーター

    説明

    Time to Live

    データテーブル内のデータの保持期間(秒単位)。データの経過時間が設定された TTL を超えると、システムが自動的に削除します。

    有効値:86400(1 日)以上の値、または -1(データが永久に有効期限切れにならない)。

    重要

    データテーブルにインデックスを使用する場合、TTL は次のいずれかの条件を満たす必要があります。

    • データテーブルの TTL が -1(データが永久に有効期限切れにならない)。

    • データテーブルの TTL が -1 以外で、データテーブルへの更新が無効化されている。

      すでにデータテーブルにインデックスを作成している場合、TTL を変更する前に更新を許可いいえに設定する必要があります。

    Max Versions

    各属性列に保持するバージョンの最大数。バージョン数がこの上限を超えると、システムが自動的に最も古いバージョンを削除します。

    値はゼロ以外の整数である必要があります。

    重要

    データテーブルにインデックスを使用する場合、Max Versions は 1 に設定する必要があります。すでにデータテーブルにインデックスを作成している場合、Max Versions を変更することはできません。

    Max Version Offset

    指定されたバージョン番号と現在のシステム時刻との間で許容される最大ずれ(秒単位)。値は正の整数である必要があります。

    各列のバージョン番号と書き込み時刻との差が設定された Max Version Offset の範囲内にある場合にのみ、データを正常に書き込むことができます。

    属性列の有効なバージョン範囲は [max{write_time - Max Version Offset, write_time - TTL}, write_time + Max Version Offset) です。

    更新を許可

    UpdateRow 操作によるデータ書き込みを許可するかどうかを指定します。デフォルトははいです。

    データテーブルにインデックスを作成済みで、その TTL を変更したい場合は、まず [更新を許可]いいえ に設定する必要があります。

    重要

    多次元インデックスで TTL 機能を使用するには、このパラメーターをいいえに設定し、UpdateRow 操作によるデータ書き込みを禁止する必要があります。多次元インデックスの TTL の詳細については、「多次元インデックスの TTL」をご参照ください。

  6. OK をクリックします。

CLI

次のコマンドを実行して構成を変更できます。

alter コマンドを使用して、データテーブルの Max Versions または TTL を変更します。詳細については、「テーブルの更新」をご参照ください。

次の例では、mytable データテーブルの TTL を 86400 秒(1 日)に変更し、Max Versions を 1 に設定します。

alter -t mytable --ttl 86400 --version 1

SDK

Java SDKGo SDKPython SDKNode.js SDK.NET SDK、およびPHP SDK を使用して、Max Versions、TTL、Max Version Offset などのテーブルプロパティを更新できます。次の例では、Java SDK を使用してテーブルを更新します。

次の例では、データテーブルの Max Versions を 5、TTL を -1、Max Version Offset を 86400 に設定します。

private static void updateTable(SyncClient client) {
    // データの有効期限(秒単位)。-1 を指定すると、データは永久に有効期限切れになりません。
    int timeToLive = -1;
    // Max Versions を 5 に更新します。
    int maxVersions = 5; 
    // Max Version Offset を 86400(秒単位)に更新します。
    int maxTimeDeviation=86400;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions,maxTimeDeviation);
    // テーブル名を設定します。
    UpdateTableRequest request = new UpdateTableRequest("<TABLE_NAME>");
    request.setTableOptionsForUpdate(tableOptions);
    client.updateTable(request);
}

課金

  • 複数のデータバージョンを使用すると、各バージョンのバージョン番号とデータの両方がストレージに保存されるため、ストレージコストが増加します。

  • TTL に基づくデータのクリーンアップは無料です。ただし、TTL を有効にすると、各属性列にタイムスタンプ(バージョン番号)が追加されるため、ストレージ使用量が増加します。

詳細については、「データストレージ」をご参照ください。

よくある質問