Deno KV 中保存和打开的数据库在哪里?

问题描述 投票:0回答:1

我一直认为Deno KV是一个SaaS,因为它有价格,因此只存储在云端。这个假设从未受到过挑战,因为每次我使用

openKv
而无需任何参数时,我都可以很好地设置并从 Deno KV 获取条目:

const kv = await Deno.openKv();
const a = await kv.get(["preferences", "ada"]);
console.log(a);
// Result: {"key":["preferences","ada"],"value":{"username":"ada","theme":"dark","language":"en-US"},"versionstamp":"00000000000000090000"}

今天,当我用Fresh运行

routes/test.tsx
时,数据为空:

export const handler: Handlers = {
  async GET(req, ctx) {
    const kv = await Deno.openKv();
    const a = await kv.get(["preferences", "ada"]);
    console.log(a);
    return ctx.render({ a });
  },
};
// Result: {"key":["preferences","ada"],"value":null,"versionstamp":null}

来自 Deno.openKv |运行时 API |德诺

当未提供路径时,数据库将在当前脚本的默认路径中打开。该位置在脚本运行过程中是持久的,并且以原始存储密钥(用于确定 localStorage 持久性的相同密钥)为关键。有关原始存储密钥的更多信息可以在 Deno 手册中找到。

我查看手册和文章 Web Storage API | Deno Docs 似乎就是关于这个的。但我不明白它在说什么。

那么,数据库到底存储在哪里呢?是在云端还是在我的机器上?

saas deno freshjs deno-kv
1个回答
0
投票

当不带参数在本地运行时,Deno KV 实例将在本地计算机上创建(不涉及云)。虽然您无法以编程方式获取确切位置,但您可以运行

deno info
来获取原始存储位置。

14:55:53 ~/dev/deno/my-project main $ deno info
DENO_DIR location: /Users/chris/Library/Caches/deno
Remote modules cache: /Users/chris/Library/Caches/deno/deps
npm modules cache: /Users/chris/Library/Caches/deno/npm
Emitted modules cache: /Users/chris/Library/Caches/deno/gen
Language server registries cache: /Users/chris/Library/Caches/deno/registries
Origin storage: /Users/chris/Library/Caches/deno/location_data

在该原始存储下将是哈希子目录,其中之一将是您的 KV 数据库。例如。在我的 Mac 机器上,我的一个项目的 KV 存储位于

/用户/克里斯/库/缓存/deno/location_data/76e55328e36839ed4769f6e60580dad36584898849bf4a9264fa1be1fc692990/kv.sqlite3

这是“我的项目”存储的默认位置。如果我的项目中有一个

a.ts
b.ts
,通过
deno run a.ts
deno run b.ts
运行,则在使用默认 KV 存储(例如
const kv = await Deno.openKv();)时,两者都将使用相同的本地 KV 存储(如上所示) 
)。然而,我机器上的另一个 deno 项目将有一个单独的哈希值,因此也有单独的位置数据。哈希生成方式的语义没有记录,但它似乎与一个项目相关。或者,您可以通过
const kv = await Deno.openKv('./myKv.db');
指定要创建/使用的数据库的确切位置。

在 Deno Deploy 上,创建了两个 KV 数据库。一份用于生产部署,另一份在所有预览部署之间共享。在 Deploy 中,您无法指定确切的文件位置,只有默认的

await Deno.openKv()
才可以工作(注意,我相信您也可以指定一个自托管 URL)。

至于您在测试与路由代码方面的差异,如果没有进一步了解您的项目和文件设置,我无法回答,除了它们之间的位置存储子目录会有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.