

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

# 在 DynamoDB 中儲存大型項目與屬性的最佳實務
<a name="bp-use-s3-too"></a>

Amazon DynamoDB 限制您在資料表中儲存的每個項目大小為 400 KB (請參閱 [項目大小](Constraints.md#limits-items-size))。若您的應用程式需要在項目中存放比 DynamoDB 大小限制所允許大小更多的資料，您可以嘗試壓縮一或多個大型屬性，或將項目分成多個項目 (即以排序索引鍵編製索引)。您也可以將項目作為物件存放在 Amazon Simple Storage Service (Amazon S3) 中，接著在您的 DynamoDB 項目中存放 Amazon S3 物件的識別符。

根據最佳實務，撰寫項目時應使用 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/model/ReturnConsumedCapacity.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/model/ReturnConsumedCapacity.html) 參數，以監控並警示項目大小是否接近 400 KB 上限。若超出項目大小上限，寫入作業將會失敗。DynamoDB 將回傳 [ValidationException 錯誤](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.Errors.html)。透過監控與警示項目大小，您可在問題影響應用程式前先行防範。

## 壓縮大型屬性值
<a name="bp-use-s3-too-or-compress"></a>

壓縮大型屬性值可以讓它們符合 DynamoDB 中的項目限制，並減少您的儲存成本。壓縮演算法 (如 GZIP 或 LZO) 會產生二進位輸出，可儲存在項目中的 `Binary` 屬性類型中。

例如，可考慮一個儲存論壇使用者訊息的資料表。這類訊息通常包含長文字字串，適合作為壓縮對象。雖然壓縮可減少項目大小，但壓縮後的屬性值無法用於篩選。

如需示範如何在 DynamoDB 中壓縮這類訊息的範本程式碼，請參閱以下內容：
+ [範例：使用 適用於 Java 的 AWS SDK 文件 API 處理二進位類型屬性](JavaDocumentAPIBinaryTypeExample.md)
+ [範例：使用 適用於 .NET 的 AWS SDK 低階 API 處理二進位類型屬性](LowLevelDotNetBinaryTypeExample.md)

## 垂直分割
<a name="bp-use-s3-too-vertical-partitioning"></a>

處理大型項目的另一種方法是將其拆分為較小的資料區塊，並依分割區索引鍵值將所有相關項目建立關聯。接著，您可以使用排序索引鍵字串來識別與之相關的儲存資訊。透過此作法，將多個項目依相同的分割區索引鍵值分組時，您便建立了[*項目集合*](WorkingWithItemCollections.md)。

如需此方法的詳細資訊，請參閱：
+ [使用垂直分割在 Amazon DynamoDB 中有效率地擴展資料](https://aws.amazon.com/blogs/database/use-vertical-partitioning-to-scale-data-efficiently-in-amazon-dynamodb/) 
+ [使用 在 Amazon DynamoDB 中實作垂直分割 AWS Glue](https://aws.amazon.com/blogs/database/implement-vertical-partitioning-in-amazon-dynamodb-using-aws-glue/) 

## 在 Amazon S3 中存放大型屬性值
<a name="bp-use-s3-too-large-values"></a>

如先前所述，您可以使用 Amazon S3 來存放在 DynamoDB 項目中不符合的大型屬性值。您可以將它們作為物件存放在 Amazon S3 中，接著在您的 DynamoDB 項目中存放物件的識別符。

您也可以使用 Amazon S3 中的物件中繼資料支援，將連結提供回 DynamoDB 中的父項目。在 Amazon S3 中以物件 Amazon S3 中繼資料的形式存放項目的主索引鍵值。此通常可協助維護 Amazon S3 物件。

例如，請參考 `ProductCatalog` 資料表。此資料表中的項目會存放項目價格、描述、書籍作者和其他產品維度的資訊。如果您希望存放的每個產品影像太大而無法在項目中容納，您可以將影像存放在 Amazon S3 而不是在 DynamoDB 中。

實作此策略時，請注意下列各項：
+ DynamoDB 不支援跨 Amazon S3 和 DynamoDB 的交易。因此，應用程式能必須處理任何錯誤，其可能會包含清理遺棄的 Amazon S3 物件。
+ Amazon S3 會限制物件識別碼的長度。因此，您必須以不會產生過長物件識別碼或違反其他 Amazon S3 限制的方法來整理您的資料。

有關如何使用 Amazon S3 的詳細資訊，請參閱《[Amazon Simple Storage Service 使用者指南](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)》。