

適用於 Xamarin 的 AWS Mobile SDK 現在已包含在 中 適用於 .NET 的 AWS SDK。本指南參考 Mobile SDK for Xamarin 的封存版本。

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

# Amazon DynamoDB
<a name="dynamodb"></a>

## 什麼是 Amazon DynamoDB？
<a name="what-is-amazon-dynamodb"></a>

 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 是一種快速、高度可擴展的非關聯式資料庫服務。DynamoDB 會移除資料儲存體的傳統可擴展性限制，同時維持低延遲和可預測的效能。

## 重要概念
<a name="key-concepts"></a>

DynamoDB 資料模型概念包括資料表、項目和屬性。

### 表格
<a name="tables"></a>

在 Amazon DynamoDB 中，資料庫是資料表的集合。資料表是項目的集合，而每個項目都是屬性的集合。

在關聯式資料庫中，資料表具有預先定義的結構描述，例如資料表名稱、主索引鍵、資料欄名稱清單及其資料類型。存放在資料表中的所有記錄都必須有相同的資料欄集。相反地，DynamoDB 只需要資料表具有主索引鍵，但不需要您事先定義所有屬性名稱和資料類型。

若要進一步了解使用資料表，請參閱[在 DynamoDB 中使用資料表](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html)。

### 項目和屬性
<a name="items-and-attributes"></a>

DynamoDB 資料表中的個別項目可以有任意數量的屬性，但項目大小限制為 400 KB。項目大小是其屬性名稱和值 （二進位和 UTF-8 長度） 的長度總和。

項目中的每個屬性都是名稱/值對。屬性可以是單一值或多值集。例如，書籍項目可以有標題和作者屬性。每本書都有一個標題，但可以有許多作者。多值屬性是集合；不允許重複值。

例如，請考慮在 DynamoDB 中存放產品目錄。您可以建立資料表 ProductCatalog，並以 ID 屬性做為其主索引鍵。主索引鍵可唯一識別每個項目，因此資料表中沒有任何兩個產品可以具有相同的 ID。

若要進一步了解使用項目，請參閱[在 DynamoDB 中使用項目](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html)。

### 資料類型
<a name="data-types"></a>

Amazon DynamoDB 支援下列資料類型：
+  **純量類型** – 數字、字串、二進位、布林值和 Null。
+  **多值類型** – 字串集、數字集和二進位集。
+  **文件類型** – 清單和映射。

