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

no-std bin+lib sanakirja-core

支持在磁盘(或其他地方)上存储的复制-on-write 数据结构,具有稳定的格式

26个稳定版本

1.4.1 2024年2月10日
1.3.3 2023年4月30日
1.3.2 2022年12月13日
1.2.16 2021年11月23日
1.2.4 2021年3月21日

84#offset 中排名

Download history 80/week @ 2024-03-11 108/week @ 2024-03-18 72/week @ 2024-03-25 179/week @ 2024-04-01 103/week @ 2024-04-08 70/week @ 2024-04-15 88/week @ 2024-04-22 69/week @ 2024-04-29 71/week @ 2024-05-06 84/week @ 2024-05-13 94/week @ 2024-05-20 155/week @ 2024-05-27 68/week @ 2024-06-03 78/week @ 2024-06-10 65/week @ 2024-06-17 67/week @ 2024-06-24

每月305次下载
11 个crate中使用 (直接使用2个)

MIT/Apache

235KB
4.5K SLoC

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

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

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

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

此外,还可以使用另外两个特性来在页面上存储内容:Storable 是一个简单的特性,所有 Sized + Ord 类型且不包含引用的都可以轻松实现(direct_repr! 宏可以完成这个任务)。对于包含指向数据库中分配的页面的引用的类型,可以自定义比较函数。此外,这些类型必须提供这些引用的迭代器,以便在引用这些类型的结构体被分支时,引用计数能够正确工作。

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

依赖项

~0–550KB
~11K SLoC