请解释 Cassandra 中写放大效应和读放大效应的概念,并说明如何分别处理这两种放大效应?
考察说明
考查对 Cassandra 存储引擎中读写放大问题的理解及优化策略。
回答思路
- 【回答框架 1】写放大效应主要由 LSM Tree 的多次压实(compaction)导致,数据在内存 MemTable 和磁盘 SSTable 间多次重写。处理策略包括调整压实策略(如 SizeTieredCompactionStrategy、LeveledCompactionStrategy)、启用压缩、合理配置 MemTable 大小和压实线程等。
- 【回答框架 2】读放大效应源于读取时需要检查多个 SSTable 和 MemTable,可能包括布隆过滤器、分区索引和摘要等。处理策略包括优化布隆过滤器误判率、使用缓存(如 key cache、row cache)、调整分区键设计以减少跨分区读取,以及采用合适的压实策略减少 SSTable 数量。
- 【回答框架 3】在实际操作中,需要权衡读写放大与空间放大,根据工作负载选择压实策略,并监控关键指标如 pending compactions、读延迟等,通过调优参数和集群扩容来缓解放大效应。
- 【关键点 1】写放大主要来自压实过程,可通过选择压实策略和启用压缩来降低。
- 【关键点 2】读放大源于多 SSTable 查询,可通过布隆过滤器和缓存优化减少。
- 【关键点 3】读写放大之间存在权衡,需根据工作负载平衡。
- 【易错点 1】单纯减少 SSTable 数量可能增加写放大,需均衡考虑。
- 【易错点 2】过度依赖缓存可能导致内存压力,影响整体性能。