#key-value-store #log-structured #implemented #delete #index #64-bit #merge-tree

neutrondb

NeutronDB 是任何实现的数据类型日志结构合并树键值存储

30 个版本 (14 个稳定)

6.0.0 2023 年 10 月 8 日
5.0.4 2023 年 1 月 1 日
5.0.3 2022 年 12 月 9 日
4.0.0 2022 年 10 月 18 日
0.9.19 2021 年 10 月 8 日

#7 in #64-bit

每月 45 次下载

MIT 许可证

43KB
762

NeutronDB

NeutronDB 是任何实现的数据类型日志结构合并树键值存储。

作者

关于

Neutron 表二进制格式

  • 版本 (1 字节)
  • 键计数 (8 字节)
  • 索引位置 (8 字节)
  • 键位置 (8 字节)
  • 布隆过滤器 (动态大小)
  • 索引数据 (动态大小)
  • 键数据 (动态大小)
  • 值数据 (动态大小)

特性

  • 支持 Put、Get 和 Delete 的键值存储
  • 支持 Rust 原生类型
  • 支持实现 IntoBytes 和 TryFromBytes 的任何类型
  • 支持表中 64 位数据位置,最大 ~18 EB 文件

使用

安装

  • 通过在 Cargo.toml 中的 [dependencies] 下添加 neutrondb = "6.0.0" 使用 Crates

  • :目录路径->存储/错误
  • 示例: let mut accounts_store: Store<Hash, Account> = Store::new("./ndb")?;

存入

  • 存入: &, &-> ()/错误
  • 示例: accounts_store.put(&Hash, &Account)?;

获取

  • 获取: &->/错误
  • 示例: let account = accounts_store.get(&Hash)?;

删除

  • 删除: &-> ()/错误
  • 示例: accounts_store.delete(&Hash)?;

缓存限制

  • 缓存限制: u64
  • 设置缓存限制
  • 默认和最小缓存限制为1MB
  • 示例: accounts_store.cache_limit(1_000_000_000)

未来

  • 🚀 批量请求以提高性能
  • 📥 store.puts(&[(K,V)])
  • 📤 store.gets(&[K]) -> BTreeMap<K,V>
  • 🗺️ store.map: (Fn: (K,V) -> T) -> Vec
  • 🧠 store.fold: acc, Fn: (K,V) -> acc -> acc
  • 🔍 store.any: Fn: (K,V) -> bool -> V
  • 🗄 store.all: Fn: (K,V) -> bool -> BTreeMap<K,V>
  • 📸 快照

可扩展性

  • 支持64位数据位置
  • 使用ZFS

内存

NeuronDB需要内存

  • 通用:Graves(已删除项的键哈希)
  • 缓存:键哈希与值
  • 刷新与压缩:新表索引与数据位置

许可证

MIT许可证

版权所有Stelar Labs

特此授予任何人免费获得本软件及其相关文档副本(“软件”)的权利,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许将软件提供给其他人使用,但须遵守以下条件

上述版权声明和本许可声明应包含在软件的任何副本或实质性部分的副本中。

免责声明

软件按“现状”提供,不提供任何形式的质量保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定用途和侵权保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是基于合同、侵权或其他方式,这些责任源于、产生于或与软件或其使用或任何其他方式有关。

依赖关系

~6.5MB
~119K SLoC