pika icon indicating copy to clipboard operation
pika copied to clipboard

关于存储层mset加锁的问题

Open leonjxchen opened this issue 3 years ago • 5 comments

我理解的是,对于mset操作来说,是不需要加锁的。内部是组的一个batch去写入的,而batch的写入是原子的,write接口本身也是线程安全的,但是看存储层的code,还是对每一个key都加了锁,这块是基于什么考虑的?这里不考虑运用层对key加的锁,就考虑一个场景,单纯的复用blackwindow这种场景。每杂结构加锁这个容易理解,因为需要先从cf里取一次meta,然后再写入。而取meta跟写入中间有time window

leonjxchen avatar Dec 10 '21 09:12 leonjxchen

pika 对于写操作会添加一个行锁。加锁的作用是保证key写binlog的顺序与写DB的顺序一致。从而slave通过binlog增量同步时,与master一致。

kernelai avatar Dec 14 '21 08:12 kernelai

你说的这个binglog是rocksd的,还是pika自身的?

leonjxchen avatar Dec 14 '21 08:12 leonjxchen

你说的,我理解,是pika上层加的那层锁的作用,而不是在blackwindow这个库里加的

leonjxchen avatar Dec 14 '21 08:12 leonjxchen

对于写入是需要锁key的,避免冲突。存储上层的锁,是锁db handle的,有dropdb这种,

wanghenshui avatar Jan 04 '22 02:01 wanghenshui

这个锁的力度确实有点大,可以优化,读场景没有锁的必要

wanghenshui avatar Jan 04 '22 02:01 wanghenshui

henshui 关于 blackwidow 中锁的使用的优化 :https://wanghenshui.github.io/2020/07/14/reduce-lock.html

luky116 avatar May 19 '23 11:05 luky116