CQLSSTableWriter:使用 sstablesloader 摄取后是否需要压缩?
CQLSSTableWriter : do I need compaction after ingestion with sstablesloader?
我使用 CQLSSTableWriter 来写入我的数据的相应 SSTables :
writer.addRow(1, "test", ...);
数据按分区键和聚类键排序,然后我为排序后的每一行数据调用addRow。
给定分区的数据写入单个 SSTable(或最多两个)。
两个问题:
CQLSSTableWriter builder() 不需要压缩策略。这正常吗?
已创建的 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 在压缩上达到最大值,您应该检查其他问题,因为它不应该消耗那么多(您如何知道它的压缩?),您也可以随时限制压缩吞吐量。
我使用 CQLSSTableWriter 来写入我的数据的相应 SSTables :
writer.addRow(1, "test", ...);
数据按分区键和聚类键排序,然后我为排序后的每一行数据调用addRow。
给定分区的数据写入单个 SSTable(或最多两个)。
两个问题:
CQLSSTableWriter builder() 不需要压缩策略。这正常吗?
已创建的 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 在压缩上达到最大值,您应该检查其他问题,因为它不应该消耗那么多(您如何知道它的压缩?),您也可以随时限制压缩吞吐量。