使用新的官方 npm 包在 Node 中使用 Deno KV
自从我们推出 Deno KV 以来,我们的全球托管无服务器数据库直接内置到 Deno 运行时,开发人员非常喜欢它,因为它可以轻松地将状态添加到他们的应用程序,而无需配置或配置数据库
除了 能够远程连接到托管的 Deno KV 实例,我们还发布了 一个独立的开源 denokv
二进制文件 用于自托管 - 包括 连续备份到 S3 或 GCS,并支持时间点恢复。
今天,我们很高兴 将 Deno KV 访问权限带到 Node.js,方法是使用 我们的官方 Deno KV npm 包。现在,您可以使用 Deno KV 的简单 API 将一个全球分布的、支持 ACID 的数据库添加到您的 Node 项目中。
在这篇文章中,我们将介绍
安装和使用
要安装包
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 });
KV Connect 到 Deno Deploy KV 数据库的 URL 看起来像
https://api.deno.com/databases/<database-id>/connect
您项目的 database-id
可以在 Deno Deploy 仪表板 中找到,在项目的 KV 选项卡下。
打开 KV 实例
Deno KV npm 包允许您使用单个函数连接到四种数据库
- 一个全局托管的 Deno Deploy KV 实例,由 FoundationDB 提供支持,并针对读写延迟进行了优化
const kv = await openKv(
"https://api.deno.com/databases/<database-id>/connect",
);
- 一个 denokv 服务,托管在您自己的基础设施上,由 SQLite 提供支持
const kv = await openKv("https://127.0.0.1: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 数据库,而无需部署项目
- 从 您的项目页面,创建一个新的游乐场
- 单击设置图标,然后单击“项目设置”
- 选择 KV 选项卡以复制出构建关联的 KV Connect URL 所需的数据库 ID,以传递给
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
模块。此包将在其他与 Node 兼容的运行时上运行,前提是提供兼容的 V8 序列化程序。有关更多详细信息,请参阅 其他运行时。
开源积分
此包的源代码 免费提供,并使用
- 使用 pb 生成的 protobuf 代码
- 使用 dnt 生成 npm 包
- 支持标准 Node Node-API 本地接口的特定于平台的二进制文件,利用我们现有的
denokv
Rust 代码库,通过优秀的 NAPI-RS 框架 - 由 John Spurlock 贡献的初始代码库,改编自他的开源 kv-connect-kit 项目
下一步
发布 @deno/kv npm 包 使您现在可以在 Node 项目中访问 Deno KV,无论是基于 FoundationDB 的全局管理 Deno KV,还是基于 SQLite 的本地 Deno KV。使用 Deno KV 的简单 API 进行构建,可以轻松地为您的项目添加状态。除了 Deno KV,Deno 运行时还内置了其他云原语,例如 Deno 队列 和 Deno Cron,这些原语可以帮助您更轻松地创建可扩展的生产就绪应用程序。
我们刚刚宣布了 Deno Cron 🦕️🕒️,这是一种零配置方法,用于添加和管理计划任务,可在 1.38 或更高版本以及 Deno Deploy 上使用。