各ドメインには 2 つの異なるストレージ サイズがあります。基本サイズには、サイズ クォータ (ドメインあたり 10 GB、Select からの 1 MB 応答) を適用するときに、SimpleDB サービスによって保存され、使用される基本データのみが含まれます。もう 1 つのサイズの数値は請求目的でのみ使用され、インデックス用にバックグラウンドで使用されるストレージも含まれます。両方のストレージ数を計算するために必要な 6 つの値はすべて、DomainMetadata 操作から入手できます。
ベース ストレージの計算
基本ストレージの計算に必要な値は、ItemNamesSizeBytes、AttributeNamesSizeBytes、および AttributeValuesSizeBytes の 3 つだけです。これらの値は、一意のアイテム名の長さ、一意の属性名の長さ、およびすべての属性値の長さの合計を表します。基本ストレージの式は次のとおりです。
baseStorage =
ItemNamesSizeBytes + AttributeNamesSizeBytes + AttributeValuesSizeBytes
課金ストレージの計算
課金ストレージ サイズを計算するには、3 つの追加の DomainMetadata 値が必要です。これらはカウントです: ItemCount、AttributeNameCount、および AttributeValueCount。これらの数値は、インデックス エントリに対応する保存済みデータの数を表します。各インデックス エントリには、課金目的でのみ 45 バイトのストレージ料金が発生します。課金ストレージの式は次のとおりです。
indexStorage = 45 x (ItemCount + AttributeNameCount + AttributeValueCount)
billingStorage = baseStorage + indexStorage
ノート
「属性と値のペア」という言葉に惑わされないでください。これは、同じであるが異なる属性名で格納されている属性値を区別するためのものです。たとえば、アイテムに次の 2 つの属性ペアを保存する場合: {name: "Violet", favColor: "Violet"} 両方の値 "Violet" を保存すると、それらは異なる属性と値のペアの一部であるため、課金されます。ドキュメントに、アイテムごとの一意の値ごとに課金されると記載されている場合、この例では正確ではありません。
また、SimpleDB に格納されるすべてのデータは、UTF-8 でエンコードされたバイト文字列として格納されます。複数のバイトにエンコードされるすべての文字は、すべての目的 (DomainMetadata 応答、クォータの適用、請求) で複数のバイトとしてカウントされます。
文字エンコーディングに加えて、REST 要求は回線上で URL エンコードする必要があります。この「パーセント エンコーディング」により、さまざまな文字のサイズが 3 倍になります。たとえば、空白文字 ' ' は '%20' になります。このエンコーディングは、ストレージ サイズの計算には影響しません。格納前に SimpleDB 側でデコードされます。
DomainMetadata 値はキャッシュから提供されることもありますが、通常は 24 時間以内です。応答のタイムスタンプをチェックして、値がいつ計算されたかを確認します。実際問題として、これはほとんどの場合、データを追加してすぐに DomainMetadata 値の変化を確認することができないことを意味します。