1 个不稳定版本
0.2.0 | 2021年5月7日 |
---|---|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#2945 在 数据库接口 中
73KB
408 行
dstore 是一个受 FAASM 项目启发的部分分布式存储框架。
数据库
构建为一个内存数据存储,采用双层架构,可以在与单个 '全局' 数据存储同步的情况下,在节点上存储键值对。键是 UID,技术上应永久只与 一个 值关联。希望这将通过使用该值的哈希来实现。
架构
双层架构由每个节点上的内存数据存储组成,称为 '本地',它以键值对的形式存储数据对象的副本,其中键作为 UID,使用户能够在每个节点上拥有数据的单个副本,从而减少访问相同数据的网络访问。
演示
为了演示 Dstore 的工作原理,我们创建了一个基于 CLI 的键值数据库,功能并不完整。要尝试它,请按照以下步骤操作:
- 下载代码
git clone https://github.com/vyuham/dstore
- 运行服务器(确保已安装 rustup)
cargo run --example global
确保终端上显示以下内容
Dstore server listening on 127.0.0.1:50051
- 在另一个终端中启动客户端
cargo run --example local
确保终端上显示以下内容
dstore v0.1.0 (addr: 127.0.0.1:50052)
This is an experimental database, do contribute to further developments at https://github.com/vyuham/dstore.
Use `.exit` to exit the repl
db >
现在您已经了解了 dstore 的一些工作原理 :D
REPL 命令
演示的 REPL 使用与 KVDB 类似的命令,您可以使用以下命令与之交互
- SET: 用户/进程可以使用
SET
/PUT
命令存储系统中的数据,如下所示
db> SET key value
输出 Database updated
表示 key
现在在 dstore 中映射到 value
。当您尝试在 'Local' 中设置一个已存在的键时,预期会得到以下输出
Key occupied!
当键仅存在于 'Global' 中时,它会在本地更新,并且 SET
操作会放弃,并显示以下消息
(Updated local) Key occupied!
- GET: 用户/进程可以使用
GET
/OUT
命令从系统访问数据,如下所示
db> GET key
这将输出
db: key -> value
上述输出表示 key
在 dstore 中映射到 value
。如果您尝试获取映射到系统中任何值的随机键,您将收到以下输出
Key-Value mapping doesn't exist
当您尝试获取一个在'Local'中不可用但在'Global'中存在(与值hello
相关联)的键(例如hi
),预期会收到以下输出
global: hi -> hello (Updating Local)
- DEL: 用户/进程可以使用
DEL
/REM
关键字来删除键值对的本地和全局副本,如下所示
db> DEL key
这可能会仅删除当前'Local'和'Global'中的键值映射,而其他'Local'可能仍然保留副本,因为目前REPL
线程阻止了update
线程,导致始终可能不支持对非唯一KEYs进行失效。需要讨论如何在所有'Local'中反映更改。为了测试这些说法,请更改'example/local.rs'中local_addr
的端口号,并尝试打开几个'Local'客户端,每个客户端分配一个唯一的端口号,并执行与删除键值对相关的不同顺序的任务。
贡献
请考虑提交一个问题来讨论可能的功能添加和框架的使用案例。我们很乐意审阅真正的PR以修复错误、解决问题和添加功能,所以请考虑打开一些!
一如既往,保持礼仪,并遵循rust-lang行为准则。谢谢!
依赖关系
~6–18MB
~201K SLoC