7 个不稳定版本 (3 个破坏性更新)
0.4.0 | 2024年3月31日 |
---|---|
0.3.1 | 2024年2月29日 |
0.2.2 | 2024年2月23日 |
0.1.0 | 2024年2月12日 |
#345 in 异步
每月538次下载
140KB
3K SLoC
Hyperbee
基于 Hypercore 构建的点对点只增 B-tree。与 JavaScript 版本 兼容。
$ cargo add hyperbee
使用方法
来自 示例
use hyperbee::Hyperbee;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let hb = Hyperbee::from_ram().await?;
// Insert "world" with key "hello"
hb.put(b"hello", Some(b"world")).await?;
// Get the value for key "hello"
let Some((_seq, Some(val))) = hb.get(b"hello").await? else {
panic!("could not get value");
};
assert_eq!(val, b"world");
// Trying to get a non-exsitant key returns `None`
let res = hb.get(b"no key here").await?;
assert_eq!(res, None);
// Deleting a key returns `true` if it was present
let res = hb.del(b"hello").await?;
assert!(res.is_some());
// Getting deleted key returns `None`
let res = hb.get(b"hello").await?;
assert_eq!(res, None);
Ok(())
}
其他语言绑定
我们使用 UniFFI 为其他语言生成库。要构建 Python 库,请运行
cargo build -F ffi && cargo run -F ffi --bin uniffi-bindgen generate --library target/debug/libhyperbee.so --language python --out-dir out
这会生成一个文件 out/hyperbee.py
,可以用于。此文件需要 libhyperbee.so
与 .py
文件一起存在。可分发 Python 软件包仍在开发中。目前仅测试了 Python。请参阅 测试 以获取示例用法。
与 JS Hyperbee 的兼容性
- 与 JS Hyperbee 文件完全功能互操作
- 读取、写入和删除操作
- 有序键流,类似于 JS 的
createReadStream
- 支持键流的关键边界,如
gt
、lt
等。 - 接受比较和交换
put
和del
。 - 支持类似于 JS 的前缀键操作
sub
- 支持类似于 JS 的前缀键操作
sub
- 一对一二进制输出 #23
未来工作
- 构建 FFI 包装器
- 改进的线格式
- 可配置的树参数
开发
使用 $ cargo test
运行测试。
每个重要的 pull request 都应该包括更新 CHANGELOG.md
发布
发布主要使用 cargo release
处理。在每次Rust发布后,我们手动发布一个新的Python包。使用 maturin
构建Python包,并使用 twine
发布。
# create a virtualenv with the tools we need
python -m venv venv && . venv/bin/activate
pip install --upgrade twine maturin
# build the wheels
python -m maturin build --release
# Upload the wheels to pypi. This uses my api token from ~/.pypirc
python -m twine upload target/wheels/hyperbeepy-<target>.whl
依赖项
约12–25MB
约372K SLoC