#page #offset #reference #data-structures #disk #tree #traits

no-std bin+lib sanakirja-core-async

支持写时复制的数据结构,可以稳定存储在磁盘(或其他地方)的格式

2 个版本

0.0.2 2023年4月1日
0.0.1 2022年11月11日

#84 in #offset

MIT/Apache

225KB
4.5K SLoC

此 crate 定义了实现可以驻留在主内存或磁盘上的数据结构的工具,这意味着它们的天生栖息地是内存映射文件,但如果这种环境受到威胁,它们可能会寻求在更底层的环境中寻求庇护。

此库的一个核心构建块是虚拟内存页的概念,这些页由外部提供的分配器分配和释放(参见 sanakirja crate 如何做)。这里使用的特定实现旨在允许一个事务性系统,读者可以同时读取结构,而一次只有一个写者。

目前,只实现了 B 树以及以下通用特质

  • LoadPage 是一个用于获取页面指针的特质。在基本版本中,这可能只是返回指向文件的指针,偏移量为请求的偏移量。在更复杂的版本中,这可以用来加密和压缩页面。
  • AllocPage 分配和释放页面,因为数据结构需要持久化到磁盘,我们不能依赖于 Rust 的内存管理为我们完成它。不过,使用此 crate 的用户无需担心这一点。

此外,还可以使用两个其他特质在页面上存储东西: Storable 是一个简单的特质,所有 Sized + Ord 类型(无引用)都可以轻松实现(direct_repr! 宏可以做到这一点)。对于包含指向数据库中分配的页面的引用的类型,比较函数可以被定制。此外,这些类型必须提供这些引用的迭代器,以便在数据结构引用这些类型时进行分叉时,引用计数可以正常工作。

动态大小的类型,或需要以动态方式表示的类型,可以使用UnsizedStorable格式。

依赖项

~0.3–1.1MB
~26K SLoC