

# DynamoDB local 使用说明
<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 可找到其数据库文件。
+  AWS SDK for DynamoDB 要求您的应用程序配置指定访问密钥值和 AWS 区域值。除非您使用的是 `-sharedDb` 或 `-inMemory` 选项，否则 DynamoDB 将使用这些值来命名本地数据库文件。这些值不必是有效的 AWS 值也能在本地运行。但是，您可能发现使用有效值非常方便，因为您以后可通过更改当前使用的端点来在云中运行您的代码。
+  DynamoDB local 始终为 `billingModeSummary.` 返回 null。
+  DynamoDB local `AWS_ACCESS_KEY_ID` 只能包含字母（A–Z，a–z）和数字 (0–9)。
+ DynamoDB Local 不支持[时间点故障恢复（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 local 将不发送任何遥测信息。
+ `-version` — 显示 DynamoDB local 的版本。

## 设置本地端点
<a name="DynamoDBLocal.Endpoint"></a>

 默认情况下，AWS SDK 和工具使用 Amazon DynamoDB Web 服务的端点。要将 SDK 和工具用于 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 SDK
<a name="DynamoDBLocal.Endpoint.SDK"></a>

 指定端点的方法取决于要使用的编程语言和 AWS SDK。下面几节介绍如何执行此操作：
+  [Java：设置 AWS 区域和端点](CodeSamples.Java.md#CodeSamples.Java.RegionAndEndpoint)（DynamoDB local 支持适用于 Java 的 AWS SDK V1 和 V2） 
+ 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 账户。
+  可下载的 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) 参数。