DynamoDB vs Elasticsearch
DynamoDB 是 Elasticsearch 的替代品吗?
并不算——它们解决不同的问题,而且通常一起使用。DynamoDB 是无服务器 NoSQL 操作型数据库(键值与文档存储),为大规模低延迟读写而生。Elasticsearch 是分布式搜索与分析引擎,为全文搜索、聚合和相关性排序而生。一种常见模式是让 DynamoDB 作为记录系统,并把变更流式传输到 Elasticsearch(或 OpenSearch)用于搜索。
| 特性 | DynamoDB | Elasticsearch |
|---|---|---|
| 主要用途 | 操作型(OLTP)键值 / 文档存储 | 面向你数据的搜索与分析引擎 |
| 数据模型 | 带属性的键值与文档项目 | 为搜索而索引的 JSON 文档 |
| 查询类型 | 键和二级索引查找、Query/Scan、PartiQL | 全文查询、过滤、聚合、向量搜索 |
| 一致性 | 最终一致或强一致读取;ACID 事务 | 对新写入的近实时(基于刷新)可见性 |
| 持久性 / 角色 | 无服务器记录系统,跨三个可用区复制 | 分布式搜索层,通常由真相来源供给 |
| 二级索引 | 全局与本地二级索引 | 倒排索引(为搜索而索引的字段) |
| 扩展 / 运维 | 全托管、无服务器;可扩展到任意规模,无服务器需运维 | 分片与副本的分布式集群;托管或自托管 |
| 定价模型 | 按读/写请求加存储付费(按需或预置) | 集群/节点容量或托管服务定价 |
何时使用 DynamoDB
当你的工作负载是操作型的时候选 DynamoDB:针对已知访问模式的大量读写,需要可预测的个位数毫秒延迟、持久的记录系统,且无服务器需运维。AWS 将它描述为"一款无服务器、全托管、分布式的 NoSQL 数据库",同时支持键值和文档数据模型,并在你需要时提供强读一致性和 ACID 事务。它适合用户资料、会话、购物车、排行榜、事件账本和元数据——任何你按键或精心规划的索引获取的东西。
DynamoDB 不提供关系型 JOIN 或全文查询引擎,且它的 Scan 会读取整张表,因此临时的"找出任何包含这个短语的文档"查询不是它的强项。参见 Query vs Scan,了解为什么访问模式设计很重要。
何时使用 Elasticsearch
当任务是搜索或分析时选 Elasticsearch:带相关性排序的全文查询、模糊匹配、自动补全、分面过滤、日志与可观测性分析,或跨大量文档的聚合。Elastic 将 Elasticsearch 描述为"一个数据存储和向量数据库,为各类数据提供近实时的搜索与分析"。它在你的字段上构建倒排索引,因而无需扫描全部即可快速找到匹配文档,并暴露聚合能力用于分析式汇总。
Elasticsearch 通常以集群运营(自托管、在 Elastic Cloud 上,或作为 Amazon OpenSearch Service 上的 OpenSearch 分支),并且通常与记录系统保持同步,而不是作为关键事务数据唯一的持久存储。
一起使用它们
两者是互补的,且 AWS 提供了将它们结合的第一方路径。DynamoDB Streams 近实时捕获每一次项目级变更,一条 zero-ETL / OpenSearch Ingestion 管道把该变更流复制到一个 Elasticsearch 兼容的搜索索引中。DynamoDB 仍作为真相来源,服务你基于键的操作流量;搜索索引回答全文、模糊和向量查询。AWS 指出该集成"不消耗你表上的读写吞吐量",因此搜索不会与生产流量竞争。
使用 DynamoDB
一旦你选定 DynamoDB,DynoTable 是一款桌面客户端,可直接操作你的表:浏览和编辑项目、构建键和过滤条件,并运行查询,无需在控制台里手写 JSON。当你确实需要手写一个表达式——一个 KeyConditionExpression、FilterExpression 或 UpdateExpression——免费的 DynamoDB Expression Builder 会生成带有必需的表达式属性名和值占位符的正确语法,并为 AWS SDK、CLI 和 PartiQL 输出它。
DynoTable 是一款闭源商业应用;它通过你标准的 AWS 凭证与 DynamoDB 通信,不会把你的数据经过任何第三方服务。
常见问题
DynamoDB 能做全文搜索吗?
不能原生支持。DynamoDB 按主键或二级索引检索项目并可过滤结果,但它没有倒排索引或相关性排序,且 Scan 会读取整张表。对于全文搜索,AWS 推荐的路径是把 DynamoDB 变更流式传输到诸如 Elasticsearch 或 Amazon OpenSearch Service 的搜索引擎,并在那里查询。
我应该用 DynamoDB 替换 Elasticsearch 吗?
通常不该——它们为不同的工作而生。DynamoDB 是面向基于键读写的操作型数据库;Elasticsearch 是搜索与分析引擎。如果你对 Elasticsearch 的唯一用途只是简单的键查找,DynamoDB 或许能覆盖;但如果你依赖全文搜索、聚合或相关性排序,就保留 Elasticsearch 并从 DynamoDB 供给它,而不是替换它。
Elasticsearch 是数据库吗?
Elastic 将 Elasticsearch 描述为一个提供近实时搜索与分析的数据存储和向量数据库。实践中,多数架构把它当作一个从主记录系统(如 DynamoDB)保持同步的搜索与分析层,而不是关键事务数据唯一的持久存储。
相关内容
- 了解:DynamoDB Streams · Query vs Scan · PartiQL vs SQL
- 用 DynamoDB Expression Builder 快速构建表达式。
- 下载 DynoTable 来直接操作你的 DynamoDB 表。
Last verified 2026-07-12 against the AWS DynamoDB Developer Guide and Elastic's official documentation. Elasticsearch 是 Elasticsearch B.V. 的商标;此处引用仅用于标识。