3个版本
0.1.2 | 2019年10月27日 |
---|---|
0.1.1 | 2019年10月23日 |
0.1.0 | 2019年10月23日 |
#1509 in 异步
每月21次下载
在mycelium中使用
235KB
5K SLoC
Mycelium D.D.M.
Mycelium去中心化数据网格的目标是成为一个去中心化的数据存储,在多个设备(如手机、平板电脑和电脑)上创建数据网格,这些设备可以配置为以有用的方式在设备之间共享和复制数据。
- 该项目正在从学习项目转变为项目集项目。在遥远的未来,它将成为一个功能数据库。我们有一个博客、维基页面、代码文档、CI构建和一个很好的代码仓库。Mycelium是一个点对点分布式数据库项目。目前使用Docker-Compose来测试基本网络功能,主要是因为它快速简单。一旦完成,我们将使用类似于ns-3的工具。
我们现在在哪里?
Mycelium核心使用基本的键/桶存储。这些数据桶被称为标签。Mycelium生态系统的核心数据结构使用Crossbeam库。Mycelium目前作为一个内存数据库运行,但可以将其写入磁盘。目前这项操作很慢,并且是在操作系统文件系统之上进行的。
Mycelium索引也使用Crossbeam的SkipLMS结构来索引回核心。Mycelium索引还将创建不同标签中项目之间的关系。从长远来看,我希望使用机器学习来替换索引(pdf)。。
我们有一个功能性的TCP堆栈,但没有p2p网络。UDP组播将创建一个网络节点网格。Mycelium的目标是在LAN上,节点将配置自己,一旦上线。Mycelium将根据数据的使用情况和一些配置在节点之间分发数据。在未来,经过一些重构以支持async/await后,我们将从Tokio迁移到rust-libp2p,Tokio作为执行器。
用户文档
Mycelium核心
数据IO库。
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许可证的保护。
依赖项
~11MB
~180K SLoC