Deno 推出高性能键值数据库 Deno KV


Deno 团队宣布推出 Deno KV,并称其是具备强一致性的键值数据库,支持在全局范围复制以在全球 35 个地区实现低延迟读取。

Deno KV 重要特性包括:

  • 支持在本地运行或托管

Deno KV 支持无缝集成到开源 Deno runtime 中,允许在本地运行它或将其部署为零配置的托管服务。

在本地运行的时候,Deno KV 由 SQLite 提供支持,为本地开发、测试或单区域生产系统提供轻量级且易于使用的解决方案。

当将应用程序部署到 Deno Deploy 时,Deno KV 数据库会自动由 FoundationDB 提供支持。该托管解决方案由 Deno 公司运营,无需开发者手动配置或维护即可确保高性能和可靠性。

  • 简单但强大

Deno KV 专为 JavaScript 设计,可以存储任何 JavaScript 结构化的可序列化值,例如对象、数组、BigInts、日期等。

const kv = await Deno.openKv();

const key = ["users", crypto.randomUUID()];
const value = { name: "Alice", created: new Date() };
await kv.set(key, value);

const result = await kv.get(key);
console.log(result.value);
// { name: "Alice", created: 2023-05-01T09:24:07.620Z }

比如使用kv.list()操作列出与特定选择器匹配的所有键。在下面的示例中,所有以特定前缀开头的键都被选中。

await kv.set(["users", "alice"], { birthday: "January 1, 1990" });
await kv.set(["users", "sam"], { birthday: "February 14, 1985" });
await kv.set(["users", "taylor"], { birthday: "December 25, 1970" });

// List out all entries with keys starting with `["users"]`
const iter = kv.list({ prefix: ["users"] });
for await (const entry of iter) {
console.log(entry.key);
console.log(entry.value);
}

详情查看文档。

  • 原子性事务 (Atomic transactions)

Deno KV 使用kv.atomic()创建跨多个键的强一致性事务,这些键在默认情况下可立即持久化:

const kv = await Deno.openKv();
const change = 10;

const bob = await kv.get(["balance", "bob"]);
const liz = await kv.get(["balance", "liz"]);
if (liz.value < change) {
throw "not enough balance";
}

const success = await kv.atomic()
.check(bob, liz) // balances did not change
.set(["balance", "bob"], bob.value - change)
.set(["balance", "liz"], liz.value + change)
.commit();

详情查看文档。

  • 强一致性和高性能

Deno KV 是一个强一致性数据库,提供外部一致性,包括:

  • 可串行化 (Serializability):事务的最高级别隔离,确保并发事务执行导致系统状态等同于这些事务的顺序。
  • 线性化 (Linearizability):保证诸如读取和写入之类的操作立即出现并实时发生。写入操作完成后,所有后续读取操作都会返回更新后的值,从而确保强大的实时排序。
// Read with eventual consistency from the nearest region
await db.get(["my-key"], { consistency: "eventual" });

// Read with strong consistency from the primary region
await db.get(["my-key"], { consistency: "strong" });

使用示例

下面代码使用 Deno KV 创建了全局一致的持久计数器:

import { serve } from "/[email protected]/http/server.ts";

const db = await Deno.openKv();

serve(async (req: Request) => {
await db.atomic().sum(["views"], 1n).commit();
const res = await db.get(["views"]);
const views = res.value.value;
return new Response(`Views: ${views}`);
});

目前要体验 Deno KV,需要排队等候 waitlist 通过:https://deno.com/kv。


相關推薦

2023-05-02

易、更灵活地使用。 Deno 1.33 主要变化: 内置 KV 数据库 更扁平化的 deno.json 配置 更少的动态导入权限检查 改进 npm 和 Node.js 兼容性 性能优化 改进 CLI 预加载 LSP 文档 对 Deno API 的变更 变更标准

2023-12-16

