pika
pika copied to clipboard
关于存储层mset加锁的问题
我理解的是,对于mset操作来说,是不需要加锁的。内部是组的一个batch去写入的,而batch的写入是原子的,write接口本身也是线程安全的,但是看存储层的code,还是对每一个key都加了锁,这块是基于什么考虑的?这里不考虑运用层对key加的锁,就考虑一个场景,单纯的复用blackwindow这种场景。每杂结构加锁这个容易理解,因为需要先从cf里取一次meta,然后再写入。而取meta跟写入中间有time window
pika 对于写操作会添加一个行锁。加锁的作用是保证key写binlog的顺序与写DB的顺序一致。从而slave通过binlog增量同步时,与master一致。
你说的这个binglog是rocksd的,还是pika自身的?
你说的,我理解,是pika上层加的那层锁的作用,而不是在blackwindow这个库里加的
对于写入是需要锁key的,避免冲突。存储上层的锁,是锁db handle的,有dropdb这种,
这个锁的力度确实有点大,可以优化,读场景没有锁的必要
henshui 关于 blackwidow 中锁的使用的优化 :https://wanghenshui.github.io/2020/07/14/reduce-lock.html