1 个不稳定版本

0.2.0 2021年5月7日
0.1.2 2021年4月8日
0.1.1 2021年4月8日
0.1.0 2021年1月24日

#2945数据库接口

Apache-2.0

73KB
408

dstore 是一个受 FAASM 项目启发的部分分布式存储框架。

数据库

构建为一个内存数据存储,采用双层架构,可以在与单个 '全局' 数据存储同步的情况下,在节点上存储键值对。键是 UID,技术上应永久只与 一个 值关联。希望这将通过使用该值的哈希来实现。

架构

双层架构由每个节点上的内存数据存储组成,称为 '本地',它以键值对的形式存储数据对象的副本,其中键作为 UID,使用户能够在每个节点上拥有数据的单个副本,从而减少访问相同数据的网络访问。

演示

为了演示 Dstore 的工作原理,我们创建了一个基于 CLI 的键值数据库,功能并不完整。要尝试它,请按照以下步骤操作:

  1. 下载代码
git clone https://github.com/vyuham/dstore
  1. 运行服务器(确保已安装 rustup
cargo run --example global

确保终端上显示以下内容

Dstore server listening on 127.0.0.1:50051
  1. 在另一个终端中启动客户端
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