跳到主要内容
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 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

支持 getgetManysetdeleteatomicenqueueclose 方法,甚至包括新的 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 mechanismnpm 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 QueuesDeno Cron,创建可扩展的、生产就绪的应用程序比以往任何时候都更加简单。

我们刚刚发布了 Deno Cron 🦕️🕒️,这是一种零配置方法,用于添加和管理计划任务,可在 1.38 或更高版本以及 Deno Deploy 上使用。