使用新的官方 npm 包在 Node 中使用 Deno KV
自我们推出 Deno KV 以来,这款全球托管的无服务器数据库已直接内置于 Deno 运行时中,开发人员非常喜欢它在无需配置或预置数据库的情况下,就能轻松地为应用程序添加状态。
const kv = await Deno.openKv();
除了能够远程连接到托管的 Deno KV 实例外,我们还发布了一个独立的开源 denokv
二进制文件用于自托管——包括持续备份到 S3 或 GCS 并支持时间点恢复。
今天,我们很高兴能够通过我们的官方 Deno KV npm 包将 Deno KV 访问引入 Node.js。现在,您可以使用 Deno KV 简单的 API,为您的 Node 项目添加一个全球分布式、支持 ACID 的数据库。
在这篇文章中,我们将介绍:
安装与使用
安装该包
npm install @deno/kv
将该包添加到您的 Node 项目后,您可以导入 openKv
函数(同时支持 ESM import
和 CJS require
方式使用)。
import { openKv } from "@deno/kv";
const kv = await openKv(<KV Connect URL>);
// use the Deno KV api: https://deno.land/api?s=Deno.Kv&unstable
const key = [ "users", crypto.randomUUID() ];
const value = { name: "Alice" };
await kv.set(key, value);
const result = await kv.get(key);
console.log(result.value); // { name: "Alice" }
默认情况下,用于身份验证的访问令牌来自 DENO_KV_ACCESS_TOKEN
环境变量。您也可以通过选项显式传递它。
import { openKv } from "@deno/kv";
const kv = await openKv(<KV Connect URL>, { accessToken: myToken });
连接 Deno Deploy KV 数据库的 KV Connect URL 示例如下:
https://api.deno.com/databases/<database-id>/connect
您项目的 database-id
可以在 Deno Deploy 控制面板中,项目 KV 选项卡下找到。
打开 KV 实例
Deno KV npm 包允许您使用一个函数连接四种类型的数据库:
- 一个由 FoundationDB 提供支持,并为读写延迟优化的全球托管 Deno Deploy KV 实例
const kv = await openKv(
"https://api.deno.com/databases/<database-id>/connect",
);
- 一个托管在您自己基础设施上的 denokv 服务,由 SQLite 提供支持
const kv = await openKv("https://:4512");
// see https://github.com/denoland/denokv
- 一个由 SQLite 提供支持的本地数据库
const kv = await openKv("kv.db");
- 或一个用于测试的内存中 KV 数据库
const kv = await openKv();
API
无论您选择哪种数据库,返回的 kv
实例都具有相同的数据库操作方法——遵循 Deno 本身提供的 KV API。
get
、getMany
、set
、delete
、atomic
、enqueue
和 close
方法均受支持,甚至全新的 watch
方法也支持!
listenQueue
方法支持内存和 SQLite 数据库,但不支持远程数据库(底层协议尚未支持)。
查看一个关于如何与 KV API 交互的带注释的示例。
在 Deno Deploy 上预置 KV 数据库
Deno Deploy 上的 Deno KV 是一个全球分布式、高性能的数据库(基于 FoundationDB 构建),无需任何预置或编排即可扩展。
如果您没有现有的 Deno Deploy 项目,可以免费创建一个新的 Deno KV 数据库,无需部署项目。
- 在您的项目页面,创建一个新的 Playground。
- 点击设置图标,然后点击“项目设置”。
- 选择 KV 选项卡,复制数据库 ID,用于构建关联的 KV Connect URL 并传递给
openKv
(见上文)。
要远程连接到您的新 Deno KV 数据库,您还需要创建一个访问令牌并将其设置为 DENO_KV_ACCESS_TOKEN
环境变量。
- 前往您的账户设置
- 滚动到您的“访问令牌”部分,点击“新建访问令牌”。
- 输入描述,例如“Deno KV 访问令牌”。
- 复制新生成的访问令牌。
最后,在运行您的 Node 项目时,将新令牌设置为环境变量 DENO_KV_ACCESS_TOKEN
。现在您可以远程连接到全球托管的 Deno KV 实例了!
支持的运行时
@deno/kv
针对 Node 18+,为性能和与 Deno 本身创建的数据库的兼容性进行了优化。它没有第三方 npm 包依赖,并使用单一的平台特定二进制文件在 Deno 本身支持的四种原生架构上访问 SQLite。架构适当的原生依赖项在 npm install
时使用标准的对等依赖机制选择并安装。
Deno KV 使用 V8 的序列化格式在本地和远程数据库中存储值,该格式在 Deno 中默认可用,在 Node 中通过内置的 v8
模块默认可用。只要提供了兼容的 V8 序列化器,该包就将在其他兼容 Node 的运行时上运行。更多详情请参阅其他运行时。
开源鸣谢
此包的源代码可免费获取,并使用了:
- 使用 pb 生成的 protobuf 代码
- 使用 dnt 生成 npm 包
- 支持标准 Node Node-API 原生接口的平台特定二进制文件,通过出色的 NAPI-RS 框架利用我们现有的
denokv
Rust 代码库。 - 由 John Spurlock 贡献的初始代码库,改编自其开源项目 kv-connect-kit。
下一步
@deno/kv npm 包的发布意味着您现在可以在 Node 项目中访问 Deno KV,无论是基于 FoundationDB 的全球托管 Deno KV 还是基于 SQLite 的本地 Deno KV。使用 Deno KV 简单易用的 API,可以轻松地为项目添加状态。有了 Deno KV,以及内置于 Deno 运行时的其他云原语,如Deno Queues和Deno Cron,创建可扩展的、生产就绪的应用程序变得前所未有的简单。
我们刚刚发布了 Deno Cron 🦕️🕒️,这是一种添加和管理计划任务的零配置方法,可在 1.38 或更高版本以及 Deno Deploy 上使用。