本指南介绍 Cloudflare Workers 提供的存储和数据库产品,包括推荐的使用场景和最佳实践。
下表将我们的存储和数据库产品映射到常见的行业术语以及推荐的使用场景:
| 用例 | 产品 | 适用于 |
|---|---|---|
| 键值存储 | Workers KV | 配置数据、服务路由元数据、个性化(A/B 测试) |
| 对象存储 / blob 存储 | R2 | 面向用户的 Web 资源、图像、机器学习和训练数据集、分析数据集、日志和事件数据。 |
| 加速 Postgres 或 MySQL 数据库 | Hyperdrive | 使用现有数据库驱动程序和 ORM 连接到云端或本地现有数据库。 |
| 全球协调和有状态无服务器 | Durable Objects | 构建协作应用程序;跨客户端的全球协调;实时 WebSocket 应用程序;强一致、事务性存储。 |
| 轻量级 SQL 数据库 | D1 | 关系数据,包括用户配置文件、产品列表和订单和/或客户数据。 |
| 任务处理、批处理和消息传递 | Queues | 后台作业处理(电子邮件、通知、API)、消息队列和延迟任务。 |
| 向量搜索和嵌入查询 | Vectorize | 存储来自 AI 模型的嵌入以进行语义搜索和分类任务。 |
| 流式摄取 | Pipelines | 流式数据摄取和处理,包括点击流分析、遥测/日志数据和用于查询的结构化数据 |
| 时间序列指标 | Analytics Engine | 使用 Workers 和/或 SQL 写入和查询高基数时间序列数据、使用指标和服务级遥测。 |
应用程序可以基于多种存储和数据库产品构建:例如,使用 Workers KV 存储会话数据;使用 R2 存储大型文件、媒体资产和用户上传的文件;使用 Hyperdrive 连接托管的 Postgres 或 MySQL 数据库。
使用 Workers 构建应用程序时,有三种 SQL 数据库选项可用。
- Hyperdrive — 如果您已有 Postgres 或 MySQL 数据库,需要大型(1TB、100TB 或更大)单一数据库,和/或希望使用现有数据库工具。您还可以将 Hyperdrive 连接到 PlanetScale ↗ 或 Neon ↗ 等数据库平台。
- D1 — 适用于轻量级、无服务器、读密集型应用程序,拥有受益于 D1 read replication 的全球用户,且无需管理和维护传统 RDBMS。
- Durable Objects — 适用于有状态的无服务器工作负载、按用户或按客户的 SQL 状态,以及构建分布式系统(D1 和 Queues 基于 Durable Objects 构建),其中 Durable Object 的 strict serializability ↗ 实现请求和存储操作的全局排序。
我们建议使用 Workers KV 存储会话数据、凭证(API keys)和/或配置数据。这些通常以高频率读取(每秒数千 RPS 或更高),通常不会修改(在 KV 每个唯一键 1 write RPS 的限制内),且不需要立即一致。
频繁读取的键受益于 KV 的内部缓存,对这些"热"键的重复读取延迟通常在 500µs 到 10ms 范围内。
OpenAuth ↗ 等身份验证框架在部署到 Cloudflare 时使用 Workers KV 作为会话存储,Cloudflare Access 使用 KV 安全存储和分发用户凭证,以便尽可能靠近用户进行验证并降低整体延迟。
Workers KV 是一个最终一致性的键值数据存储,在 Cloudflare 全球网络上缓存。
它非常适合以下项目:
- 大量读取和/或对相同键的重复读取。
- 低延迟全球读取(热键通常在 10ms 内)
- 按对象的 time-to-live (TTL)。
- 分布式配置和/或会话存储。
要开始使用 KV:
- 阅读 KV 工作原理。
- 创建 KV namespace。
- 查看 KV Runtime API。
- 了解 KV Limits。
R2 是 S3 兼容的 blob 存储,允许开发者存储大量非结构化数据,而无需支付典型云存储服务相关的 egress 费用。
它非常适合以下项目:
- 存储不常访问的文件。
- 大型对象存储(例如,每个对象数 GB 或更大)。
- 每个对象的强一致性。
- 网站资产存储(请参阅 caching guide)
要开始使用 R2:
- 阅读 Get started guide。
- 了解 R2 Limits。
- 查看 R2 Workers API。
Durable Objects 通过全局唯一性和事务性存储 API,为 Workers 平台提供低延迟协调和一致存储。
-
Global Uniqueness 保证给定 ID 的 Durable Object 类在全球只有一个实例在运行。对 Durable Object ID 的请求由 Workers 运行时路由到拥有该 Durable Object 的 Cloudflare 数据中心。
-
事务性存储 API 为 Durable Object 提供强一致性的键值存储。每个 Object 只能读取和修改与该 Object 关联的键。Durable Object 的执行是单线程的,但多个请求事件仍可能以与到达 Object 的顺序不同的顺序处理。
它非常适合以下项目:
- 实时协作(如聊天应用程序或游戏服务器)。
- 一致存储。
- 数据局部性。
要开始使用 Durable Objects:
- 阅读 introductory blog post ↗。
- 查看 Durable Objects 文档。
- 通过 Durable Objects 快速入门。
- 了解 Durable Objects Limits。
D1 是 Cloudflare 的原生无服务器数据库。使用 D1,您可以通过导入数据或在 Worker 中定义表和编写查询,或通过 API 创建数据库。
D1 非常适合:
- 用户数据、账户数据和其他结构化数据集的持久化关系存储。
- 需要 ad-hoc 查询数据的使用场景(使用 SQL)。
- 读写比例高的工作负载(大多数 Web 应用程序)。
要开始使用 D1:
- 阅读 the documentation
- 按照 Get started guide 配置您的第一个 D1 数据库。
- 查看 D1 Workers Binding API。
Cloudflare Queues 允许开发者发送和接收具有保证交付的消息。它与 Cloudflare Workers 集成,提供 at-least once delivery、消息批处理,且不收取 egress bandwidth 费用。
Queues 非常适合:
- 将工作从请求中卸载以稍后调度。
- 从 Worker 向 Worker 发送数据(服务间通信)。
- 在写入上游系统(包括第三方 API 或 Cloudflare R2)之前缓冲或批处理数据。
要开始使用 Queues:
Hyperdrive 是一项加速您对 MySQL 和 Postgres 数据库查询的服务,使您能够更快地从全球访问数据,无论用户位于何处。
Hyperdrive 允许您:
- 从 Workers 连接到现有数据库,无连接开销。
- 在 Cloudflare 全球网络上缓存频繁查询,以减少高流量内容的响应时间。
- 通过 connection pooling 降低 origin 数据库的负载。
要开始使用 Hyperdrive:
Pipelines 是一项流式摄取服务,允许您摄取大量实时数据,而无需管理任何基础设施。
Pipelines 允许您:
- 以极高吞吐量摄取数据(每秒数万条记录或更多)
- 批处理并直接写入 object storage,随时查询
- (未来)在摄取期间转换和聚合数据
要开始使用 Pipelines:
- Create a Pipeline 以批处理并将记录写入 R2。
Analytics Engine 是 Cloudflare 的 time-series 和 metrics 数据库,允许您使用内置 API 从 Workers 写入数据点,并使用 SQL 直接查询该数据,以 unlimited-cardinality 规模编写分析。
Analytics Engine 允许您:
- 向您自己的客户展示自定义分析
- 构建基于使用量的计费系统
- 按客户或按用户了解服务健康状况
- 为频繁调用的代码路径添加 instrumentation,而不影响性能或用事件淹没外部分析系统
Cloudflare 在内部使用 Analytics Engine 存储和生成 D1 和 R2 等产品的 per-product metrics。
要开始使用 Analytics Engine:
- 了解如何 get started with Analytics Engine
- 查看 an example of writing time-series data to Analytics Engine
- 了解用于从 Analytics Engine 数据集读取数据的 SQL API
Vectorize 是一个全球分布式 vector database,使您能够使用 Cloudflare Workers 和 Workers AI 构建全栈 AI 应用程序。
Vectorize 允许您:
- 存储来自任何 vector embeddings 模型的 embeddings(Bring Your Own embeddings),用于 semantic search 和 classification 任务。
- 通过将 vector search 作为 Retrieval Augmented Generation (RAG) 工作流的一部分,为 Large Language Model (LLM) 查询添加上下文。
- Filter on vector metadata 以缩小搜索范围并返回更相关的结果。
要开始使用 Vectorize:
- Create your first vector database。
- 结合 Workers AI and Vectorize 生成、存储和查询 text embeddings。
- 了解更多 about how vector databases work。
Cloudflare Workers 提供基于 SQLite 的无服务器数据库产品 — D1。如何比较 Durable Objects 中的 SQLite 与 D1?
D1 是托管数据库产品。
D1 适合开发者熟悉的架构,应用服务器通过网络与数据库通信。应用服务器通常是 Workers;不过,D1 还通过 HTTP API 支持外部非 Worker 访问,这有助于为 D1 解锁 第三方工具 支持。
D1 旨在提供"开箱即用"的功能集,包括上述 HTTP API、数据库 schema 管理、数据导入/导出 和 数据库查询洞察。
使用 D1 时,应用代码和 SQL 数据库查询不在同一位置,这可能影响应用性能。如果性能是 D1 的顾虑,Workers 提供 Smart Placement,可动态在最佳位置运行 Worker,以减少 Worker 请求总延迟,同时考虑 Worker 通信的所有对象,包括 D1。
Durable Objects 中的 SQLite 是用于分布式系统的较低级别计算与存储构建块。
按设计,Durable Objects 仅可通过 Workers 访问。
Durable Objects 需要更多工作,但回报是更大的灵活性和控制权。使用 Durable Objects,你必须实现两段在不同位置运行的代码:前端 Worker 将来自 Internet 的传入请求路由到唯一的 Durable Object,以及 Durable Object 本身,它与 SQLite 数据库运行在同一台机器上。你可以选择什么在哪里运行,你的应用可能受益于在数据库旁边运行某些应用业务逻辑。
使用 Durable Objects 中的 SQLite,你可能还需要构建 D1 自带的一些数据库工具。
SQL 查询定价和限制旨在在 D1(定价、限制)与 Durable Objects 中的 SQLite(定价、限制)之间保持一致。