Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

概念

DAX 可在 Amazon Virtual Private Cloud 环境 (Amazon VPC) 中运行。Amazon VPC 服务定义了一个与传统数据中心非常相似的虚拟网络。利用 Amazon VPC,您可以控制该网络的 IP 地址范围、子网、路由表、网络网关和安全设置。您可在虚拟网络中启动一个 DAX 集群,并可使用 Amazon VPC 安全组控制对该集群的访问。

注意

如果您的 AWS 账户是在 2013-12-04 之后创建的,则您在每个 AWS 区域中都已经有一个默认 VPC。一个默认 VPC 已经可供您使用 - 您可立即开始使用默认 VPC 而无需执行任何额外配置步骤。

有关更多信息,请参阅 Amazon VPC 用户指南 中的您的默认 VPC 和子网

下图显示了 DAX 的高级概述:

要创建 DAX 集群,请使用 AWS 管理控制台。除非您另行指定,否则您的 DAX 集群将在您的默认 VPC 内运行。

要运行您的应用程序,请在 Amazon VPC 内启动一个 Amazon EC2 实例,然后在该 EC2 实例上部署您的应用程序 (使用 DAX 客户端)。在运行时,DAX 客户端会将您的应用程序的所有 DynamoDB API 请求定向到 DAX 集群。如果 DAX 可直接处理这些 API 请求之一,它会这样做;否则,它会将请求传递到 DynamoDB。最后,DAX 集群会将结果返回到您的应用程序。

DAX 处理请求的方式

DAX 集群由一个或多个节点组成。每个节点运行其自己的 DAX 缓存软件实例。其中一个节点将充当集群的主节点。额外节点 (如果有) 将充当只读副本。有关更多信息,请参阅 节点

您的应用程序可通过为 DAX 集群指定终端节点来访问 DAX。DAX 客户端软件将与集群终端节点一起运行来执行智能负载均衡和路由,以便跨集群中的所有节点均匀地分发传入请求。

读取操作

DAX 可响应以下 API 调用:

  • GetItem

  • BatchGetItem

  • Query

  • Scan

如果请求指定了最终一致性读取 (默认行为),它将尝试从 DAX 读取项目:

  • 如果 DAX 有可用项目 (缓存命中),DAX 会将项目返回到应用程序而无需访问 DynamoDB。

  • 如果 DAX 没有可用项目 (缓存未命中),DAX 会将请求传递到 DynamoDB。当收到来自 DynamoDB 的响应时,DAX 会将结果返回到应用程序 - 并且它还会将结果写入带主节点上的缓存。

注意

如果集群中有任何只读副本,DAX 将自动让该副本与主节点保持同步。有关更多信息,请参阅 集群

如果请求指定了强一致性读取,DAX 会将请求传递到 DynamoDB。来自 DynamoDB 的结果不会缓存在 DAX 中,相反,它们将返回到应用程序。

写入操作

以下 DAX API 操作被视为“直写”:

  • BatchWriteItem

  • UpdateItem

  • DeleteItem

  • PutItem

采用这些操作后,数据将首先写入到 DynamoDB 表,然后写入到 DAX 集群。仅当数据同时 成功写入到表和 DAX 时,操作才会成功。

其他操作

DAX 无法识别用于管理表的任何 DynamoDB 操作 (如 CreateTableUpdateTable 等)。如果您的应用程序需要执行这些操作,它需要直接访问 DynamoDB 而不是使用 DAX 来访问。

项目缓存

DAX 将保留一个项目缓存 以存储来自 GetItemBatchGetItem 操作的结果。缓存中的项目表示来自 DynamoDB 的最终一致性数据,并且由其主键值存储。

当某个应用程序发送了一条 GetItemBatchGetItem 请求时,DAX 将尝试使用指定键值直接从项目缓存读取项目。如果找到了项目 (缓存命中),DAX 会将它们立即返回到应用程序。如果未找到项目 (缓存未命中),DAX 会将请求发送到 DynamoDB。DynamoDB 将使用最终一致性读取处理请求,然后将项目返回到 DAX。DAX 会将项目存储在项目缓存中,然后将它们返回到应用程序。

项目缓存具有生存时间 (TTL) 设置,默认情况下为 5 分钟。DAX 将向其写入到项目缓存的每个项目分配时间戳。如果某个项目在缓存中保留的时间超出 TTL 设置,则会过期。如果您针对已过期项目发出 GetItem 请求,这将被视为缓存未命中,因此 DAX 会将 GetItem 请求发送到 DynamoDB。

注意

在创建新的 DAX 集群时,您可为项目缓存指定 TTL 设置。有关更多信息,请参阅 管理 DAX 集群。)

DAX 还将保留项目缓存的最近最少使用的列表 (LRU)。LRU 列表将跟踪项目首次写入到缓存的时间以及上次从缓存读取项目的时间。如果项目缓存已满,DAX 将移出旧项目 (即使它们尚未过期) 来为新项目腾出空间。将始终为项目缓存启用 LRU 算法,但用户无法配置该算法。

查询缓存

DAX 还将保留一个查询缓存 以存储来自 QueryScan 操作的结果。此缓存中的项目表示来自对 DynamoDB 表的查询和扫描的结果集。这些结果集由其参数值存储。

当某个应用程序发送了一条 QueryScan 请求时,DAX 将尝试使用指定参数值从查询缓存读取匹配的结果集。如果找到结果集 (缓存命中),DAX 会将结果集立即返回到应用程序。如果未找到结果集 (缓存未命中),DAX 会将请求发送到 DynamoDB。DynamoDB 将使用最终一致性读取处理请求并将结果集返回到 DAX。DAX 会将结果集存储在项目缓存中,然后将它返回到应用程序。

注意

在创建新的 DAX 集群时,您可为查询缓存指定 TTL 设置。有关更多信息,请参阅 管理 DAX 集群。)

DAX 还将保留查询缓存的最近最少使用的列表 (LRU)。LRU 列表将跟踪结果集首次写入到缓存的时间以及上次从缓存读取结果的时间。如果查询缓存已满,DAX 将移出较旧的结果集 (即使它们尚未过期) 来为新结果集腾出空间。将始终为查询缓存启用 LRU 算法,但用户无法配置该算法。