QuestDB commit log提交前无法实时查询数据相关问题咨询
QuestDB写入数据提交前不可查问题解答
1. 该现象是否符合QuestDB正常运行逻辑
完全符合。
QuestDB默认采用异步追加写入机制:数据写入时会先进入内存缓冲区,只有等commit log完成刷盘提交、对应表的读版本更新后,查询引擎才能访问到新写入的数据。这个设计是默认一致性保障的一部分,避免查询读到半写、未持久化的脏数据,同时能最大化写入吞吐量,默认配置下提交延迟通常在几毫秒到几十毫秒区间。
2. 是否支持配置查询未完成提交的内存数据
支持,可通过两类配置调整实现:
- 缩短自动提交触发阈值:在配置文件
server.conf中调整两个核心参数:- 调低
cairo.max.uncommitted.rows:当内存中未提交的写入行数达到该阈值时立即触发提交,调低后可以减少单批次待提交的数据量,降低数据可见延迟 - 调低
cairo.commit.interval:缩短自动提交的时间间隔,单位为毫秒,设置为较小值时可以让数据更快完成提交进入可查询状态
- 调低
- 直接开启未提交数据读取权限:在
server.conf中设置cairo.read.uncommitted=true,开启后查询引擎不需要等待commit log提交完成,就可以直接读取内存缓冲区中的写入数据。注意开启该配置后存在一致性风险:如果进程在提交前崩溃,内存中未持久化的数据会丢失,查询到的这部分数据不会最终落盘,仅适合对实时性要求极高、可容忍极小概率不一致的场景。
内容的提问来源于stack exchange,提问作者Shimon Doodkin
相关产品推荐
相关产品推荐

