请大佬帮忙讲解一下enable-async-apply-prewrite的用法,感谢
如果将enable-async-apply-prewrite参数设置为true时,写入流程会发生怎样的变化?是否意味着仅需完成store线程而无需等待apply线程,就可以确认写入完成?这样设置是否会有负面影响?
开了以后,部分异步 prewrite 直接在raft日志apply后就可以返回成功了。
我理解开启没什么负面影响,只是加速了一些prewirte的快速返回。
1 个赞
谢谢。也就是说成功写入了raftDB之后,直接确认写入操作 成功,而无需再等待KVDB写入?
应该没有什么负面影响
1 个赞
对,没啥影响,不会因此丢数据。
1 个赞
如果没有负面影响,为什么不直接使用这种机制,而是要设置这个参数开关,想听听详细的解释
另外,在leader节点,做apply这个动作,就是把数据从内存落盘到KV DB。我听到的apply理由是这样子:是因为后续的读,也是在leader节点读这个数据,所以必须落盘,是为了后续能够正常读到数据,为了读的一致性。
假设上面的理由成立,我有另外一个疑问:为什么leader节点读的时候,一定要从硬盘读,而不是从内存读,是不是因为内存里面的数据格式不完整,和落盘的数据是不同的,从内存读出来不能解析数据格式。(至少MySQL、Oracle是从内存读出来的,也是通常说的内存命中率,这个是数据库性能的关键)