OpenAtomFoundation / pikiwidb

a high-performance, large-capacity, multi-tenant, data-persistent, strong data consistency based on raft, Redis-compatible elastic KV data storage system based on RocksDB
BSD 3-Clause "New" or "Revised" License
201 stars 63 forks source link

fix:add class DB & sharedmutex #218

Closed dingxiaoshuai123 closed 7 months ago

dingxiaoshuai123 commented 7 months ago

现在,Storage 的访问无需任何锁,如果都是不涉及 Storage 指针的更改,那么不会存在问题,但是如果有类似于 flushDB 的命令会修改 Storage 的指针,就会在并发的情况下引起空指针问题。针对这种大量读非常小写的情况下,使用一把读写锁来保护 storage 。 所以增加了 DB 类封装了 Storage 类,里面有一把 sharedLock 来保护 Storage ,如果是类似于 flushdb 的操作,上写锁,否则上读锁,如何判断需要对相应的 cmd 加上 flag 。 加锁的位置在 cmd 的 execute 函数中,在进入 do 之前完成上锁。