26个稳定版本
1.4.1 | 2024年2月10日 |
---|---|
1.3.3 | 2023年4月30日 |
1.3.2 |
|
1.2.16 | 2021年11月23日 |
1.2.4 | 2021年3月21日 |
84 在 #offset 中排名
每月305次下载
在 11 个crate中使用 (直接使用2个)
235KB
4.5K SLoC
此crate定义了实现可以存在于主内存或磁盘上的数据结构的工具,这意味着它们自然的栖息地是内存映射文件,但如果这种环境受到威胁,它们可能会寻求在更底层的环境中寻求庇护。
该库的一个核心构建块是虚拟内存页的概念,这些页由外部提供的分配器分配和释放(参见sanakirja
crate是如何做到这一点的)。这里使用的特定实现旨在允许一个事务性系统,其中读者可以并发地读取结构,同时每次只有一个写者。
目前,仅实现了B树以及以下通用特质
LoadPage
是一个特质,用于获取页面的指针。在最基本的版本中,这可能会返回指向文件的指针,偏移量为请求的偏移量。在更复杂的版本中,这可以用来加密和压缩页面。AllocPage
分配和释放页面,因为数据结构需要持久化到磁盘,我们无法依赖Rust的内存管理为我们完成这一任务。不过,使用此crate的用户不必担心这一点。
此外,还可以使用另外两个特性来在页面上存储内容:Storable
是一个简单的特性,所有 Sized + Ord
类型且不包含引用的都可以轻松实现(direct_repr!
宏可以完成这个任务)。对于包含指向数据库中分配的页面的引用的类型,可以自定义比较函数。此外,这些类型必须提供这些引用的迭代器,以便在引用这些类型的结构体被分支时,引用计数能够正确工作。
动态大小的类型或需要以动态大小表示的类型可以使用 UnsizedStorable
格式。
依赖项
~0–550KB
~11K SLoC