DynamoDB local 使用说明
除了端点之外,使用 Amazon DynamoDB 可下载版本运行的应用程序还应能使用 DynamoDB Web 服务运行。但是,在本地使用 DynamoDB 时,您应了解以下事项:
-
如果您使用
-sharedDb
选项,则 DynamoDB 将创建一个名为 shared-local-instance.db 的数据库文件。连接到 DynamoDB 的每个程序都将访问此文件。如果删除此文件,则将丢失存储在此文件中的所有数据。 -
如果省略
-sharedDb
,则数据库文件出现在应用程序配置中时,将命名为 myaccesskeyid_region.db(包含 Amazon 访问密钥 ID 和 Amazon 区域)。如果删除此文件,则将丢失存储在此文件中的所有数据。 -
如果使用
-inMemory
选项,则 DynamoDB 完全不会编写任何数据库文件。相反,所有数据将被写入内存中,并且在您终止 DynamoDB 时不会保存这些数据。 -
如果您使用
-inMemory
选项,则-sharedDb
选项也是必需的。 -
如果使用
-optimizeDbBeforeStartup
选项,则还必须指定-dbPath
参数,以便 DynamoDB 可找到其数据库文件。 -
Amazon SDK for DynamoDB 要求您的应用程序配置指定访问密钥值和 Amazon 区域值。除非您使用的是
-sharedDb
或-inMemory
选项,否则 DynamoDB 将使用这些值来命名本地数据库文件。这些值不必是有效的 Amazon 值也能在本地运行。但是,您可能发现使用有效值非常方便,因为您以后可通过更改当前使用的端点来在云中运行您的代码。 -
DynamoDB local 始终为
billingModeSummary.
返回 null。 -
DynamoDB local
AWS_ACCESS_KEY_ID
只能包含字母(A–Z,a–z)和数字 (0–9)。 -
DynamoDB Local 不支持时间点故障恢复(PITR)。
命令行选项
您可将下列命令行选项用于 DynamoDB 的下载版本:
-
-cors
value
— 实现对适用于 JavaScript 的跨源资源共享 (CORS) 的支持。您必须提供特定域的逗号分隔“允许”列表。-cors
的默认设置是星号 (*),这将允许公开访问。 -
-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 的版本。
设置本地端点
默认情况下,Amazon SDK 和工具使用 Amazon DynamoDB Web 服务的端点。要将 SDK 和工具用于 DynamoDB 下载版本,您必须指定本地端点:
http://localhost:8000
Amazon Command Line Interface
您可使用 Amazon Command Line Interface (Amazon CLI) 与可下载的 DynamoDB 交互。
要访问本地运行的 DynamoDB,请使用 --endpoint-url
参数。以下是使用 Amazon CLI 列出计算机上的 DynamoDB 中的表的示例。
aws dynamodb list-tables
--endpoint-url http://localhost:8000
注意
Amazon CLI 不能使用 DynamoDB 的可下载版本作为默认端点。因此,您必须对每个Amazon CLI 命令指定 --endpoint-url
。
Amazon SDK
指定端点的方法取决于要使用的编程语言和 Amazon SDK。下面几节介绍如何执行此操作:
-
Java:设置 Amazon 区域和端点(DynamoDB local 支持适用于 Java 的 Amazon SDK V1 和 V2)
-
CodeSamples.Java.RegionAndEndpoint .NET:设置 Amazon 区域和端点
可下载的 DynamoDB 和 DynamoDB Web 服务之间的差异
DynamoDB 下载版本仅适合用于开发和测试。相比而言,DynamoDB Web 服务是一项具备可扩展性、可用性和持久性特点的托管服务,非常适合在生产中使用。
DynamoDB 下载版本与该 Web 服务的差别如下:
-
在客户端层面上不支持 Amazon Web Services 区域和不同的 Amazon Web Services 账户。
-
可下载的 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 服务中,无论是通过控制台还是 Amazon CLI 进行访问,表名称都区分大小写。名为
Authors
和名为authors
的表可同时作为不同的表存在。在可下载的版本中,表名称不区分大小写,尝试创建这两个表将导致错误。 -
DynamoDB 的可下载版本不支持标记。
-
DynamoDB 的可下载版本会忽略 ExecuteStatement 中的 Limit 参数。