Cassandra如何选择压缩策略

SSTable的压缩是Cassandra的重要设计之一,墓碑的删除,数据的合并都依赖压缩才能完成,目前Cassandra有四种压缩策略,其中的一种已经被废弃。

压缩除了解决墓碑等根本问题外,选择不同的压缩策略也影响你的读写性能和集群稳定性。

至于如何选择压缩策略,官方有一系列问句帮你决定:

你存储的是和时间序列有关的数据吗?

如果是的,那么最佳的压缩策略就是TWCS,如果不是请继续后面的问题。

你的表是读多写少,还是写多读少?

如果读是写的两倍以上,特别是随机读的场景,建议用LCS策略,如果读和写差不多,用LCS引起的性能缺失和带来的好处相比,可能并不划算了。注意LCS策略很容易被大量的写击垮的。

你的表里的数据更新频繁吗?

LCS的一个好处就是让有关联的数据集中在一组SSTable文件里。如果你的数据更新不频繁甚至是不更新的,用STCS也可以达到这样的目的,而不会有LCS带来的性能牺牲。

你是否需要可预测的读写?

这一段比较难以理解,博主用白话描述:你是否需要服务级别的读,就是对读的tps和时延是都有要求。如果有的话,即便是你的读写比很小,还是建议用LCS,因为LCS可以控制SSTable的数量和大小,从而保证稳定的读时延,当然写性能就会受到影响,不过这一点你可以通过扩节点的方式解决~

你的表是否有大量的batch提交?

对于批量读和写,STCS的性能要优于LCS。批量提交不会引起太多的碎片文件,所以LCS的好处体现不出来,而且大量的批处理可能会击垮LCS策略的表。

你的磁盘空间是否有限?

在磁盘利用效率方面LCS要比STCS好,它只需要相比存储的数据10%的额外冗余空间,而STCS和DTCS需要50%以上的空间。注意DTCS已经废弃了。

你的系统IO是否到达瓶颈?

LCS比DTCS和STCS产生更多的密集IO操作,切换到LCS带来的额外IO开销可能会抵消它所带来的优势。

通过上述问题,你是否知道自己应该选择什么样的压缩策略了吗?不要盲目做决定,建议你在正式上线前创建三个节点,设置你选择的策略,使用cassandra-stress对你的系统做个压力测试。

留言

提示:你的email不会被公布,欢迎留言^_^

*

验证码 *