#wait-free #metadata #page #key #key-value-database #64-bit

pagetable

适用于大致连续键的免等待4级64位页表

24个版本

新版本 0.4.6 2024年8月20日
0.4.5 2023年8月5日
0.4.3 2023年7月10日
0.3.0 2022年10月3日
0.0.1 2018年6月3日

#182并发

Download history 74/week @ 2024-05-02 58/week @ 2024-05-09 76/week @ 2024-05-16 82/week @ 2024-05-23 169/week @ 2024-05-30 79/week @ 2024-06-06 83/week @ 2024-06-13 118/week @ 2024-06-20 63/week @ 2024-06-27 96/week @ 2024-07-04 74/week @ 2024-07-11 125/week @ 2024-07-18 134/week @ 2024-07-25 142/week @ 2024-08-01 114/week @ 2024-08-08 343/week @ 2024-08-15

每月776次下载
用于 15 个crate(直接使用2个)

MIT/Apache

12KB
220

pagetable

免等待4级页表,将u64键映射到&AtomicU64值。页扇出为2^16。如果键不存在,则在遍历层级时原子地创建中间页,并将值初始化为0

这是一个相对专业的数据结构,但对于需要跟踪具有从密集键空间分配的逻辑ID的许多项的并发系统维护元数据很有用,例如,数据库希望根据其64位ID跟踪页面位置,尽管它在碎片整理过程中被随机重写。

API

#[derive(Default)]
pub struct PageTable { .. }

pub fn get(&self, key: u64) -> &AtomicU64 { .. }

示例

let pt = PageTable::default();

for i in 0..100_000_000 {
    pt.get(i).fetch_add(1, Ordering::SeqCst);
}

for i in 0..100_000_000 {
    let value = pt.get(i).load(Ordering::SeqCst);
    assert_eq!(value, 1);
}

无运行时依赖