是的,Workers 免费套餐 将始终包含免费试用和实验 D1 的功能。
当您的账户达到每日读和/或写限制时,您将无法对 D1 运行查询。D1 API 将向您的客户端返回错误,表明已超出每日限制。达到包含的存储限制后,您需要删除未使用的数据库或清理过期数据,然后才能插入新数据、创建或更改表,或创建索引和触发器。
升级到 Workers 付费套餐通常会在几分钟内移除这些限制。
您将根据 D1 的定价指标 为额外的读、写和存储付费。
每个查询都会返回一个 meta 对象,其中包含该查询读取(rows_read)和写入(rows_written)的总行数。例如,对包含 5000 行的表执行全表扫描(例如 SELECT * FROM users)的查询将返回 rows_read 值为 5000:
"meta": {
"duration": 0.20472300052642825,
"size_after": 45137920,
"rows_read": 5000,
"rows_written": 0
}这些值也包含在 D1 Cloudflare 仪表板 ↗ 和分析 API 中,使您能够将读写量归因于特定数据库、时间段或两者。
不收费。
D1 本身不对额外计算收费。查询 D1 并计算结果的 Workers(例如,将结果序列化为 JSON 和/或运行查询)根据 Workers 定价 计费,此外还需支付 D1 特定用量费用。
是的,您对数据库运行的任何查询,包括将现有数据插入(INSERT)到新数据库、表扫描(SELECT * FROM table)或创建索引,都计为读或写。
可以,您可以使用索引来减少查询读取的行数。为最常查询的表和过滤列创建索引 可减少扫描的数据量,同时提高查询性能。如果您有读密集型工作负载(最常见),这尤其有利。写入索引引用的列将至少增加一行写入以更新索引,但这通常会被索引带来的读取行数减少所抵消。
是的,尽管很少。空表至少消耗几 KB,取决于表中的列数(表宽度)。空数据库大约消耗 12 KB 存储空间。
D1 设计用于在多个较小的(10 GB)数据库之间水平扩展,例如按用户、按租户或按实体的数据库。 D1 允许您构建包含数千个数据库的应用程序,无需额外费用,因为定价仅基于查询和存储成本。
每个 D1 数据库最多可存储 10 GB 数据。
每个单独的 D1 数据库本质上是单线程的,一次处理一个查询。
您的最大吞吐量与查询持续时间直接相关。
- 如果平均查询耗时 1 ms,您大约可以每秒运行 1,000 次查询。
- 如果平均查询耗时 100 ms,您每秒可以运行 10 次查询。
收到过多并发请求的数据库将首先尝试将它们排队。如果队列已满,数据库将返回"过载"错误。
每个单独的 D1 数据库由单个 Durable Objects 支持。使用 D1 读复制 时,每个副本实例是不同的 Durable Object,这些准则独立适用于每个副本实例。
查询性能是吞吐量的最重要因素。作为粗略指南:
- 对
id有适当索引的读查询(如SELECT name FROM users WHERE id = ?)SQL 执行时间通常不到一毫秒。 - 写查询(如
INSERT或UPDATE)SQL 执行时间可能需要几毫秒,取决于写入的行数。写入需要在多个位置持久保存——了解更多关于 D1 如何在底层持久化数据 ↗ 的信息。 - 影响数百万行的大型
UPDATE或DELETE等数据迁移必须分批运行。试图一次修改数十万行或数百 MB 数据的单个查询将超出执行限制。将工作拆分为较小的块(例如,每次处理 1,000 行)以保持在平台限制内。
为确保查询快速高效,在 SQL 模式中使用适当的索引。
D1 数据库上的操作(包括查询执行和结果序列化)在 Workers 平台 CPU 和内存限制 内运行。
超出这些限制或达到其他平台限制将产生错误。有关更多详细信息,请参阅 D1 错误列表。
每次 Worker 调用最多可以同时打开六个(到 D1 的)连接。
有关 Worker 同时连接的更多信息,请参阅同时打开的连接数。