Deno 1.39重新引入了WebGPU API的支持,这一决定标志着对于高性能、跨架构的GPU编程在JavaScript中的重要进展。WebGPU API,被视为WebGL的有效继承者,为开发者提供了一种低级别、高性能的方式来直接编程GPU硬件。此规范已被最终确

2023-06-17

Deno 是一个简单、现代和安全的 JavaScript 和 TypeScript 的运行时,它使用 V8 并以 Rust 构建。 Deno 1.34.3 正式发布,值得关注的更新包括: kv 队列实现 避免在导入无效的模块名时崩溃 修复编译输出中缺少一些 npm 依赖项的问题

2023-06-17

Fresh 是一个现代的、Deno 优先的全栈式 Web 框架。自推出 Fresh 1.0 以来,已经过去了将近一年,如今 Fresh 1.2 正式发布,亮点功能如下: islands 是在服务器和客户端都渲染的独立组件,是 Fresh 设计的核心。如今可以在 island props

2022-08-29

引入了一个新的实验性 HTTP 服务器,旨在提供一流的 HTTP 性能。我们的基准显示,与 Node.js 相比,每秒的 hello-world 请求性能提高了 4 倍,与我们现有的网络服务器相比,提高了 3 倍。新的服务器甚至比 Rust HTTP 服务器 Hyper 的单

2023-07-07

Deno 团队将专注于使 @grpc/grpc-js、google-cloud-node 以及各种数据库驱动程序在 Deno 中工作。如果发现某些 npm 包无法工作,请在 denoland/deno 仓库提交 issue 报告。 此外,Deno 1.35 还包括 Deno 命名空间的 API 添加、Web API 更改、语言服务

2023-03-24

支持 ES 装饰器,但在未来的版本中将默认启用它们。 性能改进:除了 TypeScript 5.0 带来的其他性能优势外,Deno 的初始类型检查在不对远程模块进行类型检查时变得非常快。在大多数情况下,这一改进对减少 CI 上的类型检查

2023-05-27

Node.js 的兼容性,从而整体提升开发者体验,并为未来的性能增强奠定基础。 值得关注的变化: deno compile支持 npm 包 从 Deno v1.6 开始, deno compile支持将项目编译成单个二进制可执行文件,可方便开发者: 在所有主

2022-10-01

性 针对DenoAPI 的变更 改进 Deno.serve() API 提升性能 优化 module 下载 UI 改进开发者体验 升级 TypeScript 至 4.8 CacheWeb API 此版本添加了对CacheAPI 的支持。该 API 可用于缓存 Request/Response 对象,对于动态生成 r

2023-04-08

发者的全栈现代 Web 框架,可帮助他们轻松创建高质量、高性能、稳定性好,以及支持定制的 Web 应用。 Demo:https://saaskit.deno.dev/

2022-07-23

o 1.24 已发布,值得关注的更新包括: 类型检查和发射的性能改进 以前,当指定 --check 标志时,Deno 内部使用 TypeScript 编译器将 TypeScript 代码转换为 JavaScript,否则就使用 swc。在这个版本中,所有的发射都是用 swc 完成的,这要

2022-11-17

在你可以使用如 Prisma、Mongoose 和 MySQL 等最喜欢的持久性数据模块,以及如 React、Vue 等前端框架。 有了 Deno,使用 npm 就更容易、更安全了。Deno 的内置工具链、std 库和强大的 IDE 支持意味着你可以更快地提高生产力。Deno 的默

2023-11-04

bsp;--unstable-* flags:更好地对内部功能进行标记 改进性能:当不使用可转移项时, structuredClone 现在速度要快得多 V8 升级到 12.0:引入 Array.fromAsync 和 Promise.withResolvers  详情。

2023-01-29

Deno 是一个简单、现代和安全的 JavaScript 和 TypeScript 的运行时,它使用 V8 并以 Rust 构建。 Deno 1.30 已发布,值得关注的更新包括: 对内置 Node.js 模块的支持 在 Deno 中,npm 包已经可以通过 Deno 的 Node.js 兼容层访问内置的 Node.js