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
194 stars 63 forks source link

feat: flush oldest cf #275

Closed dingxiaoshuai123 closed 4 months ago

dingxiaoshuai123 commented 4 months ago

1, 使用 WriteBufferManager 控制一个 DB 内所有 RocksDB 的上限, 当超过上限之后, Flush 最老的 CF. 2, 定期检查队列长度, 当队列长度超过阈值, 手动 Flush 最旧 CF. 3, 根据 Flush 次数触发 do_snapshot 行为.

修改的地方: 1 在 flush listener 中同步 flush 会死锁, 具体的位置还没有找, 所以改为异步 flush. 2 更新 last_flush_index 的逻辑有问题, 导致一直是 0, 已更改. 3 记录 SequenceNumber 的逻辑有问题, 已更改. 4 对一个 flush 带来的连锁反应进行了模拟.