

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

# DynamoDB 本機版使用須知
<a name="DynamoDBLocal.UsageNotes"></a>

 除端點外，使用可下載版 Amazon DynamoDB 執行的應用程式，也應該能使用 DynamoDB Web 服務。但是在本機使用 DynamoDB 時，您應該清楚下列事項：
+  如果您使用 `-sharedDb` 選項，DynamoDB 會建立單一資料庫檔案，名為 *shared-local-instance.db*。連線至 DynamoDB 的每個程式都能存取此檔案。如果您刪除此檔案，就會遺失所有存放在其中的資料。
+  如果您省略 `-sharedDb`，則資料庫檔案會命名為 *myaccesskeyid\$1region.db*，其 AWS 存取金鑰 ID 和 AWS 區域會顯示在您的應用程式組態中。如果您刪除此檔案，就會遺失所有存放在其中的資料。
+  如果您使用 `-inMemory` 選項，DynamoDB 完全不會寫入任何資料庫檔案。相反地，所有資料都會寫入記憶體，並且在您終止 DynamoDB 時不儲存資料。
+  如果您使用 `-inMemory` 選項，則也必須使用 `-sharedDb` 選項。
+  如果您使用 `-optimizeDbBeforeStartup` 選項，就必須也指定 `-dbPath` 參數，以便 DynamoDB 能找到它的資料庫檔案。
+  DynamoDB AWS SDKs 需要您的應用程式組態指定存取金鑰值和 AWS 區域值。除非您使用的是 `-sharedDb` 或 `-inMemory` 選項，否則 DynamoDB 會使用這些數值來命名本機資料庫檔案。這些值不必是可在本機執行的有效 AWS 值。不過，您可能會發現使用有效的值很方便，因為稍後只要變更您使用的端點，就可以在雲端執行程式碼。
+  DynamoDB 本機版一律對 `billingModeSummary.` 傳回 Null 
+  DynamoDB 本機版 `AWS_ACCESS_KEY_ID` 只能包含字母 (A–Z、a–z) 和數字 (0–9)。
+ DynamoDB 本機版不支援[時間點復原 (PITR)](Point-in-time-recovery.md)。

