Raft Engine 内存使用

有没有Raft Engine相关的资料和介绍 基于这个问题,如果Raft Engine 内存使用超过上限了,会怎么处理呢?比如key特别多

如果Raft Engine内存使用超过上限,它将尝试通过日志压缩来释放一些内存。如果这不足以减少内存使用量,则Raft Engine将停止接受新数据,并开始拒绝写入请求,直到内存使用量下降到可接受的水平。

可以增加mul tables的数量

停止接收新的数据,这是不是对数据库这种产品不太友好。从Raft Engine的设计来看,并不要求内存索引的高可用。要不干脆用一个轻量级的KV 存储 , 如 LevelDB 来存储索引呢(不要求高可用的话,不需要刷wal,那么就不会多一次IO,本身内存索引的量,可以将LevelDB的层数配置的少一点,比如2层或者3层,不会对系统的CPU,IO 等资源造成很大的负担)。 可以将Raft Engine 作为一个最轻量级的LSM 的KV分离实现。

Raft Engine 有这个mul tables 的概念么? 没怎么找到 :joy:

如果 Raft Engine 内存使用超过上限,TiKV 会触发 Raft Engine 的 GC 机制,将一些不再需要的数据从内存中清除,以释放内存空间。

Raft Engine 的 GC 机制是基于 log 的,即通过删除一些旧的 log 来释放内存。具体来说,Raft Engine 会将一些旧的 log 合并成一个新的 log,然后删除旧的 log,以此来减少内存使用。

如果 key 特别多,Raft Engine 内存使用超过上限的情况可能会更容易发生,但是通过 GC 机制,TiKV 可以保证 Raft Engine 的内存使用始终在可控范围内。

这个Raft Engine 会不会做一些 Cache , 比如,主向备同步Log后, 此时备不会将该Log 进行apply(还没有commit)那么下次备需要将该Log 进行apply时是从磁盘读嘛?

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。