其他
Deno推出高性能键值数据库Deno KV
支持在本地运行或托管
简单但强大
const kv = await Deno.openKv();
const key = ["users", crypto.randomUUID()];
const value = { name: "Alice", created: new Date() };
await kv.set(key, value);
const result = await kv.get(key);
console.log(result.value);
// { name: "Alice", created: 2023-05-01T09:24:07.620Z }
kv.list()
操作列出与特定选择器匹配的所有键。在下面的示例中,所有以特定前缀开头的键都被选中。await kv.set(["users", "alice"], { birthday: "January 1, 1990" });
await kv.set(["users", "sam"], { birthday: "February 14, 1985" });
await kv.set(["users", "taylor"], { birthday: "December 25, 1970" });
// List out all entries with keys starting with `["users"]`
const iter = kv.list({ prefix: ["users"] });
for await (const entry of iter) {
console.log(entry.key);
console.log(entry.value);
}
详情查看文档:https://deno.com/manual/runtime/kv/operations
原子性事务 (Atomic transactions)
Deno KV 使用 kv.atomic()
创建跨多个键的强一致性事务,这些键在默认情况下可立即持久化:
const kv = await Deno.openKv();
const change = 10;
const bob = await kv.get(["balance", "bob"]);
const liz = await kv.get(["balance", "liz"]);
if (liz.value < change) {
throw "not enough balance";
}
const success = await kv.atomic()
.check(bob, liz) // balances did not change
.set(["balance", "bob"], bob.value - change)
.set(["balance", "liz"], liz.value + change)
.commit();
强一致性和高性能
可串行化 (Serializability):事务的最高级别隔离,确保并发事务执行导致系统状态等同于这些事务的顺序。
线性化 (Linearizability):保证诸如读取和写入之类的操作立即出现并实时发生。写入操作完成后,所有后续读取操作都会返回更新后的值,从而确保强大的实时排序。
// Read with eventual consistency from the nearest region
await db.get(["my-key"], { consistency: "eventual" });
// Read with strong consistency from the primary region
await db.get(["my-key"], { consistency: "strong" });
使用示例
下面代码使用 Deno KV 创建了全局一致的持久计数器:
import { serve } from "/std@0.155.0/http/server.ts";
const db = await Deno.openKv();
serve(async (req: Request) => {
await db.atomic().sum(["views"], 1n).commit();
const res = await db.get(["views"]);
const views = res.value.value;
return new Response(`Views: ${views}`);
});
目前要体验 Deno KV,需要排队等候 waitlist 通过:https://deno.com/kv。
往期推荐
终身仁慈独裁者、Python之父龟叔,曾被认为最不可能发明自己的编程语言
电子垃圾Chromebook
🌟 活动推荐
2023 年 5 月 27-28 日,GOTC 2023 全球开源技术峰会将在上海张江科学会堂隆重举行。
为期 2 天的开源行业盛会,将以行业展览、主题发言、特别论坛、分论坛、快闪演讲的形式来诠释此次大会主题 ——“Open Source, Into the Future”。与会者将一起探讨元宇宙、3D 与游戏、eBPF、Web3.0、区块链等热门技术主题,以及 OSPO、汽车软件、AIGC、开源教育培训、云原生、信创等热门话题,探讨开源未来,助力开源发展。
长按识别下方二维码立即查看 GOTC 2023 详情/报名。