1 个不稳定发布

0.0.0 2024年6月19日

#23#追加日志

MIT/Apache

105KB
2.5K SLoC

正在进行中:这个crate尚未经过测试,仍在积极开发中。

追加日志

通用型追加日志实现。

github LoC Build codecov

docs.rs crates.io crates.io

license

英文 | 简体中文

介绍

在开发基础设施软件时,预写日志或追加日志起着重要作用,人们多次重实现相同的函数,但实际上,追加日志的核心就是 writereplayrewrite

这个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-APACHELICENSE-MIT

版权所有 (c) 2024 Al Liu。

依赖项

~0.1–9MB
~91K SLoC