跳至主要内容
Deno 2 终于来了 🎉️
了解更多
Deno KV is more flexible and powerful with self-hosting options and continuous backups

使用新的官方 npm 包在 Node 中使用 Deno KV

自从我们推出 Deno KV 以来,我们的全球托管无服务器数据库直接内置到 Deno 运行时,开发人员非常喜欢它,因为它可以轻松地将状态添加到他们的应用程序,而无需配置或配置数据库

const kv = await Deno.openKv();
使用 Deno KV 在一行代码中添加状态。

除了 能够远程连接到托管的 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

getgetManysetdeleteatomicenqueue,和 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 上使用。