1 个不稳定发布
0.0.0 | 2024年6月19日 |
---|
#23 在 #追加日志
105KB
2.5K SLoC
正在进行中:这个crate尚未经过测试,仍在积极开发中。
追加日志
介绍
在开发基础设施软件时,预写日志或追加日志起着重要作用,人们多次重实现相同的函数,但实际上,追加日志的核心就是 write
,replay
和 rewrite
。
这个crate提供了一个通用型追加日志实现,基于 std::fs::File
,内存映射,无锁的ARENA(SkipMap)有三种实现方式。
-
aol::fs::AppendLog
:基于
std::fs::File
的通用追加日志实现。-
适用于
- 编码条目的大小小于64字节。
- 清单文件。
- 写入操作不是太频繁。
-
优点
- 可增长,无需预先分配。
- 支持自动重写。
- 文件中没有空洞。
-
-
aol::memmap::AppendLog
:基于
memmap
的通用追加日志实现。-
适用于
- 对于任何追加日志,如果你不关心预分配文件,并且知道你的数据永远不会超过预分配的大小。
-
优点
- 支持自动重写。
- 文件中没有空洞。
- 由于此实现由一个ARENA支持,读写操作均不需要分配。
- 读写性能快,由内存映射支持,不需要额外的I/O。
-
-
aol::memmap::sync::AppendLog
:基于基于锁的ARENA的通用追加日志实现
skl::SkipMap
(支持内存和磁盘)。-
适用于
- 追加日志的大小不能达到4GB。
- 可以自己管理增长和重写的最终用户。
-
优点
- 由于此实现由一个ARENA支持,读写操作均不需要分配。
- 读写性能快,由内存映射支持,不需要额外的I/O。
- 无锁和并发安全。
- 支持内存和磁盘。
- 可以在
no_std
环境中使用。
-
安装
[dependencies]
aol = "0.0.0"
许可证
aol
适用于 MIT 许可证和 Apache 许可证(版本 2.0)条款。
详情请见 LICENSE-APACHE,LICENSE-MIT。
版权所有 (c) 2024 Al Liu。
依赖项
~0.1–9MB
~91K SLoC