

# 什么是 Amazon DynamoDB？
<a name="Introduction"></a>

 Amazon DynamoDB 是一种无服务器、完全托管的分布式 NoSQL 数据库，在任何规模下都能提供个位数毫秒级性能。

 DynamoDB 可满足您的需求，能够消除关系数据库的扩展和操作复杂性。DynamoDB 经过构建和优化，适用于需要在任何规模下保持一致性能的运营工作负载。例如，对于购物车使用案例，无论您有 10 个还是 1 亿用户，DynamoDB 都能提供稳定的个位数毫秒级性能。DynamoDB 于 [2012 年推出](https://press.aboutamazon.com/2012/1/amazon-web-services-launches-amazon-dynamodb-a-new-nosql-database-service-designed-for-the-scale-of-the-internet)，可持续帮助您摆脱关系数据库，同时降低成本并大规模提高性能。

 各种规模、行业和地区的客户都使用 DynamoDB 来构建现代无服务器应用程序，这些应用程序可以从小规模起步，然后在全球范围内扩展。DynamoDB 可扩展以支持几乎任何大小的表，同时提供稳定的个位数毫秒性能和高可用性。

 对于诸如 [Amazon Prime Day](https://aws.amazon.com/blogs/aws/prime-day-2023-powered-by-aws-all-the-numbers/) 之类的活动，DynamoDB 可为多个大流量 Amazon 资产和系统（包括 [Alexa](https://alexa.com/)、[Amazon.com](https://www.amazon.com/) 网站和所有 [Amazon 运营中心](https://www.aboutamazon.com/workplace/facilities)）提供支持。对于此类事件，DynamoDB API 已经处理了来自 Amazon 属性和系统的数万亿次调用。DynamoDB 持续为数百名客户提供服务，这些客户的表的峰值流量超过每秒 50 万个请求。它还为数百个表大小超过 200 TB 的客户提供服务，并且每小时处理超过 10 亿个请求。

**Topics**
+ [DynamoDB 的特性](#ddb-characteristics)
+ [DynamoDB 用例](#ddb-use-cases)
+ [DynamoDB 的功能](#ddb-capabilities)
+ [服务集成](#ddb-service-integrations)
+ [安全性](#ddb-intro-security)
+ [恢复能力](#ddb-intro-resilience)
+ [访问 DynamoDB](#ddb-access)
+ [DynamoDB 定价](#ddb-pricing)
+ [开始使用 DynamoDB](#ddb-intro-get-started)

## DynamoDB 的特性
<a name="ddb-characteristics"></a>

### Serverless
<a name="ddb-characteristics-serverless"></a>

使用 DynamoDB，您无需配置任何服务器，也不需要修补、管理、安装、维护或操作任何软件。DynamoDB 提供零停机维护。它没有版本（主版本、次要版本或补丁版本），也没有维护时段。

DynamoDB 的[按需容量模式](on-demand-capacity-mode.md)针对读取和写入请求提供即用即付定价模式，您只需为使用的资源付费。通过按需提供，DynamoDB 可立即扩展或缩减表以调整容量，并且无需管理即可保持性能。它还可以缩减到零，因此当表没有流量且没有冷启动时，您无需为吞吐量付费。

### NoSQL
<a name="ddb-characteristics-nosql"></a>

作为 NoSQL 数据库，DynamoDB 专为提供比传统关系数据库更高的性能、可扩展性、可管理性和灵活性而设计。为了支持各种用例，DynamoDB 同时支持键值和文档数据模型。

与关系数据库不同，DynamoDB 不支持 JOIN 运算符。建议您对数据模型进行非规范化，以减少数据库往返次数并提高回答查询所需的处理能力。作为 NoSQL 数据库，DynamoDB 提供了强大的[读取一致性](HowItWorks.ReadConsistency.md)和 [ACID 事务](https://aws.amazon.com/blogs/aws/new-amazon-dynamodb-transactions/)，可构建企业级应用程序。

### 完全托管
<a name="ddb-characteristics-fully-managed"></a>

作为一项完全托管的数据库服务，DynamoDB 可以处理管理数据库的无差别繁重工作，使您可以专注于为客户创造更多价值。它负责设置、配置、维护、高可用性、硬件配置、安全、备份、监控等。这将确保在创建 DynamoDB 表时，它可以立即为生产工作负载做好准备。DynamoDB 无需升级或停机即可不断提高其可用性、可靠性、性能、安全性和功能。

### 在任何规模下提供个位数的毫秒级性能
<a name="ddb-characteristics-performance-at-scale"></a>

DynamoDB 专为提高关系数据库的性能和可扩展性而设计，在任何规模下都能提供个位数的毫秒性能。为了实现这种规模和性能，DynamoDB 针对高性能工作负载进行了优化，可提供推动高效使用数据库的 API。它省略了在规模上效率低下且性能不佳的功能，例如 JOIN 操作。无论您有 100 个还是 1 亿用户，DynamoDB 都能为您的应用程序提供稳定的个位数毫秒级性能。

## DynamoDB 用例
<a name="ddb-use-cases"></a>

各种规模、行业和地区的客户都使用 DynamoDB 来构建现代无服务器应用程序，这些应用程序可以从小规模起步，然后在全球范围内扩展。DynamoDB 非常适合需要在任何规模下保持一致性能且运营开销几乎为零的用例。下表列出了一些可以使用 DynamoDB 的用例：
+ **金融服务应用程序** – 假设您是一家金融服务公司，正在构建应用程序，例如实时交易和路由、贷款管理、代币生成和交易账本。借助 DynamoDB [全局表](GlobalTables.md)，您的应用程序可以响应事件并提供来自您选择的 AWS 区域的流量以及快速的本地读写性能。

  DynamoDB 适用于对可用性要求最为严格的应用程序。它消除了手动扩展实例以增加存储或吞吐量、版本控制和许可的操作负担。

  您可以使用 [DynamoDB 事务](transactions.md)通过单个请求来实现一个或多个表的原子性、一致性、隔离性和持久性（ACID）。[（ACID）事务](transaction-apis.md)适合处理金融交易或履行订单等工作负载。DynamoDB 会根据工作负载的增减来即时做出调整，使您能够根据市场条件（例如交易时间）高效地扩展数据库。
+ **游戏应用程序** – 作为一家游戏公司，您可以将 DynamoDB 用于游戏平台的所有部分，例如游戏状态、玩家数据、会话历史记录和排行榜。选择 DynamoDB 是因为它的规模、稳定的性能及其无服务器架构所提供的易操作性。DynamoDB 非常适合支持成功游戏所需的横向扩展架构。它可以快速向内和向外扩展游戏的吞吐量（在没有冷启动的情况下缩减到零）。无论您是针对峰值流量进行横向扩展，还是在游戏使用率低时缩减规模，这种可扩展性都能优化架构的效率。
+ **流媒体应用程序** – 媒体和娱乐公司使用 DynamoDB 作为内容、内容管理服务的元数据索引，或提供近乎实时的体育统计数据。他们还使用 DynamoDB 来运行用户关注列表和书签服务，并处理数十亿个每日客户事件以生成建议。这些客户受益于 DynamoDB 的可扩展性、性能和弹性。DynamoDB 可以根据工作负载的变化进行扩展，从而实现可以支持任何需求水平的流媒体用例。

要详细了解不同行业的客户如何使用 DynamoDB，请参阅 [Amazon DynamoDB 客户](https://aws.amazon.com/dynamodb/customers/)和[这是我的架构](https://aws.amazon.com/architecture/this-is-my-architecture/?tma.sort-by=item.additionalFields.airDate&tma.sort-order=desc&awsf.category=*all&awsf.industry=*all&awsf.language=*all&awsf.show=*all&awsf.product=*all&tma.q=DynamoDB&tma.q_operator=AND)。

## DynamoDB 的功能
<a name="ddb-capabilities"></a>

### 使用全局表进行多活复制
<a name="ddb-capabilities-gt"></a>

[全局表](GlobalTables.md)提供跨所选 AWS 区域的数据的多活复制，[可用性为 99.999%](https://aws.amazon.com/dynamodb/sla/)。全局表为部署多区域、多活数据库提供完全托管的解决方案，无需构建和维护您自己的复制解决方案。使用全局表，您可以指定希望表可用的 AWS 区域。DynamoDB 会将正在进行的数据更改复制到所有这些表。

您的全球分布式应用程序可以在所选区域本地访问数据，从而实现个位数毫秒级读写性能。由于全局表是多活的，因此您不需要主表。这意味着，在区域之间对应用程序进行失效转移时，不会出现复杂或延迟的失效转移或数据库停机。

### ACID 事务
<a name="ddb-capabilities-acid-tx"></a>

DynamoDB 专为任务关键型工作负载而构建。它能够为需要复杂业务逻辑的应用程序提供[（ACID）事务](transaction-apis.md)支持。DynamoDB 为事务提供原生服务器端支持，简化了开发人员对表内和表间的多个项目进行“要么全有要么全无”的协调式更改的体验。

### 事件驱动型架构的更改数据捕获
<a name="ddb-capabilities-cdc-eda"></a>

DynamoDB 支持近实时流式处理项目级更改数据捕获（CDC）记录。DynamoDB 提供两个用于 CDC 的流模型：[DynamoDB Streams](Streams.md) 和 [Kinesis Data Streams for DynamoDB](kds.md)。每当应用程序在表中创建、更新或删除项目时，流模型都会以近乎实时的方式记录按时间排序的每个项目级更改序列。这使得 DynamoDB Streams 非常适合通过事件驱动型架构来使用更改并据其采取行动的应用程序。

### 二级索引
<a name="ddb-capabilities-secondary-indexes"></a>

DynamoDB 提供用于创建[全局和本地二级索引](SecondaryIndexes.md)的选项，从而使您能够使用备用键查询表数据。通过这些二级索引，您可以使用主键之外的其他属性访问数据，从而在访问数据时获得最大灵活性。

## 服务集成
<a name="ddb-service-integrations"></a>

DynamoDB 广泛集成了多个 AWS 服务，可帮助您从数据中获得更多价值，消除无差别繁重工作，并大规模运行您的工作负载。例如：AWS CloudFormation、Amazon CloudWatch、Amazon S3、AWS Identity and Access Management（IAM）和 AWS Auto Scaling。以下各部分介绍了一些可以使用 DynamoDB 执行的服务集成：

### 无服务器集成
<a name="ddb-service-integrations-serverless"></a>

为了构建端到端无服务器应用程序，DynamoDB 可与许多无服务器 AWS 服务进行原生集成。例如，可以将 DynamoDB 与 AWS Lambda 集成，以[创建触发器](Streams.Lambda.md)，这些触发器是自动响应 DynamoDB Streams 中事件的代码段。利用触发器，可以创建事件驱动型应用程序，以便对 DynamoDB 表中的数据修改做出反应。为了优化成本，您可以[筛选事件](Streams.Lambda.Tutorial2.md)，Lambda 通过 DynamoDB 流处理这些事件。

下表列出了一些与 DynamoDB 进行无服务器集成的示例：
+ 使用 [AWS AppSync](https://docs.aws.amazon.com/appsync/latest/devguide/what-is-appsync.html) 创建 GraphQL API
+ 使用 [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 创建 REST API
+ 通过 [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 实现无服务器计算
+ 通过 [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) 实现更改数据捕获（CDC）

### 将数据导入和导出到 Amazon S3
<a name="ddb-service-integrations-s3"></a>

通过将 DynamoDB 与 Amazon S3 集成，您可以轻松地将数据导出到 Amazon S3 存储桶，以进行分析和机器学习。DynamoDB 支持[全表导出和增量导出](S3DataExport_Requesting.md)，以便在指定时间段内导出更改、更新或删除的数据。您还可以将[数据从 Amazon S3 ](S3DataImport.HowItWorks.md)导入新 DynamoDB 表。

### 零 ETL 集成
<a name="ddb-service-integrations-zetl"></a>

DynamoDB 支持[与 Amazon Redshift 的零 ETL 集成](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.html)和[将 OpenSearch Ingestion 管道与 Amazon DynamoDB 结合使用](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/configure-client-ddb.html)。这些集成使您能够对 DynamoDB 表数据运行复杂分析并使用高级搜索功能。例如，您可以对您的 DynamoDB 数据执行全文和向量搜索以及语义搜索。零 ETL 集成对在 DynamoDB 上运行的生产工作负载没有影响。

### 缓存
<a name="ddb-service-integrations-caching"></a>

[DynamoDB Accelerator（DAX）](DAX.md)是专为 DynamoDB 构建的完全托管、高度可用的缓存服务。DAX 可将性能提高 10 倍（从毫秒到微秒），即使每秒处理数百万个请求也是如此。DAX 无需您管理缓存失效、数据填充或集群管理，即可完成向 DynamoDB 表中添加内存加速所需的全部繁重工作。

## 安全性
<a name="ddb-intro-security"></a>

DynamoDB 利用[ IAM ](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)来帮助您安全地控制对 DynamoDB 资源的访问。借助 IAM，您可以集中管理控制哪些 DynamoDB 用户可访问资源的权限。可以使用 IAM 来控制谁通过了身份验证（准许登录）并获得授权（具有相应权限）来使用资源。由于 DynamoDB 使用 IAM，因此访问 DynamoDB 不需要用户名或密码。由于您无需管理任何复杂的密码轮换策略，因此可以简化您的安全状况。借助 IAM，您还可以启用[精细访问控制](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_attributes.html)，以提供属性级别的授权。您还可以定义支持 [IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html#what-is-access-analyzer-resource-identification) 和[屏蔽公共访问（BPA）](rbac-bpa-rbp.md)的[基于资源的策略](access-control-resource-based.md)，以简化策略管理。

默认情况下，DynamoDB 以静态方式加密所有客户数据。[静态加密](EncryptionAtRest.md)通过使用存储在 [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)（AWS KMS）中的加密密钥来增强数据的安全性。利用静态加密，可以构建符合严格加密合规性和法规要求的安全敏感型应用程序。访问加密表时，DynamoDB 会以透明方式解密表数据。无需更改任何代码或应用程序即可使用或管理加密表。DynamoDB 继续提供您预期的个位数毫秒级延迟，所有 [DynamoDB 查询](Query.md)可以无缝处理加密数据。

可以指定 DynamoDB 是应使用 AWS 拥有的密钥（默认加密类型）、AWS 托管式密钥，还是应使用客户托管密钥来加密用户数据。使用[AWS 拥有的 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)进行默认加密无需额外付费。对于客户端加密，您可以使用 [AWS 数据库加密 SDK](https://aws.amazon.com/blogs/security/how-to-use-aws-database-encryption-sdk-for-client-side-encryption-and-perform-searches-on-encrypted-attributes-in-dynamodb-tables/)。

此外，DynamoDB 还遵守各种[合规标准](https://aws.amazon.com/compliance/services-in-scope/)，包括 HIPAA、PCI DSS 和 GDPR，让您能够满足监管要求。

## 恢复能力
<a name="ddb-intro-resilience"></a>

默认情况下，DynamoDB 会自动跨三个[可用区](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)复制数据，以提供高持久性和 99.99% 的可用性 SLA。DynamoDB 还提供其他功能来帮助您实现业务连续性和灾难恢复目标。

DynamoDB 包含以下功能，可帮助支持您的数据弹性和备份需求：

**Topics**
+ [全局表](#ddb-resilience-gt)
+ [连续备份和时间点故障恢复](#ddb-resilience-backups-pitr)
+ [按需备份和还原](#ddb-resilience-ondemand-backup-restore)

### 全局表
<a name="ddb-resilience-gt"></a>

DynamoDB 全局表支持 [99.999% 的可用性 SLA](https://aws.amazon.com/dynamodb/sla/) 和多区域弹性。这有助于您构建弹性应用程序并对其进行优化，以实现最低恢复时间目标（RTO）和恢复点目标（RPO）。全局表还与 [AWS Fault Injection Service（AWS FIS）](https://docs.aws.amazon.com/fis/latest/userguide/what-is.html)集成，可对全局表工作负载执行故障注入实验。例如，[暂停全局表复制](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#dynamodb-actions-reference)到任何副本表。

### 连续备份和时间点故障恢复
<a name="ddb-resilience-backups-pitr"></a>

[连续备份](Point-in-time-recovery.md)可为您提供每秒精度，并能够启动时间点故障恢复。使用时间点故障恢复，您可以将该表还原到最近 35 天中的任何时间点。您可以将恢复期设置为 1 天到 35 天之间的任何值。

连续备份和启动时间点还原不会使用预配置容量。它们也不会对应用程序的性能或可用性产生任何影响。

### 按需备份和还原
<a name="ddb-resilience-ondemand-backup-restore"></a>

您可以使用[按需备份和还原](Backup-and-Restore.md)创建表的完整备份以进行长期保留和存档，从而满足监管合规性需求。备份不会影响表的性能，您可以备份任何大小的表。借助 [AWS Backup 集成](Backup-and-Restore.md)，您可以使用 AWS Backup 自动规划、复制、标记和管理 DynamoDB 按需备份的生命周期。使用 AWS Backup，您可以跨账户和区域复制按需备份，并将旧备份过渡到冷存储以优化成本。

## 访问 DynamoDB
<a name="ddb-access"></a>

您可以将 DynamoDB 与[AWS 管理控制台](https://console.aws.amazon.com/dynamodb)、[AWS Command Line Interface](https://aws.amazon.com/cli/)、[NoSQL Workbench for DynamoDB](workbench.md) 或 [DynamoDB API](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Operations_Amazon_DynamoDB.html) 结合使用。

有关更多信息，请参阅 [访问 DynamoDB](AccessingDynamoDB.md)。

## DynamoDB 定价
<a name="ddb-pricing"></a>

DynamoDB 对在表中读取、写入和存储数据以及您选择启用的任何可选功能收费。DynamoDB 采用两种容量模式，其各自的计费选项可用于处理对表的读写操作：[按需](on-demand-capacity-mode.md)和[预调配](provisioned-capacity-mode.md)

DynamoDB 还包含在**永久免费套餐**中，提供 25 GB 的存储空间。**永久免费套餐**还包括 25 个预调配写入容量单位和 25 个预调配读取容量单位（WCU、RCU），足以每月处理 2 亿个请求。

有关更多信息，请参阅 [Amazon DynamoDB 定价](https://aws.amazon.com/dynamodb/pricing/)。

## 开始使用 DynamoDB
<a name="ddb-intro-get-started"></a>

如果您是首次接触 DynamoDB 的用户，建议您先阅读以下主题：
+ [DynamoDB 入门](GettingStartedDynamoDB.md) – 引导您完成设置 DynamoDB、创建表示例和上传数据的过程。本主题还提供有关使用 AWS 管理控制台、AWS CLI、NoSQL Workbench 和 DynamoDB API 执行一些基本数据库操作的信息。
+ [DynamoDB 核心组件](HowItWorks.CoreComponents.md) – 介绍 DynamoDB 的基本概念。
+ [使用 DynamoDB 进行设计和架构的最佳实践](best-practices.md) – 提供有关 NoSQL 设计、DynamoDB Well-Architected Lens、表设计和其他几个 DynamoDB 功能的建议。这些最佳实践可帮助您在使用 DynamoDB 时最大限度提高性能和降低吞吐量成本。

还建议您阅读下面的教程，这些教程提供了逐步熟悉 DynamoDB 的完整过程。您可以使用**永久免费套餐**功能完成这些教程。
+ [使用 Amazon DynamoDB 创建和查询 NoSQL 表](https://aws.amazon.com/tutorials/create-nosql-table/)
+ [使用 NoSQL 键/值数据存储构建应用程序](https://aws.amazon.com/tutorials/build-an-application-using-a-no-sql-key-value-data-store/)

有关迁移到 DynamoDB 的资源、工具和策略的信息，请参阅[迁移到 DynamoDB](migration-guide.md#migration-guide.title)。要阅读最新的博客和白皮书，请参阅 [Amazon DynamoDB 资源](https://aws.amazon.com/dynamodb/resources/)。