OBCP V4.0每日一题
问题
在 OceanBase 的存储引擎中,为了缓解 LSM-Tree 带来的读放大问题,主要采用了以下哪种技术?
A. 增加内存缓冲区
B. 布隆过滤器(Bloom Filter)
C. 定期合并(Compaction)
D. 并行查询
答案
B. 布隆过滤器(Bloom Filter)
Tips
- LSM-Tree 的读放大是指读取数据时需要检查多个 SSTable 文件,可能引发多次磁盘 I/O。布隆过滤器是一种高效的概率性数据结构,可以快速判断某个键是否存在于特定 SSTable 中,从而跳过不包含该键的文件,大幅减少无效 I/O,是缓解读放大的核心手段之一。
- 内存缓冲区(MemTable)主要优化写入性能,定期合并(Compaction)主要用于减少文件数量、缓解空间放大,并行查询提升并发能力,但它们都不是直接针对读放大的关键技术。
- OceanBase 为每个 SSTable 维护布隆过滤器,并配合块缓存(Block Cache)和行缓存(Row Cache)共同优化查询性能。
延伸思考
布隆过滤器存在一定的误判率(假阳性),实际使用中可通过调整参数在内存占用和准确性之间取得平衡。深入理解 OceanBase 如何结合布隆过滤器与 Compaction 策略来优化混合负载场景,对提升数据库性能调优能力很有帮助。