Segmented Log 分段日志

Martin Flower Segmented Log

我的使用场景:
在自研分布式流批存储系统时,元数据居于commit log的方式导致日志过大时,采用了分段日志的处理方式,下文内容翻译至马丁的文章,同时结合了自己遇到的问题。

Segmented Log 分段日志的思路是将原本单一的commit log切分成多个固定大小的小文件,我采用的是64M大小块,太大的话影响重启后读取,太小又造成频繁IO。

在什么时候切分文件呢? 基于commit log 思路,我们需要在写日记之前进行文件大小判断进行切分,这个文件大小状态在内存中进行维护,伪码如下

//持久化命令时
public Long writeEntry(WALEntry entry) {
   
	//检测是否需要切分
    maybeRoll();
    //commit log
    return openSegment.writeEntry(entry);
}

private void maybeRoll() {
   
	//判断设置的文件大小
    if (openSegment.
            size() >= config.getMaxLogSize()) {
   
            //刷盘
        openSegment.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值