

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 評估您的 DynamoDB 資料表使用模式
<a name="CostOptimization_TableUsagePatterns"></a>

本節概述如何判斷您有效地使用 DynamoDB 資料表。某些用量模式對 DynamoDB 來說並非最理想的，且從效能和成本角度來看，這些模式仍有最佳化空間。

**Topics**
+ [執行較少高度一致性讀取操作](#CostOptimization_TableUsagePatterns_StronglyConsistentReads)
+ [執行較少的讀取操作交易](#CostOptimization_TableUsagePatterns_Transactions)
+ [執行較少掃描](#CostOptimization_TableUsagePatterns_Scans)
+ [縮短屬性名稱](#CostOptimization_TableUsagePatterns_AttributeNames)
+ [啟用存留時間 (TTL)](#CostOptimization_TableUsagePatterns_TTL)
+ [以跨區域備份取代全域資料表](#CostOptimization_TableUsagePatterns_GlobalTables)

## 執行較少高度一致性讀取操作
<a name="CostOptimization_TableUsagePatterns_StronglyConsistentReads"></a>

DynamoDB 可讓您根據每個請求設定[讀取一致性](HowItWorks.ReadConsistency.md)。根據預設，讀取請求最終會保持一致。最終一致讀取費用為 0.5 RCU，資料上限為 4 KB。

分散式工作負載的多數部分都具有彈性，可以容忍最終一致性。但是，有些存取模式要求高度一致性讀取。高度一致性讀取費用為 1 RCU，資料上限為 4 KB，實際上是讀取成本的兩倍。DynamoDB 讓您能在同一個資料表上使用這兩種一致性模式。

您可以評估工作負載和應用程式的程式碼，確定是否僅在需要時使用高度一致性讀取。

## 執行較少的讀取操作交易
<a name="CostOptimization_TableUsagePatterns_Transactions"></a>

DynamoDB 可讓您以全有或全無的方式，將部分動作分組，這表示您可以使用 DynamoDB 執行 ACID 交易。但是，如同關聯式資料庫，並非每個動作都需要遵循這種方法。

上限 4 KB 的[交易讀取操作](transaction-apis.md#transaction-capacity-handling.title)會耗用 2 RCU，而非以最終一致方式讀取相同數量資料的預設 0.5 RCU。寫入操作的成本會加倍，也就是說，最多 1 KB 的交易寫入等於 2 WCU。

若要判斷資料表上的所有操作是否皆為交易，可以將資料表的 CloudWatch 指標向下篩選為交易 API。若交易 API 是資料表 `SuccessfulRequestLatency` 指標下唯一可用的圖表，這就表示此資料表中每項操作都是交易。或者，若整體容量使用率趨勢符合交易 API 趨勢，請考慮重新檢視應用程式設計，因為該設計似乎由交易 API 主導。

## 執行較少掃描
<a name="CostOptimization_TableUsagePatterns_Scans"></a>

會廣泛使用 `Scan` 操作，通常源於對 DynamoDB 資料執行分析查詢的需求。在大型資料表上執行頻繁 `Scan` 操作可能既低效又昂貴。

更好的替代方案是使用[匯出至 S3](S3DataExport.HowItWorks.md#S3DataExport.HowItWorks.title) 功能，並選擇時間點將資料表狀態匯出至 S3. AWS offers 服務，例如 Athena，然後可用於對資料執行分析查詢，而不會耗用資料表中的任何容量。

您可以使用 `Scan` 的 `SuccessfulRequestLatency` 指標下的 `SampleCount` 統計資料，決定 `Scan` 操作的頻率。若 `Scan` 操作確實十分頻繁，則應重新評估存取模式和資料模型。

## 縮短屬性名稱
<a name="CostOptimization_TableUsagePatterns_AttributeNames"></a>

DynamoDB 項目的總大小是其屬性名稱長度和值的總和。較長的屬性名稱不僅產生更多儲存成本，也導致更多 RCU/WCU 耗用。建議您選擇較短的屬性名稱，而不是較長的屬性名稱。較短的屬性名稱有助於限制項目大小少於 4KB/1KB，之後您將耗用額外的 RCU/WCU 來存取資料。

## 啟用存留時間 (TTL)
<a name="CostOptimization_TableUsagePatterns_TTL"></a>

[存留時間 (TTL)](TTL.md#TTL.title) 可識別比您設定的到期時間更早的項目，並將其從資料表中移除。若您的資料已不重要，則在資料表上啟用 TTL 可協助您縮減資料並節省儲存成本。

 TTL 的另一個益處為，過期項目發生在 DynamoDB 串流上，因此您不僅從資料中移除該資料，而是可以從串流中使用這些項目，並封存到成本較低的儲存層。此外，透過 TTL 刪除項目不需額外費用 – 它不會消耗容量，且設計清理應用程式也不會產生額外負荷。

## 以跨區域備份取代全域資料表
<a name="CostOptimization_TableUsagePatterns_GlobalTables"></a>

[全域資料表](GlobalTables.md#GlobalTables.title)可讓您在不同區域中維護多個使用中複本資料表 – 這些資料表皆可接受寫入操作，並彼此複寫資料。您可以輕鬆設定複本，系統會為您管理同步處理。使用最後一個寫入獲勝策略，將複本收斂到一致。

若您僅使用全域資料表做為容錯移轉或災難復原 (DR) 策略的一部分，您可以將資料表取代為跨區域備份複本，以達到相對較寬鬆的復原點目標，和復原時間點目標需求。若您不需要快速的本機存取和五個九的高可用性，維護全域資料表複本可能不是容錯移轉的最佳方法。

或者，請考慮使用 AWS Backup 來管理 DynamoDB 備份。與使用全域資料表相比，您可以排程定期備份並跨區域複製備份，以更符合成本效益的方式滿足 DR 需求。