2 个版本

0.0.1 2022 年 5 月 16 日
0.0.0 2022 年 5 月 16 日

#44 in #multi-threaded

GPL-3.0 许可证

20KB
444

sharded-log

一个针对偶尔将日志刷新到其他系统的负载的批量导向多线程分片日志。所有批次都有一个与它们一起写入的 32 位 CRC。尽管写入可能发生在不同的日志分片上,但恢复是单线程的,并且将按写入过程中写入它们的单调 ID 的顺序恢复批次。请参阅并发测试示例,了解这可能如何推理。

专门构建以补充 marble 磁盘垃圾回收对象存储库,通过在刷新到存储之前缓冲更新。旨在以“滚动”方式使用,即在处理并发写入请求的同时创建一个新的 ShardedLog 实例并替换它,以便在后台刷新到辅助存储,然后在稳定后删除分片日志目录。

use sharded_log::Config;

let config = Config {
    path: "path/to/logs".into(),
    ..Default::default()
};

// purge
config.purge().unwrap();

// logs must be created in fresh directories (after a purge)
let sharded_log = config.create().unwrap();

sharded_log.write_batch(&[b"a", b"b", b"c", b"d"]).unwrap();

for write_batch in config.recover().unwrap() {
  // recover contents to secondary storage
  assert_eq!(write_batch, vec![b"a", b"b", b"c", b"d"]);
}

// purge contents when important data is safe elsewhere
sharded_log.purge().unwrap()

依赖项

~115–335KB