【leveldb源码】“写”流程及实现

这篇博客详细介绍了leveldb的写操作流程,包括加互斥锁、写log、更新memtable以及根据option决定是否创建快照。在写log阶段,针对put和delete操作有不同的处理方式,随后通过InsertIntoHandler实现memtable的更新,通过估算内存使用量为compact提供依据。最后,根据配置选项可能生成快照并释放锁。
摘要由CSDN通过智能技术生成

step0. 加互斥锁,ReentrantLock

step1. 写log

在这里插入图片描述
实现批量写操作的接口如下,因为一条log的格式如上,因此在put方法里,除了k-v的长度,还需要3个int (type+key length+value length),也就是12位byte的长度,delete因为不需要添加value信息,因此需要k的长度+2个 int (type+key length)

public class WriteBatchImpl
        implements WriteBatch
{
   
    private final List<Map.Entry<Slice, Slice>> batch = new ArrayList<>();
    private int approximateSize;
    public WriteBatchImpl put(Slice key, Slice value)
    {
   
        batch.add(Maps.immutableEntry(key, value));
        approximateSize += 12 + key.length() + value.length();
        return this;
    }
    public WriteBatchImpl delete(Slice key)
    {
   
        batch.add(Maps.immutableEntry(key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值