#图数据库 #分布式数据库 #WebSocket #去中心化 #去中心化应用 #多播 #社交

bin+lib rod

通过 WebSocket 和多播同步的分布式图数据库

4 个版本

0.2.4 2022 年 12 月 2 日
0.2.3 2022 年 5 月 27 日
0.2.2 2022 年 5 月 25 日
0.0.0 2019 年 2 月 14 日

#1510数据库接口

每月 22 次下载

MIT 许可证

25MB
2.5K SLoC

包含 (WOFF 字体,25KB) 1473b8e731818a5aa2a7e71e2f59a808.woff,(WOFF 字体,21KB) 20516c7a076429487def5c801a0c0450.woff,(WOFF 字体,16KB) assets/stats/fonts/nucleo.woff,(WOFF 字体,13KB) assets/stats/fonts/nucleo.woff2

Rod

Rust 对象数据库。

去中心化社交网络应用 Iris-messenger 默认通过 Rod 节点同步。

使用

首先安装 Rust

安装并运行

cargo install rod
rod start

use rod::{Node, Config, Value};
let mut db = Node::new_with_config(Config {
    outgoing_websocket_peers: vec!["wss://some-server-to-sync.with/ws".to_string()],
    ..Config::default()
});
let mut sub = db.get("greeting").on();
db.get("greeting").put("Hello World!".into());
if let Value::Text(str) = sub.recv().await.unwrap() {
    assert_eq!(&str, "Hello World!");
}

状态

15/5/2022:

  • 基本
  • 用于运行服务器的 CLI
  • 传入 WebSocket
  • 传出 WebSocket(环境变量 PEERS=wss://some-server-url.herokuapp.com/ws)
  • 多播(目前大小限制为 65KB — 消息中的大照片无法通过它同步)
  • 内存存储
  • TLS 支持(环境变量 CERT_PATH 和 KEY_PATH)
  • 高级网络消息去重
  • 发布和订阅(仅将网络消息中继到相关节点)
  • 磁盘存储 (sled.rs)
  • 针对内容寻址数据的哈希验证(《code>db.get('#').get(data_hash).put(data)
  • 用户数据的签名验证(《code>db.get('~' + pubkey).get('profile') ...
  • 加密和解密(通常在服务器上不需要,但在客户端(如 js 中的 iris 私信)中使用)

问题

  • 多播无法中继像 Iris 带照片的帖子这样的长消息

开发

cargo install cargo-watch
RUST_LOG=debug cargo watch -x 'run -- start'
cargo test

关注代码更改并重新运行包含“stats”一词的测试

RUST_LOG=debug cargo watch -x 'test stats'
cargo bench

在 Heroku 上运行

heroku create --buildpack emk/rust
git push heroku master

Deploy

依赖项

~25–41MB
~776K SLoC