Deno Deploy 上的 KV
Deno Deploy 现在提供了一个名为 Deno KV 的内置无服务器键值数据库。
此外,Deno KV 也可在 Deno 内部使用,使用 SQLite 作为其后端。此功能自 Deno v1.32 起即可通过 --unstable
标志访问。了解更多关于 Deno KV 的信息。
一致性 跳转到标题
默认情况下,Deno KV 是一个强一致性数据库。它提供了称为*外部一致性*的最严格的强一致性形式,这意味着
- 可串行化:这是事务的最高隔离级别。它确保多个事务的并发执行结果与按顺序依次执行事务的系统状态相同。换句话说,可串行化事务的最终结果等同于这些事务的某个顺序执行。
- 线性化:此一致性模型保证读取和写入等操作看起来是即时的,并且实时发生。写入操作完成后,所有后续读取操作都将立即返回更新后的值。线性化确保了操作的强实时排序,使系统更具可预测性且更易于理解。
同时,您可以通过在单个读取操作上设置 consistency: "eventual"
选项来选择放宽一致性约束。此选项允许系统从全局副本和缓存提供读取服务,以最大限度地减少延迟。
以下是我们在主要区域观察到的延迟数据
区域 | 延迟(最终一致性) | 延迟(强一致性) |
---|---|---|
北弗吉尼亚 (us-east4) | 7 毫秒 | 7 毫秒 |
法兰克福 (europe-west3) | 7 毫秒 | 94 毫秒 |
荷兰 (europe-west4) | 13 毫秒 | 95 毫秒 |
加利福尼亚 (us-west2) | 72 毫秒 | 72 毫秒 |
香港 (asia-east2) | 42 毫秒 | 194 毫秒 |
分布式队列 跳转到标题
Deno Deploy 上提供无服务器分布式队列。有关更多详细信息,请参阅Deno Deploy 上的队列。
从 Deno Deploy 外部连接到托管数据库 跳转到标题
您可以从 Deno Deploy 外部的 Deno 应用程序连接到您的 Deno Deploy KV 数据库。要打开托管数据库,请将 DENO_KV_ACCESS_TOKEN
环境变量设置为 Deno Deploy 个人访问令牌,并将数据库的 URL 提供给 Deno.openKv
。
const kv = await Deno.openKv(
"https://api.deno.com/databases/<database-id>/connect",
);
有关连接到远程 KV 数据库的协议规范,请查看文档。
数据分布 跳转到标题
Deno KV 数据库至少复制到 6 个数据中心,跨越 3 个区域(美国、欧洲和亚洲)。写入操作提交后,其变更将持久存储在主区域内的至少两个数据中心中。异步复制通常会在 10 秒内将这些变更传输到其他两个区域。
该系统旨在承受大多数数据中心级别的故障,而不会出现停机或数据丢失。恢复点目标 (RPO) 和恢复时间目标 (RTO) 有助于量化系统在各种故障模式下的弹性。RPO 表示以时间衡量的最大可接受数据丢失量,而 RTO 表示将系统恢复到正常运行所需的最大可接受时间。
- 主区域中一个数据中心丢失:RPO=0(无数据丢失),RTO<5 秒(系统在 5 秒内恢复)
- 副本区域中任意数量的数据中心丢失:RPO=0,RTO<5 秒
- 主区域中两个或多个数据中心丢失:RPO<60 秒(数据丢失少于 60 秒)