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

The way Pikiwidb does snapshots. #207

Closed dingxiaoshuai123 closed 6 months ago

dingxiaoshuai123 commented 8 months ago
  1. on_snapshot_save:变成空操作。需要braft暴露一个可以主动设置snapshot log index的接口。(panlei zhoukaiyan) 1.1 改造 FSMCaller::do_snapshot_save(SaveSnapshotClosure* done) :修改赋予 last_applied_index 的值。 1.2 故障恢复的回放点是可以动态设置的,替换掉为启动之后的apply-index
  2. 访问不平均时,memtable可以不进行flush,导致内存里最小的Log index一直不推进。需要一个机制主动去flush掉这些停留很久的log index。(ningchangyuan hjw) 2.1 eventlisten 监听 flush 事件,在回调时检查 log 数量,超过阈值 x 之后, flush 一个 cf :选择出一个 (当前 seq 与 所有 mem 的 first_seq 的最大差值,且超过一个阈值)对应的 cf 。 2.2 调优:找出合理的最大差值阈值。从 memtable 对应的 braft 日志条数来反推当前 cf 落后的总量。
  3. on_snapshot_load: 因为save是空操作,install snapshot会变成一个即时行为,需要重载一下snapshot reader和writer。(dxs wxr) 3.1 https://luobuda.github.io/2022/02/15/braft-snapshot%E5%AE%9E%E7%8E%B0/ 借鉴看看 3.2 通过迭代器生成 SST 文件并通过 ingest 方法导入 RocksDB 实例 3.3 生成 checkpoint 将文件发送给其他 node 。
super-Pan66 commented 7 months ago

https://github.com/OpenAtomFoundation/pikiwidb/pull/238 https://github.com/OpenAtomFoundation/pikiwidb/pull/245

panlei-coder commented 6 months ago

https://github.com/OpenAtomFoundation/pikiwidb/pull/275