**Topics**
+ [命令列選項](#DynamoDBLocal.CommandLineOptions)
+ [設定區域端點](#DynamoDBLocal.Endpoint)
+ [可下載版 DynamoDB 和 DynamoDB Web 服務之間的差異](#DynamoDBLocal.Differences)

## 命令列選項
<a name="DynamoDBLocal.CommandLineOptions"></a>

 您可以使用下列命令列選項搭配可下載版 DynamoDB 使用：
+  `-cors``value`：啟用 JavaScript 跨來源資源共用 (CORS) 支援。您必須提供逗號分隔的特定網域「允許」清單。`-cors` 的預設設定是星號 (\$1)，意為允許公開存取。
+  `-dbPath` `value`：DynamoDB 寫入其資料庫檔案的目錄。如果您不指定此選項，檔案會寫入目前的目錄。您不能同時指定 `-dbPath` 和 `-inMemory`。
+  `-delayTransientStatuses`：導致 DynamoDB 對部分操作造成延遲。DynamoDB (可下載版本) 幾乎可以立即執行部分任務，例如在資料表和索引上建立/更新/刪除操作。但是，DynamoDB 服務需要較多時間處理這些任務。設定此參數有助於在您電腦上執行的 DynamoDB 將 DynamoDB Web 服務的行為模擬得更逼真。(此參數目前只會造成 *CREATING* 或 *DELETING* 狀態的全域次要索引延遲)。
+  `-help`：列印用量摘要及選項。
+  `-inMemory`：DynamoDB 在記憶體中執行，而非使用資料庫檔案。當您停止 DynamoDB 時，不會儲存任何資料。您不能同時指定 `-dbPath` 和 `-inMemory`。
+  `-optimizeDbBeforeStartup`：先最佳化基礎資料庫資料表，再啟動您電腦上的 DynamoDB。當您使用此參數時，也必須指定 `-dbPath`。
+  `-port` `value`：DynamoDB 用來與您的應用程式進行通訊的連接埠號碼。如果您不指定此選項，預設連接埠為 `8000`。
**注意**  
 DynamoDB 預設使用連接埠 8000。如果無法使用連接埠 8000，此命令就會擲出例外狀況。您可以使用 `-port` 選項來指定不同的連接埠號碼。如需完整的 DynamoDB 執行時期選項清單 (包括 `-port`)，請輸入此命令：  
 `java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -help` 
+  `-sharedDb`：若您指定 `-sharedDb`，則 DynamoDB 會使用單一資料庫檔案，而非為每個憑證和區域使用不同的檔案。
+  `-disableTelemetry`：指定時，DynamoDB 本機版將不會傳送任何遙測資料。
+ `-version` – 列印 DynamoDB 本機版的版本。

## 設定區域端點
<a name="DynamoDBLocal.Endpoint"></a>

 根據預設， AWS SDKs 和工具會使用 Amazon DynamoDB Web 服務的端點。若要使用開發套件和工具搭配可下載版 DynamoDB，您必須指定區域端點：

 `http://localhost:8000` 

### AWS Command Line Interface
<a name="DynamoDBLocal.Endpoint.CLI"></a>

 您可以使用 AWS Command Line Interface (AWS CLI) 與可下載的 DynamoDB 互動。

 若要存取在本機執行的 DynamoDB，請使用 `--endpoint-url` 參數。以下是使用 AWS CLI 列出您電腦上 DynamoDB 中資料表的範例。

```
aws dynamodb list-tables --endpoint-url http://localhost:8000
```

**注意**  
 AWS CLI 無法使用可下載的 DynamoDB 版本做為預設端點。因此，您必須`--endpoint-url`使用每個 AWS CLI 命令來指定 。

### AWS SDKs
<a name="DynamoDBLocal.Endpoint.SDK"></a>

 您指定端點的方式，視您使用的程式設計語言和 AWS 軟體開發套件而定。下列各節說明如何執行此作業：
+  [Java：設定 AWS 區域和端點](CodeSamples.Java.md#CodeSamples.Java.RegionAndEndpoint) (DynamoDB 本機支援適用於 Java V1 和 V2 的 AWS SDK) 
+ CodeSamples.Java.RegionAndEndpoint [.NET：設定 AWS 區域和端點](CodeSamples.DotNet.md#CodeSamples.DotNet.RegionAndEndpoint) 

## 可下載版 DynamoDB 和 DynamoDB Web 服務之間的差異
<a name="DynamoDBLocal.Differences"></a>

 可下載版 DynamoDB 僅用於開發和測試。相較之下，DynamoDB Web 服務則是受管服務，具可擴展性、可用性及耐用性的特色，因此適用於生產。

 可下載版 DynamoDB 和 Web 服務之間的差異如下：
+ AWS 區域 用戶端層級 AWS 帳戶 不支援 和 distinct。
+  可下載版 DynamoDB 會忽略佈建輸送量設定，即使 `CreateTable` 操作需要它們。您可為 `CreateTable` 指定任何您想要的佈建讀取和寫入輸送量數字，即使這些數字不予使用。您可以每天呼叫 `UpdateTable`，次數不限。但是會忽略任何佈建輸送量值的變更。
+  `Scan` 操作以循序方式執行。不支援平行掃描。忽略 `Segment` 操作的 `TotalSegments` 與 `Scan` 參數。
+  資料表資料的讀取和寫入操作速度只受限於您電腦的速度。`CreateTable`、`UpdateTable`​ 和 `DeleteTable` 操作會立即發生，且資料表狀態一律為 ACTIVE。只變更資料表或全域次要索引之佈建輸送量設定的 `UpdateTable`​ 操作會立即發生。如果 `UpdateTable` 操作建立或刪除任何全域次要索引，則這些索引會先轉換到一般狀態 (例如分別為 CREATING 和 DELETING)，再變成 ACTIVE 狀態。資料表在這段時間內仍維持 ACTIVE。
+  讀取操做為最終一致。但是，由於您電腦上執行的 DynamoDB 本機版速度的緣故，大部分的讀取會是高度一致。
+  不會追蹤項目集合指標和項目集合大小。操作回應中會傳回 Null，而不是項目集合指標。
+  在 DynamoDB 中，每個結果集傳回的資料有 1 MB 的限制。DynamoDB Web 服務和可下載版本都會執行此限制。但在查詢索引時，DynamoDB 服務只會計算投影索引鍵和屬性的大小。反之，可下載版 DynamoDB 會計算整個項目的大小。
+  如果您使用的是 DynamoDB Streams，建立碎片的速率可能不同。在 DynamoDB Web 服務中，碎片建立行為有部分會受到資料表分割區活動的影響。當您在本機執行 DynamoDB 時，不會分割資料表。無論哪一種情況，碎片都只是暫時存在，所以您的應用程式不應該依賴碎片行為。
+  可下載 DynamoDB 版本不會對交易 API 丟出 `TransactionConflictExceptions`。建議您使用 Java 模擬架構，在 DynamoDB 處理常式中模擬 `TransactionConflictExceptions`，以測試您的應用程式如何回應相衝突的交易。
+  在 DynamoDB Web 服務中，無論是透過主控台或 存取 AWS CLI，資料表名稱都會區分大小寫。名為 `Authors` 和名為 `authors` 的資料表可同時存在，視為不同的資料表。在可下載的版本中，資料表名稱不區分大小寫，因為嘗試建立這樣的兩份資料表會造成錯誤。
+ DynamoDB 的可下載版本不支援標記。
+ 可下載的 DynamoDB 版本會忽略 [ExecuteStatement](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html) 中的 [Limit](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ExecuteStatement.html#DDB-ExecuteStatement-request-Limit) 參數。