KitDB支持自定义一致性的实现方式
KitDB对多节点一致性的支持是通过拆分操作和数据接入实现的,可见下图:
实现DB.FunctionCommit接口
public interface FunctionCommit {
void call(DBCommandChunk dbCommandChunk) throws KitDBException, RocksDBException;
}
DBCommandChunk是KitDB数据存入磁盘的操作类,获取了DBCommandChunk,即可根据一致性规则,把对应的操作提交到本地和远程节点
对应数据操作
DBCommandChunk中的DBCommandChunkType,可以判断出对应的操作类型
本地
DBCommandChunkType | 操作 |
---|---|
NOM_COMMIT | simpleCommit |
TX_LOGS | commit |
TX_COMMIT | commitTX |
TX_ROLLBACK | rollbackTX |
SIMPLE_COMMIT | simpleCommit |
远程
DBCommandChunkType | 操作 |
---|---|
NOM_COMMIT | simpleCommit |
TX_LOGS | 本地缓冲区 |
TX_COMMIT | 本地缓冲区-simpleCommit |
TX_ROLLBACK | 本地缓冲区-清除 |
SIMPLE_COMMIT | simpleCommit |
请参考:top.thinkin.lightd.raft.DBStateMachine
实现一致性协议
此步骤可能会比较复杂或难以理解。如需实现,可研究raft和KitDB-Raft如何对接JRaft,即可理解
替换db.functionCommit
db.functionCommit = logs -> dbRequestProcessor.call(logs);