#b-tree #p2p #hypercore #dat

bin+lib hyperbee

点对点 B-tree

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 异步

Download history 39/week @ 2024-04-01

每月538次下载

MIT/Apache

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
  • 支持键流的关键边界,如 gtlt 等。
  • 接受比较和交换 putdel
  • 支持类似于 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