Alibaba Cloudアカウント内のすべてのインスタンスのストレージ使用量に対して、1時間ごとに課金されます。Tablestoreは特定の間隔でデータサイズを計算し、取得したサイズを使用して1時間あたりの平均合計データサイズを計算します。
料金の詳細については、「Tablestore の料金」をご参照ください。
このトピックでは、単一行と単一テーブルのデータサイズを計算する方法について説明します。
単一行のデータサイズの計算
Tablestoreの各データ行はストレージ容量を消費します。データテーブルにMaxVersionsまたは有効期限(TTL)を設定すると、各バージョンのデータには、バージョン番号(8バイト)、列名、およびデータ値が含まれます。
単一行のデータサイズは、次の式を使用して計算されます。単一行のデータサイズ = プライマリキー列のデータサイズ + すべての属性列のデータサイズ
。
プライマリキー列のデータサイズ = すべてのプライマリキー列名の長さの合計 + すべてのプライマリキー列の値のデータサイズ
すべての属性列のデータサイズについては、このトピックの単一行と単一テーブルのデータサイズの計算方法の例を参照してください。
次の表は、さまざまなタイプの列の値のデータサイズを計算するために使用されるバイト数を示しています。
データ型 | バイト数 |
String | UTF-8でエンコードされた文字列で使用されるバイト数。Tablestoreは空の文字列を許可します。空の文字列のデータサイズは 0 です。 |
Integer | 8 |
Double | 8 |
Boolean | 1 |
Binary | バイナリデータで使用されるバイト数。 |
単一行のデータサイズの計算例:
行には、IDという名前のプライマリキー列が1つだけ含まれています。プライマリキー列のデータ型はIntegerです。他の列は属性列です。
ID | Name | Length | Comments |
1 | timestamp=1466676354000,value='zhangsan' | timestamp=1466676354000,value=20 | timestamp=1466676354000,value=String(100 Bytes) timestamp=1466679954000,value=String(150 Bytes) |
行のComments列には、2つの有効なバージョンのデータが含まれています。
MaxVersions を 2 に、TTL を 2592000 に設定した場合:
属性列のデータサイズは、次の式を使用して計算されます。属性列のデータサイズ =(属性列名の長さ + 8)× 有効なバージョンの数 + 属性列の有効なバージョンの値の合計データサイズ。
説明MaxVersions を 1 より大きい値に設定するか、TTL を -1 より大きい値に設定すると、各バージョン番号は 8 バイトを消費します。この例では、タイムスタンプはバージョン番号と同等です。
行のデータサイズは、10、20、22、および 282 バイトの合計で、334 バイトになります。詳細:
プライマリキー列のデータサイズ:len ('ID') + len (1) = 10 バイト
Name 属性列のデータサイズ:(len ('Name') + 8)x 1 + len ('zhangsan') = 20 バイト
Length 属性列のデータサイズ:(len ('Length') + 8)x 1 + len (20) = 22 バイト
Comments 属性列のデータサイズ:
(len ('Comments') + 8) x 2 + 100 + 150 = 282 バイト
MaxVersions を 1 に、TTL を -1 に設定した場合:
属性列のデータサイズは、次の式を使用して計算されます。属性列のデータサイズ = 属性列名の長さ + 属性列の値の合計データサイズ。
説明MaxVersions を 1 に、TTL を -1 に設定すると、バージョン番号はバイトを消費しません。
Comments 列には 2 つのバージョンの値が含まれていますが、MaxVersions が 1 に設定されているため、最新のバージョンのみが計算されます。
行のデータサイズは、10、12、14、および 158 バイトの合計で、194 バイトになります。詳細:
プライマリキー列のデータサイズ:
len ('ID') + len (1) = 10 バイト
Name 属性列のデータサイズ:
len('Name') + len('zhangsan') = 12 バイト
Length 属性列のデータサイズ:
len('Length') + len(20) = 14 バイト
Comments 属性列のデータサイズ:len ('Comments') + 150 (バイト) = 158 バイト
単一テーブルのデータサイズの計算
テーブルのデータサイズは、テーブル内のすべてのデータ行のデータサイズの合計です。たとえば、テーブルに ID という名前のプライマリキー列と属性列が 1 つ含まれているとします。次の図は、MaxVersions を 2 に、TTL を -1 に設定した場合のテーブルのデータサイズの計算方法を示しています。
ID 列の値が 1 である行のデータサイズ = 10 (プライマリキー列のデータサイズ) + 282 (Comments 列の 2 つのバージョンの値のデータサイズ)。この場合、ID 列の値が 1 である行のデータサイズは 292 バイトです。
ID 列の値が 2 である行のデータサイズ = 10 (プライマリキー列のデータサイズ) + 216 (Comments 列の値のデータサイズ) + 22 (Length 列の値のデータサイズ)。この場合、ID 列の値が 2 である行のデータサイズは 248 バイトです。
テーブルのデータサイズは、292 と 248 の合計で、540 バイトになります。テーブル内のデータサイズが 1 時間以内に変更されない場合、540 バイトのストレージに対して課金されます。Tablestore は、単一テーブルのストレージ容量に制限を設けていません。従量課金制でストレージの使用量に対して課金されます。
Tablestore は、TTL 値の期限が切れたデータと、バージョン数が MaxVersions に指定された値を超えた場合の以前のバージョンのデータを、各パーティションから非同期的に削除します。その後、Tablestore は各パーティションのデータ量を計算します。データの削除に費やされる時間は、データの合計サイズに関連しています。ほとんどの場合、データは 24 時間以内に削除されます。削除操作が実行された後、パーティションにデータが書き込まれた場合、次の削除操作が実行された後のデータのストレージに対して課金されます。
ストレージ使用量の統計期間
Tablestore のストレージ使用量の計測は遅れる場合があります。ほとんどの場合、ストレージ使用量の計測は 24 時間以内に完了します。
Tablestore のデータテーブルは、LSM アーキテクチャに基づいて実装されています。データは追加モードでメモリに書き込まれます。メモリ内のデータが特定の条件を満たすと、小さなデータファイルが生成されます。単一行のデータに対する複数の更新および削除操作は、複数の小さなファイルに分散される場合があります。すべてのファイルの合計サイズを計算すると、冗長な計測が発生します。この場合、システムは定期的にデータファイルの圧縮を実行して冗長データを削除し、圧縮後のファイルのサイズを計算します。これにより、ストレージ使用量の計測の精度が保証されます。
データの書き込み、更新、または削除後、テーブルサイズは短期間では変更されない場合があり、ストレージ使用量の計測が遅れる場合があります。ストレージ使用量の統計期間は、システムがデータファイルの圧縮を実行するために必要な期間と同じです。