#write-ahead-log #fifo-queue #wal #disk #operations #word #revert

qwal

基于磁盘的写入前日志,可以作为FIFO队列使用

1 个不稳定版本

0.1.0 2024年4月10日

#447数据库接口

Download history 116/week @ 2024-05-06 271/week @ 2024-05-13 191/week @ 2024-05-20 259/week @ 2024-05-27 195/week @ 2024-06-03 325/week @ 2024-06-10 438/week @ 2024-06-17 215/week @ 2024-06-24 239/week @ 2024-07-01 233/week @ 2024-07-08 66/week @ 2024-07-15 279/week @ 2024-07-22 36/week @ 2024-07-29 26/week @ 2024-08-05 119/week @ 2024-08-12

每月468次下载

Apache-2.0

50KB
1K SLoC

Rust 795 SLoC // 0.1% comments Shell 235 SLoC // 0.0% comments

仓库模板 构建状态 质量检查 许可证检查 安全检查 代码覆盖率

类似队列的磁盘WAL


发音为 Quál —— 来自德语单词 agony —— 因为它是。

特性

tokio

使用tokio类型

async-std

使用async-std类型

操作

基本概念很简单,qwal 支持4种基本操作

push

将新条目添加到队列末尾,返回其索引。

pop

从队列中读取下一个索引,如果有,返回前一个条目及其索引;如果没有,则返回无。

ack

确认处理条目,确认其已入队。

revert

回滚到队列中最后确认的条目 - 将清除/排空从该点以来的任何条目。

性能特性

push

将数据写入磁盘并执行fsync。如果在最后一次push之后执行了pop,可能还会执行一次seek

pop

从磁盘读取数据。如果在最后一次read之后执行了push,可能还会执行一次seek

ack

不执行任何磁盘操作,ack操作在push操作期间或作为关闭序列的一部分持久化。

操作

qwal 将所有限制视为软限制,这意味着在操作超过限制之后才会被认为是达到限制,而不是在操作之前。

chunk_size

为了允许更容易地回收空间,WAL 被存储在多个块中。块大小定义了限制。当 push 操作使块超出 chunk_size 时,块被认为是满的。

max_chunks

同时可以激活和打开的块软限制。当需要创建 max_chunks + 1 时,WAL 被认为是满的。

依赖项

~2–13MB
~155K SLoC