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

CQLSSTableWriter : do I need compaction after ingestion with sstablesloader?

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

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

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

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

两个问题:

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

  2. 已创建的 table 具有 LCS 压缩。但是 CQLSSTableWriter 没有定义任何策略。因此,关于摄取后数据永远不会改变(在我的情况下!),并且在我使用 sstablesloader 将 SSTables 摄取到 Cassandra 之后,我阻止 运行ning 进行任何压缩是否有意义?还是每次使用 sstablesloader 摄取后我总是需要 运行 压缩?

多亏了,说得更清楚了!

最好让Cassandra来决定什么时候执行压缩,不要尝试手动执行。

1) 是的,CQLSSTableWriter 只是创建 sstables。

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

如果你真的想要,你可以禁用压缩

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

然后它不会做任何事情,你可以忽略它,sstables 将保持原样。

分区只有 2 个 sstables 并不一定意味着只有 2 个会被读取。 sstables 上的布隆过滤器仍会提供误报,如果 sstables 的数量继续攀升,它最终将成为一个问题。但是,如果您的聚簇键随着时间的推移而增加,那么它可用于过滤掉不必要的 sstables 以及 min/max 聚簇键保留在元数据中并在读取路径中检查(这是 TWCS 和大多数时间序列数据防止的方式堆积过多)。随着 sstable 数量的增加,这也会对维修和杂项操作任务产生很大影响。

最终,除非它是一个问题,否则我会认真地建议只保留压缩,如果你认为你大部分都很好,请使用 SizeTiered,它只会防止事情变得疯狂,同时与其他人相比进行最少的读写。如果您的 CPU 在压缩上达到最大值,您应该检查其他问题,因为它不应该消耗那么多(您如何知道它的压缩?),您也可以随时限制压缩吞吐量。