使用新的官方 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 });
KV Connect URL 连接到 Deno Deploy KV 数据库看起来像这样
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 数据库,而无需部署项目
- 从您的项目页面,创建一个新的 playground
- 点击设置图标,然后点击 “Project Settings”(项目设置)
- 选择 KV 选项卡,复制出 database ID,该 ID 用于构建关联的 KV Connect URL 并传递给
openKv
(见上文)
要远程连接到您的新 Deno KV 数据库,您还需要创建一个访问令牌,并将其设置为 DENO_KV_ACCESS_TOKEN
环境变量
- 转到您的账户设置
- 向下滚动到您的“Access Tokens”(访问令牌)部分,然后点击“New Access Token”(新建访问令牌)
- 输入描述,例如 “Deno KV Access Token”
- 复制新生成的访问令牌
最后,在运行 Node 项目时,将您的新令牌设置为环境变量 DENO_KV_ACCESS_TOKEN
。现在您可以远程连接到全球托管的 Deno KV 实例了!
支持的运行时
@deno/kv
目标是 Node 18+,针对性能以及与 Deno 本身创建的数据库的兼容性进行了优化。它没有第三方 npm 包依赖项,并在 Deno 本身支持的四种原生架构上使用单个平台特定的二进制文件进行 SQLite 访问。架构适当的原生依赖项在使用标准的 peer dependency mechanism 在 npm install
时选择和安装。
Deno KV 使用 V8 的 序列化格式来存储本地和远程数据库中的值,这在 Deno 中是默认可用的,在 Node 中也通过内置的 v8
模块 默认可用。这个包将在其他 Node 兼容的运行时上运行,前提是提供兼容的 V8 序列化器。有关更多详细信息,请参阅 其他运行时。
开源致谢
此包的源代码是免费提供的,并使用了
- 使用 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 上使用。