一个数据存储项目,考虑到Cassandra卓越的写性能,决定使用Cassandra作为数据存储服务器。
使用前进行了若干性能测试:分别为写性能和读性能。
版本:1.1.2。服务器集群:三台服务器,8核,8G内存,同一局域网。
结果:
写性能测试,复制因子(replication_factor)=2,成功写入一份即可,共测试了4个多小时,写入1亿余条记录,平均每秒6400多条。
读性能测试,使用二级索引查找,成功获取一份即可,平均每秒900多条记录。
-------------------------------------以上结果有待进一步优化------------------------------------
记录下调优主要的几个方面:
1)表创建(使用了CQL),配置相关参数:
compression_parameters:sstable_compression = 'DeflateCompressor' AND compression_parameters:chunk_length_kb = 64 AND caching='KEYS_ONLY';
其中,compression可以减少磁盘使用量,对读写效率都有一定的提升效果;caching设置为KEYS_ONLY,只对关键字缓存,需要注意的是虽然设置为ALL可以缓存行数据,命中减少两次查找,但是由于数据量大,内存有限,所以会导致查询效率很低。
2)设置两块物理硬盘,路径分别对应的data_file_directories和commitlog_directory
3)cassandra.yaml中commitlog_directory设置为16。
4)concurrent_writes:64(并没有比较修改前后写性能变化,不确定优化效果)
cassandra.yaml中,其余参数不变。
问题:
1)当Cassandra关闭后,内存占用还高达5G,不清楚具体原因。
2)使用主键进行查询,性能比第二主键快的不是一点半点,原因还有待研究。
--------------------------------------------------------后续 优化-------------------------------------------------------
接上:
这几天又做了一些调整,如下,
1)修改JDK,改用JDK7,64位。
2)表创建(使用了CQL),配置相关参数修改为:
compression_parameters:sstable_compression = 'SnappyCompressor' AND compression_parameters:chunk_length_kb = 64 AND caching='KEYS_ONLY' AND read_repair_chance = 0.000001;
测试结果:
写平均每秒8400多条。
读平均每秒2000多条记录。
有一定的提升。
PS:对上面第一个问题,我用的是top命令查看, 有以下结果:
Mem: 7772048k total, 5703856k used, 2068192k free, 24992k buffers
是我理解有误,used并不表示使用了多少,而是linux内核当前可控制的内存数,这个和windows是不同的。