4 releases
0.2.4 | Dec 2, 2022 |
---|---|
0.2.3 | May 27, 2022 |
0.2.2 | May 25, 2022 |
0.0.0 | Feb 14, 2019 |
#1977 in Database interfaces
25MB
2.5K
SLoC
Contains (WOFF font, 25KB) 1473b8e731818a5aa2a7e71e2f59a808.woff, (WOFF font, 21KB) 20516c7a076429487def5c801a0c0450.woff, (WOFF font, 16KB) assets/stats/fonts/nucleo.woff, (WOFF font, 13KB) assets/stats/fonts/nucleo.woff2
Rod
Rust Object Database.
The decentralized social networking application Iris-messenger syncs over Rod peers by default.
Use
Install Rust first.
Install & run
cargo install rod
rod start
Library
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!");
}
Status
15/5/2022:
- Basic
- CLI for running the server
- Incoming websockets
- Outgoing websockets (env PEERS=wss://some-server-url.herokuapp.com/ws)
- Multicast (currently size limited to 65KB — large photos in messages will not sync over it)
- In-memory storage
- TLS support (env CERT_PATH and KEY_PATH)
- Advanced deduplication of network messages
- Publish & subscribe (network messages only relayed to relevant peers)
- Disk storage (sled.rs)
- Hash verification for content-addressed data (
db.get('#').get(data_hash).put(data)
) - Signature verification of user data (
db.get('~' + pubkey).get('profile') ...
) - Encryption & decryption (usually not needed on the server, but used on the client side in js, like iris private messaging)
Issues
- Multicast doesn't relay large messages like Iris posts with photos
Develop
cargo install cargo-watch
RUST_LOG=debug cargo watch -x 'run -- start'
cargo test
Watch for code changes and re-run tests that contain the word "stats":
RUST_LOG=debug cargo watch -x 'test stats'
cargo bench
Run on Heroku
heroku create --buildpack emk/rust
git push heroku master
or:
Dependencies
~27–43MB
~793K SLoC