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

将存储引擎中直接写 Rocksdb 的部分换成调用封装的 Batch 接口 #280

Open longfar-ncy opened 4 months ago

longfar-ncy commented 4 months ago

为方便在 raft 模式和单机模式之间切换,所有的写命令底层在写 rocksdb 时应当采用我们封装的 Batch 接口。

参考PR:https://github.com/OpenAtomFoundation/pikiwidb/pull/285

修改方法:

参考上述PR,总结起来有四件事:

  1. 构造我们封装的 Batch ,不使用 rocksdb::Batch ;
  2. 把 put 和 delete 换成 Batch 接口的 put 和 delete;
  3. 调用 Batch 的 Commit 方法,并返回 Commit 方法的返回值
  4. 在 consistency_test.go 中增加简单的一致性测试

小技巧

对于第 2 点,也是最麻烦的地方,但可以用 vim 的替换来做,非常方便。 这里我把替换的命令放出来,只需要在命令模式下,在下边这行命令前边加上行号范围即可

示例:如图,找到想要替换的函数的范围(行号),然后添加在上述命令前即可。比如我想要替换 LPushx 这个函数的写操作,找到开始行号和结束行号,然后在VIM中输入下边内容即可:

:356,387s/batch\.\(\w\+\)(handles_\[\(\w\+\)\], \(.\+\));/batch->\1(\2, \3);/gc

image

待做事项

// Strings Commands

smj:

// Hash

ncy:

// Sets Commands

// Lists Commands

zzl:

xd: (下周不来就分出去)

// Zsets Commands

todo: lh:

// Keys Commands

Issues-translate-bot commented 4 months ago

Bot detected the issue body's language is not English, translate it automatically.


Title: Replace the part of the storage engine that directly writes Rocksdb with calling the encapsulated Batch interface to facilitate switching between stand-alone mode and Raft cluster mode.