如需純量資料類型、多值資料類型和文件資料類型的詳細資訊，請參閱 [DynamoDB 資料類型](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataModel.html#DataModel.DataTypes)。

### 主索引鍵
<a name="primary-key"></a>

當您建立資料表時，除了資料表名稱，您還必須指定資料表的主索引鍵。主索引鍵可唯一識別資料表中的每個項目，因此兩個項目不能具有相同的索引鍵。DynamoDB 支援下列兩種主要金鑰類型：
+  **雜湊索引鍵**：主索引鍵是由一個屬性組成，即雜湊屬性。DynamoDB 會在此主索引鍵屬性上建置未排序的雜湊索引。資料表中的每個項目都由其雜湊索引鍵值唯一識別。
+  **雜湊和範圍索引鍵**：主索引鍵由兩個屬性組成。第一個屬性是雜湊屬性，第二個屬性是範圍屬性。DynamoDB 在雜湊主索引鍵屬性上建置未排序的雜湊索引，並在範圍主索引鍵屬性上建置排序範圍索引。資料表中的每個項目都是由其雜湊和範圍索引鍵值組合所唯一識別。兩個項目可能具有相同的雜湊索引鍵值，但這兩個項目必須具有不同的範圍索引鍵值。

### 次要索引
<a name="secondary-indexes"></a>

當您使用雜湊和範圍索引鍵建立資料表時，您可以選擇在該資料表上定義一或多個次要索引。次要索引可讓您在除了使用主索引鍵查詢外，也可使用備用索引鍵查詢資料表中的資料。

DynamoDB 支援兩種類型的次要索引：本機次要索引和全域次要索引。
+  **本機次要索引**：與資料表具有相同雜湊索引鍵，但範圍索引鍵不同的索引。
+  **全域次要索引**：具有雜湊和範圍索引鍵的索引，可能與資料表上的索引鍵不同。

每個資料表最多可定義 5 個全域次要索引和 5 個本機次要索引。如需詳細資訊，請參閱[DynamoDB 開發人員指南》中的改善 DynamoDB 中次要索引的資料存取](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html)。 DynamoDB 

### 查詢和掃描
<a name="query-and-scan"></a>

除了使用主索引鍵存取項目之外，Amazon DynamoDB 還提供兩個 APIs來搜尋資料：查詢和掃描。我們建議您閱讀 DynamoDB 開發人員指南中的[查詢和掃描準則](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScanGuidelines.html)，以熟悉一些最佳實務。

#### Query
<a name="query"></a>

查詢操作只會使用主索引鍵屬性值，在資料表或次要索引中尋找項目。您必須提供雜湊索引鍵屬性名稱和要搜尋的不同值。您可以選擇性地提供範圍索引鍵屬性名稱和值，並使用比較運算子來精簡搜尋結果。

如需範例查詢，請參閱：
+  [使用文件模型](dynamodb-integration-docmodel.md) 
+  [使用物件持久性模型](dynamodb-integration-objectpersistencemodel.md) 
+  [使用 DynamoDB 服務層級 APIs](dynamodb-integration-lowlevelapi.md) 

如需查詢的詳細資訊，請參閱《DynamoDB 開發人員指南》中的[查詢](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan.Query)。

#### Scan
<a name="scan"></a>

掃描操作會讀取資料表或次要索引中的每個項目。根據預設，掃描操作會傳回資料表或索引中每個項目的所有資料屬性。您可以使用 ProjectionExpression 參數，讓掃描只傳回一些屬性，而不是所有屬性。

如需範例掃描，請參閱：
+  [使用文件模型](dynamodb-integration-docmodel.md) 
+  [使用物件持久性模型](dynamodb-integration-objectpersistencemodel.md) 
+  [使用 DynamoDB 服務層級 APIs](dynamodb-integration-lowlevelapi.md) 

如需掃描的詳細資訊，請參閱《DynamoDB 開發人員指南》中的[掃描](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#QueryAndScan.Scan)。

## 專案設定
<a name="project-setup"></a>

### 先決條件
<a name="prerequisites"></a>

若要在應用程式中使用 DynamoDB，您需要將 SDK 新增至專案。若要這樣做，請遵循[設定適用於 .NET 和 Xamarin 的 AWS Mobile SDK](setup.md) 中的指示。

### 建立 DynamoDB 資料表
<a name="create-a-dynamodb-table"></a>

若要建立資料表，請前往 [DynamoDB 主控台](https://console.aws.amazon.com/dynamodb/home)並遵循下列步驟：

1. 按一下 **Create Table (建立資料表)**。

1. 輸入資料表的名稱。

1. 選取**雜湊**做為主索引鍵類型。

1. 選取類型，然後輸入雜湊屬性名稱的值。按一下 **Continue (繼續)**。

1. 在**新增索引**頁面上，如果您計劃使用全域次要索引，請將**索引類型**設定為「全域次要索引」，然後在**索引雜湊索引鍵**下，輸入次要索引的值。這可讓您同時使用主要索引和次要索引來查詢和掃描。按一下**將索引新增至資料表**，然後按一下**繼續**。若要略過使用全域次要索引，請按一下**繼續**。

1. 將讀取和寫入容量設定為所需的層級。如需設定容量的詳細資訊，請參閱 [Amazon DynamoDB 中的佈建輸送量](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html)。按一下 **Continue (繼續)**。

1. 在下一個畫面上，視需要輸入通知電子郵件以建立輸送量警示。按一下 **Continue (繼續)**。

1. 在摘要頁面上，按一下**建立**。DynamoDB 將建立您的資料庫。

### 設定 DynamoDB 的許可
<a name="set-permissions-for-dynamodb"></a>

若要在應用程式中使用 DynamoDB，您必須設定正確的許可。下列 IAM 政策允許使用者刪除、取得、放置、查詢、掃描和更新特定 DynamoDB 資料表中的項目，該資料表由 [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) 識別：

```
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
      ],
      "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable"
    }
  ]
}
```

您可以在 [IAM 主控台](https://console.aws.amazon.com/iam/)中修改政策。您應該根據應用程式的需求新增或移除允許的動作。

若要進一步了解 IAM 政策，請參閱[使用 IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html)。

若要進一步了解 DynamoDB 特定政策，請參閱[DynamoDB 開發人員指南》中的使用 IAM 控制對 DynamoDB 資源的存取](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/UsingIAMWithDDB.html)。 DynamoDB 

## 將 DynamoDB 與您的應用程式整合
<a name="integrating-dynamodb-with-your-application"></a>

適用於 .NET 和 Xamarin 的 AWS Mobile SDK 提供高階程式庫，可用於 DynamoDB。您也可以直接對低階 DynamoDB API 提出請求，但對於大多數使用案例，建議使用高階程式庫。AmazonDynamoDBClient 是高階程式庫中特別實用的部分。使用此類別，您可以執行各種建立、讀取、更新和刪除 (CRUD) 操作，以及執行查詢。

適用於 .NET 和 Xamarin 的 AWS Mobile SDK 可讓您使用適用於 .NET 的 AWS 開發套件中的 APIs 進行呼叫，以使用 DynamoDB。所有 APIs都可在 AWSSDK.dll 中使用。如需下載適用於 .NET 的 AWS 開發套件的詳細資訊，請參閱[適用於 .NET 的 AWS 開發套件](https://aws.amazon.com/sdk-for-net/)。

您可以透過三種方式在 Xamarin 應用程式中與 DynamoDB 互動：
+  **文件模型**：此 API 提供低階 DyanmoDB API 的包裝函式類別，以進一步簡化您的程式設計任務。資料表和文件是金鑰包裝函式類別。您可以使用 文件模型進行資料操作，例如建立、擷取、更新和刪除項目。API 可在 Amazon.DynamoDB.DocumentModel 命名空間中使用。
+  **物件持久性模型**：物件持久性 API 可讓您將用戶端類別映射至 DynamoDB 資料表。然後每個物件執行個體會映射至相對應資料表中的某個項目。此 API 中的 DynamoDBContext 類別提供方法，可讓您將用戶端物件儲存到資料表、將項目擷取為物件，以及執行查詢和掃描。您可以使用物件持久性模型進行資料操作，例如建立、擷取、更新和刪除項目。您必須先使用服務用戶端 API 建立資料表，然後使用物件持久性模型將類別映射至資料表。API 可在 Amazon.DynamoDB.DataModel 命名空間中使用。
+  **服務用戶端 API**：這是通訊協定層級 API，密切對應至 DynamoDB API。您可以將此低階 API 用於所有資料表和項目操作，例如建立、更新、刪除資料表和項目。您也可以查詢和掃描資料表。此 API 可在 Amazon.DynamoDB 命名空間中使用。

這三個模型會在下列主題中深入探索：

**Topics**