C++,python,热爱算法和机器学习
全部博文(1214)
分类: 大数据
2014-05-19 17:19:06
Cassandra 1.0 提供了基于ColumnFamily的数据压缩,这也是一个人民群众呼声很高的功能。压缩功能能够有效地减少数据体积,同时也能减少磁盘I/O,特别是对那些读多的应用场景。
压缩可以有效的减小数据体积,可以在相同的内存和磁盘上存储更多的数据。除此之外,通过只解压指定部分的数据块,Cassandra对从磁盘上读取数据的性能也有提升。
与传统数据库系统不同,传统的数据库系统使用压缩通常会对写性能有负面影响,因为传统方法需要先解压原始数据,个性原始数据,再将个性后的数据进行压缩存储。而由于Cassandra的个性操作是追加进行,并不需要对原始数据进行操作,从而避免了二次压缩的问题,写性能会比不使用压缩时提高10%左右。
总的来说,Cassandra使用压缩会得到下面一些性能提升:
在多行并且字段都差不多的ColumnFamilies进行数据压缩会比较合适,比如一个存储了username,email等用户信息的ColumnFamily。当各行数据中相同的值越多时,压缩效果也就越好。
而相反的,如果对于每一行字段都不太相同的数据,使用压缩的效果就不太好了。
当你创建或者修改一个column family时,你可以设置相关的压缩选项,压缩选项包含下面两个:
你可以在创建一个column family的时候就设定其压缩选项,也可以对一个已经存在的column family的压缩选项进行个性。但是这个修改只会对后续数据产生影响,之前保存的SSTable是不会自动重新压缩的。当然,如果你非要让老数据也进行重新压缩,你可以通过使用Cassandra提供的nodetool scrub工具来手动进行操作。
下面是一个例子,使用Cassandra的命令行方式创建了一个带压缩的column family:
[default@demo] CREATE COLUMN FAMILY users
WITH key_validation_class=UTF8Type
AND column_metadata = [
{column_name: name, validation_class: UTF8Type}
{column_name: email, validation_class: UTF8Type}
{column_name: state, validation_class: UTF8Type}
{column_name: gender, validation_class: UTF8Type}
{column_name: birth_year, validation_class: LongType}
]
AND compression_options={sstable_compression:SnappyCompressor, chunk_length_kb:64};
在Cassandra 1.0 中,使用压缩以减小数据尺寸,从而提升性能变得非常容易。你也可以在把Cassandra升级后再按需求调整其块大小。