

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

# 使用寫入碎片以在 DynamoDB 資料表中平均分配工作負載
<a name="bp-partition-key-sharding"></a>

在 Amazon DynamoDB 中的分割區索引鍵空間分配寫入的一個好方法是拓展空間。您可以數種不同的方式來執行此動作：您可以在分割區索引鍵值中新增隨機數字，以便在分割區之間分配項目。或者，您可以使用根據您查詢內容計算的數字。

## 使用隨機尾碼的碎片
<a name="bp-partition-key-sharding-random"></a>

要在分割區索引鍵空間中更平均地分佈負載的方法，即是在分割區索引鍵值的結尾新增一個亂數。如此您就能在較大的空間中將寫入隨機化。

例如，對於代表今天日期的分割區索引鍵，您可以選擇 `1` 到 `200` 間的一個亂數，並將其串連到日期做為尾碼。這會產生分割區索引鍵值，例如 `2014-07-09.1`、`2014-07-09.2`... 到 `2014-07-09.200`。因為您隨機化了分割區索引鍵，每天對資料表的寫入會平均分配在多個分割區中。這可帶來更優良的平行處理與更高的整體輸送量。

然而，若要讀取指定日期的所有項目，您需要查詢所有尾碼的項目，接著合併結果。例如，您會先對分割區索引鍵值 `2014-07-09.1` 發出 `Query` 請求。再對 `2014-07-09.2` 發出另一個 `Query`，依此類推直到 `2014-07-09.200`。最後，您的應用程式需要合併所有該等 `Query` 請求的結果。

## 使用計算尾碼的碎片
<a name="bp-partition-key-sharding-calculated"></a>

隨機化的策略可大幅改善寫入輸送量。由於您不知道寫入項目時所使用的尾碼值，因此很難讀取特定項目。若要讓讀取個別項目變得比較容易，您可以使用不同的策略。不使用亂數以在分割區中分佈項目，而是使用您可以計算的數字 (根據您想要查詢之項目)。

考量先前的範例，其中資料表會使用分割區索引鍵中的今天日期。現在假設每個項目有可存取的 `OrderId` 屬性，且您經常需要依訂單 ID (除了日期) 來尋找項目。在您的應用程式將項目寫入資料表之前，可根據訂單 ID 計算雜湊尾碼並將其附加至分割區索引鍵日期。計算應會產生介於 1 到 200 之間的數字，此分佈非常平均，與隨機策略產生的結果相當類似。

一個簡單的計算便足以說明，例如訂單 ID 中字元之 UTF-8 字碼指標值的乘積：模數 200，\$1 1。分割區索引鍵值會是與計算結果串聯的日期。

有了這項策略，即可在分割區索引鍵值之間，以及實體分割區之間平均分配寫入。您可以輕鬆地對特定項目與日期執行 `GetItem` 操作，因為您可以計算對特定 `OrderId` 值的分割區索引鍵值。

若要讀取指定日期的所有項目，您仍然需要 `Query` 每個 `2014-07-09.N` 索引鍵 (其中 `N` 是 1-200)，而且您的應用程式需要合併所有結果。好處是您能避免讓單一「經常性」分割區索引鍵值承受所有工作負載。

**注意**  
如需為了處理大量時間序列資料而設計的有效策略，請參閱 [時間序列資料](bp-time-series.md)。