单条CQL INSERT语句直接执行与封装LOGGED BATCH的Scylla性能差异
Scylla中单个INSERT与单语句LOGGED BATCH的性能差异
直接执行单条INSERT,和把它封装成唯一语句的LOGGED BATCH执行,在Scylla上有明显的性能差异——LOGGED BATCH的执行效率会更低,原因主要有这几点:
- 额外的日志写入开销:LOGGED BATCH为了保证原子性,必须先把batch元数据写入系统表
system.batch_log,这多了一次磁盘IO操作,而单条INSERT完全不需要这一步。 - 协调器节点的额外工作:处理LOGGED BATCH时,协调器要跟踪batch的执行状态,还要处理重试、回滚等容错逻辑,这些额外流程会直接增加执行延迟。
- 协议层处理更复杂:CQL协议对batch的解析、验证步骤比单条INSERT繁琐,会消耗更多CPU和内存资源,哪怕只有一条语句也是如此。
如果换成UNLOGGED BATCH,单语句的性能会和直接INSERT接近,但LOGGED类型的因为强制的日志写入机制,性能劣势是无法避免的。
内容的提问来源于stack exchange,提问作者Rado Buransky
相关产品推荐
相关产品推荐

