出品 | OSC开源社区(ID:oschina2013)
Deno 团队宣布推出 Deno KV,并称其是具备强一致性的键值数据库,支持在全局范围复制以在全球 35 个地区实现低延迟读取。
Deno KV 重要特性包括:
  • 支持在本地运行或托管
Deno KV 支持无缝集成到开源 Deno runtime 中,允许在本地运行它或将其部署为零配置的托管服务。
在本地运行的时候,Deno KV 由 SQLite 提供支持,为本地开发、测试或单区域生产系统提供轻量级且易于使用的解决方案。
当将应用程序部署到 Deno Deploy 时,Deno KV 数据库会自动由 FoundationDB 提供支持。该托管解决方案由 Deno 公司运营,无需开发者手动配置或维护即可确保高性能和可靠性。
  • 简单但强大
Deno KV 专为 JavaScript 设计,可以存储任何 JavaScript 结构化的可序列化值,例如对象、数组、BigInts、日期等。
const
kv =
await
Deno.openKv();


const
key = [
"users"
, crypto.randomUUID()];

constvalue
= { 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"
] });

forawait (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();
详情查看文档:https://deno.com/manual/runtime/kv/transactions
  • 强一致性和高性能
Deno KV 是一个强一致性数据库,提供外部一致性,包括:
  • 可串行化 (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"/[email protected]/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;

returnnew
Response(
`Views: ${views}`
);

});
目前要体验 Deno KV,需要排队等候 waitlist 通过:https://deno.com/kv。
往期推荐

电子垃圾Chromebook


🌟 活动推荐
2023 年 5 月 27-28 日,GOTC 2023 全球开源技术峰会将在上海张江科学会堂隆重举行。
为期 2 天的开源行业盛会,将以行业展览、主题发言、特别论坛、分论坛、快闪演讲的形式来诠释此次大会主题 ——“Open Source, Into the Future”。与会者将一起探讨元宇宙、3D 与游戏、eBPF、Web3.0、区块链等热门技术主题,以及 OSPO、汽车软件、AIGC、开源教育培训、云原生、信创等热门话题,探讨开源未来,助力开源发展。
长按识别下方二维码立即查看 GOTC 2023 详情/报名。
继续阅读
阅读原文