我使用cqlstablewriter编写数据的相应sstables:
writer.addRow(1, "test", ...);
数据按分区键和聚类键排序,然后我为每行排序的数据调用addrow。
给定分区的数据写入单个sstables(或最多两个sstables)。
两个问题:
cqlstablewriter builder()不需要压缩策略。这正常吗?
已创建的表具有lcs压缩。但是cqlstablewriter没有定义任何策略。因此,在摄入数据之后,数据永远不会改变(在我的情况下!),在我用sstableloader将sstables摄取到cassandra之后,我阻止任何压缩运行有意义吗?或者每次摄入sstableloader后都需要运行压缩吗?
谢谢你让它更清楚一点!
2条答案
按热度按时间jchrr9hc1#
1) 是的,cqlstablewriter只是创建sstables。
2) 当cassandra从sstableloader或
nodetool refresh/import
它会自动进行任何必要的压缩。你不必也不应该做任何事。如果你真的想你可以禁用压缩如果你想
然后它不会做任何事情,你可以忽略它,sstables将保持原样。
只有2个sstables中有分区并不一定意味着读取时只会触及2个sstables。sstable上的bloom过滤器仍将提供误报,如果sstable的数量继续攀升,最终将成为一个问题。但是,如果您的群集密钥随时间递增,则可以使用它来过滤不必要的sstable,并且最小/最大群集密钥保留在元数据中,并签入读取路径(这就是twcs和大多数时间序列数据防止过多累积的方式)。随着sstable计数的增加,这也会对维修和其他操作任务产生很大影响。
最终,除非这是一个问题,否则我会认真地建议保持压缩的原样,如果你认为你大部分都是好的,那么使用sizetiered,它只会防止事情变得疯狂,同时与其他人相比,读写次数最少。如果您的cpu在压缩上达到最大值,那么您应该检查其他错误,因为它不应该消耗那么多(您如何知道它的压缩?),您也可以随时限制压缩吞吐量。
uz75evzq2#
最好让Cassandra来决定何时进行压实,不要试图手动进行。