我打算为行数和墓碑打开给定cf的所有sstables。它实际上是ISSTableScanner,并且像往常一样它必须扫描sstables中的每一行。
如果给定cf的sstable数量有限,这样可以正常工作。但是,如果你有1000个sstables,这种方法会遇到性能问题,因为它必须打开每个sstable和scan。
有没有最好的办法打开给定cf的所有sstables?我知道Runnable Interface用于SSTableReader openAll()方法。除此之外,有没有最好的方法来实现这一目标?
MapReduce对此有帮助吗?。提前感谢。
谢谢, -Suyodha
答案 0 :(得分:2)
如果您正在寻找墓碑的数量,您可以通过对sstable统计数据的estimatedTombstoneDropTime
中的区间数进行求和来得到它。
如果您正在查找哪个分区/行包含大多数逻辑删除,您可以使用https://github.com/tolbertam/sstable-tools(可能某天在sstablemetadata命令中包含在C *中作为CASSANDRA-1148的一部分)并调用“describe”命令,它会给你墓碑领袖。你可以看到它只适用于单个sstable的实现here,但是调用openall只是一个很薄的包装器,它真的可以并行打开它们。
https://github.com/spotify/cassandra-opstools中还有spcassandra-tombstones
,您可以看到here的实施。