ZhiChaoLiu
ZhiChaoLiu
SegmentIDGenImpl.updateSegmentFromDb()是每个segment初始化的时候要去执行的。里面有这样的逻辑: if (!buffer.isInitOk()) { leafAlloc = dao.updateMaxIdAndGetLeafAlloc(key); buffer.setStep(leafAlloc.getStep()); buffer.setMinStep(leafAlloc.getStep());//leafAlloc中的step为DB中的step } 初始化(仅执行一次)segment的buffer的时候,这块的updateMaxIdAndGetLeafAlloc就是更新db的max = max + step. 所以,多机起来的时候,同一个biztag的segment后面的机器的maxid都会比前一个大一个step. 同时,后面在set的Value是这样的: long value = leafAlloc.getMaxId() - buffer.getStep(); 这样就解决了多机部署问题。 其实官方的图挺清晰的: 