一直只是看到官方有关LeveledCompactionStrategy优于SizeTieredCompactionStrategy的说法,主要有:
- 节省空间,在做Compaction操作过程中,最多需要预留10%的额外空间,而不是SizeTieredCompactionStrategy做major compaction需要的一倍空间,提高了磁盘的利用率。
- 读性能的提升。主要是因为level内部数据有序,没有重叠。重复数据只会在不同的level之间出现。据说可以保证90%读,只需要读一个sstable。我想这也要在一定的读写比例之下,才能实现。具体有待测试。
对于写性能,我没看到什么说明,如果有,大家看到可以推荐给我。而我这里实际就写性能进行了测试。空间利用率和读性能后续会有相应数据。 cassandra采用最新稳定版本1.1。默认打开compression设置。LeveledCompactionStrategy设置sstable文件大小为10m。其他均采用默认配置。采用ycsb,对单台服务器,使用100个客户端同时入库。共入数据100000000条,每条大小1k。 当使用SizeTieredCompactionStrategy时,测试数据如下:
- 概况
RunTime(ms) | 7292871 |
Throughput(ops/sec) | 13712.02 |
Operations | 100000000 |
AverageLatency(us) | 7275.795 |
MinLatency(us) | 116 |
MaxLatency(us) | 6754395 |
95thPercentileLatency(ms) | 7 |
99thPercentileLatency(ms) | 34 |
- OPS情况
- AverageLatency情况
当使用LeveledCompactionStrategy时,测试数据如下:
- 概况
RunTime(ms) | 6305630 |
Throughput(ops/sec) | 15858.84 |
Operations | 100000000 |
AverageLatency(us) | 6279.091 |
MinLatency(us) | 113 |
MaxLatency(us) | 4792173 |
95thPercentileLatency(ms) | 6 |
99thPercentileLatency(ms) | 29 |
- OPS情况
- AverageLatency情况
从上面的图中,我们可以看出,LeveledCompactionStrategy情况下的写性能要优于SizeTieredCompactionStrategy。平均的吞吐量高出2000多,平均延迟低1ms。