CQLSSTableWriter:使用sstablesloader提取后是否需要压缩?

时间:2019-05-10 15:46:09

标签: cassandra datastax cassandra-3.0 datastax-java-driver

我使用CQLSSTableWriter来写入数据的相应SSTables:

 writer.addRow(1, "test", ...);

数据是按分区键和聚类键排序的,然后我对已排序数据的每一行调用addRow。

给定分区的数据写入单个SSTables(或最多两个)中。

两个问题:

  1. CQLSSTableWriter builder()不需要压缩策略。那正常吗?

  2. 已创建的表具有LCS压缩。但是CQLSSTableWriter没有定义任何策略。因此,考虑到数据摄取之后再也不会发生变化(就我而言!),并且在我使用sstablesloader将SSTables摄取至Cassandra之后,是否可以防止运行任何压缩是否有意义?还是在每次使用sstablesloader进行摄取后都需要进行压缩?

感谢让它变得更加清晰!

2 个答案:

答案 0 :(得分:2)

1)是的,CQLSSTableWriter仅创建sstables。

2)当Cassandra从sstableloader或nodetool refresh/import获取sstable时,它将自动进行任何必要的压缩。您不必也不应该做任何事情。

如果您确实想要,则可以禁用压缩

ALTER TABLE keyspace.table WITH COMPACTION = {'class': 'SizeTieredCompactionStrategy', 'enabled': 'false' }`

然后它什么也不会做,您可以忽略它,而稳定表将保持原状。

仅将2个sstables包含在分区中并不一定意味着在读取时仅会触摸2个。 sstable上的bloom筛选器仍会提供误报,并且如果sstable的数量继续攀升,最终将成为一个问题。但是,如果您的聚类密钥随时间增加,则可用于过滤出不必要的稳定数据,最小/最大聚类密钥将保留在元数据中并在读取路径中进行检查(这是TWCS和大多数时间序列数据如何防止过多使用的原因)建立)。随着稳定数量的增长,这也大大影响了维修和其他操作任务。

最终除非出现问题,否则我强烈建议您保持压缩状态不变,如果您认为自己大多数情况都很好,请使用SizeTiered,并且在其他读写操作最少的情况下,这样做只会防止事情发疯。如果您的CPU在压缩方面已达到极限,那么您应该检查其他错误,因为它不会消耗太多(您怎么知道其压缩?),您也可以随时限制压缩吞吐量。

答案 1 :(得分:1)

最好让Cassandra决定何时执行压缩,而不要尝试手动执行。