看到一篇老调重弹的文章,说数据库按单线程分片读写不就没有冲突了?理论上当然是可行的,lealone 很多年前就实践过了,比如 btree 的每个 page 有且只有一个线程负责读写,理论上就是完美的分片。

问题是实际场景中数据库当前线程接收到的读写请求不一定跟 page 的实际处理线程一致,所以当前线程还是得把数据放到实际处理线程的队列,这时这个队列又变成了共享对象,出入队列本身就耗时,可能还需要唤醒线程去处理它负责的数据,最终实践下来这种分片的性能很差,还不如对 page 实现一个基于 CAS 的轻量级锁高效。

Reply to this note

Please Login to reply.

Discussion

No replies yet.