2 个版本
0.1.1 | 2019年10月27日 |
---|---|
0.1.0 | 2019年10月23日 |
#1 in #mycelium
24 每月下载量
在 2 个crate中使用 (通过 mycelium_lib)
275KB
6K SLoC
Mycelium D.D.M.
Mycelium 分散数据网格的目的是成为一个分散的数据存储,在多个设备上创建数据网格,如手机、平板电脑和PC,可以配置为以有用的方式在设备之间共享和复制数据。
- 该项目正在从学习项目转变为项目组合。在遥远的未来,将有一个功能数据库。我们有一个博客、维基页面、代码文档、CI构建和优秀的代码仓库。Mycelium 是一个P2P分布式数据库项目。目前使用Docker-Compose来测试基本网络功能。主要是因为它既快又简单。一旦完成,我们将使用类似ns-3的工具。
我们现在在哪里?
Mycelium 核心使用基本的键/桶存储。这些数据桶被称为标签。Mycelium 生态系统的基础数据结构使用Crossbeam库。Mycelium 目前作为一个内存数据库运行,但可以将其自身写入磁盘。目前此操作速度较慢,且在操作系统文件系统之上运行。
Mycelium 索引也使用Crossbeam的SkipLMS结构来索引回核心。Mycelium 索引还将创建不同标签项之间的关系。从长远来看,我希望使用机器学习来代替索引(pdf)。。
我们有一个功能性的TCP堆栈,但没有P2P网络。UDP多播将创建网络节点的网格。Mycelium 的目标是网格节点将配置自己,随着它们通过局域网上线。Mycelium 将根据数据的使用和某些配置在节点之间分发数据。在未来的某个时候,我们将通过一些重工作来支持异步/等待,将使用类似rust-libp2p的工具,Tokio作为执行器。
用户 文档
Mycelium 核心库
数据IO库。
Mycelium 索引库
Mycelium 索引将创建关系数据库功能。数据以紧凑的二进制格式存储。为了创建关系,每条数据可以给定一个或多个索引术语。稍后,将添加关系,允许您关联数据。最终,在索引上进行连接/过滤和操作。索引可以包含节点中包含的任何数据,可以是公开的。
Mycelium
Web服务器
节点之间的TCP正常请求。
UDP将用于使用UDP本地多播注册节点P2P。也将用于网格上的通用请求。
Mycelium 库
将Mycelium嵌入到另一个应用程序的主要库。
使用说明
当前使用方式不够人性化。包结构在一个单独的工作空间内。最终,随着项目的进一步发展,将分为多个库、可执行文件和工具。
- 克隆此仓库
- 创建项目
- 在新项目的 cargo.toml 中使用 lib_mycelium 的路径
[dependencies]
lib_mycelium = { path = "../myceliumdds/lib_mycelium" }
main.rs
extern crate lib_mycelium;
// Start a TCP Server default 127.0.0.1:34120
let config = Config::default();
let db = Mycelium::init_db(config);
mycelium_lib::start_local(db.clone());
// TCP Connect and run:
// msql insert [0, 0, 0, 0] doctor
// insert byte[] into the database container doctor. Statement creates container if it does
// not currently exists.
// msql select doctor
// selects all items that have been inserted into the container doctor
或者不需要 TCP 服务器
let config = Config::default();
let db = Mycelium::init_db(config);
let cmd_txt = format!("Insert {} duck", "Quack Quack!".as_bytes());
let cmd = Command::parse(cmd_txt.as_str()).unwrap();
match db.execute_command(cmd).unwrap() {
(Result::Id(id), None, None) => {
println!("ID of inserted item: {:?}", id)
}
_ => { unimplemented!() }
}
// or a list of results
let cmd = Command::parse("Select from duck").unwrap();
match db.execute_command(cmd).unwrap() {
(Result::List, None, Some(list)) => {
for item in list {
println!("item: {:?}", item)
}
},
_ => { unimplemented!() }
}
集成
项目用于测试开发库的可使用性和一致性。
基准测试
库,用于跟踪和图表函数性能随时间的变化。
安装/使用 Mycelium D.D.S.
安装 rust。克隆此仓库。使用 cargo 构建和运行。
附加文档
克隆此仓库后,可以通过运行 "cargo doc" 找到开发附加文档。
贡献!
我欢迎对这个项目的任何贡献。项目和所有贡献都将采用 MIT 许可证。
依赖项
~6.5MB
~122K SLoC