2 个版本
0.0.2 | 2023年4月1日 |
---|---|
0.0.1 | 2022年11月11日 |
#84 in #offset
225KB
4.5K SLoC
此 crate 定义了实现可以驻留在主内存或磁盘上的数据结构的工具,这意味着它们的天生栖息地是内存映射文件,但如果这种环境受到威胁,它们可能会寻求在更底层的环境中寻求庇护。
此库的一个核心构建块是虚拟内存页的概念,这些页由外部提供的分配器分配和释放(参见 sanakirja
crate 如何做)。这里使用的特定实现旨在允许一个事务性系统,读者可以同时读取结构,而一次只有一个写者。
目前,只实现了 B 树以及以下通用特质
LoadPage
是一个用于获取页面指针的特质。在基本版本中,这可能只是返回指向文件的指针,偏移量为请求的偏移量。在更复杂的版本中,这可以用来加密和压缩页面。AllocPage
分配和释放页面,因为数据结构需要持久化到磁盘,我们不能依赖于 Rust 的内存管理为我们完成它。不过,使用此 crate 的用户无需担心这一点。
此外,还可以使用两个其他特质在页面上存储东西: Storable
是一个简单的特质,所有 Sized + Ord
类型(无引用)都可以轻松实现(direct_repr!
宏可以做到这一点)。对于包含指向数据库中分配的页面的引用的类型,比较函数可以被定制。此外,这些类型必须提供这些引用的迭代器,以便在数据结构引用这些类型时进行分叉时,引用计数可以正常工作。
动态大小的类型,或需要以动态方式表示的类型,可以使用UnsizedStorable
格式。
依赖项
~0.3–1.1MB
~26K SLoC