在失败的nodetool repair
操作之后,我得到了两个大的sstable文件(下面清单中的最后两个),而不是一个,每个文件的大小都与之前的单个文件相同。现在这些文件不能被普通工具(nodetool clean, nodetool compact, nodetool repair)合并回来。表被复制到另一个cassandra节点(replication_factor: 2),现在也有两个大的sstable文件。
-rw-r--r-- 1 cassandra cassandra 16M Mar 5 12:36 mc-116413-big-Data.db
-rw-r--r-- 1 cassandra cassandra 34M Mar 5 01:21 mc-116320-big-Index.db
-rw-r--r-- 1 cassandra cassandra 39M Mar 3 22:46 mc-116125-big-Index.db
-rw-r--r-- 1 cassandra cassandra 66M Mar 5 12:25 mc-116412-big-Data.db
-rw-r--r-- 1 cassandra cassandra 262M Mar 5 05:51 mc-116365-big-Data.db
-rw-r--r-- 1 cassandra cassandra 263M Mar 5 08:46 mc-116386-big-Data.db
-rw-r--r-- 1 cassandra cassandra 263M Mar 5 11:42 mc-116407-big-Data.db
-rw-r--r-- 1 cassandra cassandra 7.2G Mar 5 03:18 mc-116345-big-Data.db
-rw-r--r-- 1 cassandra cassandra 43G Mar 3 22:46 mc-116125-big-Data.db
-rw-r--r-- 1 cassandra cassandra 48G Mar 5 01:21 mc-116320-big-Data.db```
I suppose that one of this files contains duplicated data. How can I compact files back to a single file?
也许我看得不对,但我在你发布的文件列表中没有看到任何重复的SSTable文件。
如果你指的是这两个:
-rw-r--r-- 1 cassandra cassandra 43G Mar 3 22:46 mc-116125-big-Data.db
-rw-r--r-- 1 cassandra cassandra 48G Mar 5 01:21 mc-116320-big-Data.db
它们不是重复的,因为它们有两个不同的代号——116125
和116320
。这意味着它们也有不同的祖先。
如果你是指这些:
-rw-r--r-- 1 cassandra cassandra 39M Mar 3 22:46 mc-116125-big-Index.db
-rw-r--r-- 1 cassandra cassandra 43G Mar 3 22:46 mc-116125-big-Data.db
-rw-r--r-- 1 cassandra cassandra 34M Mar 5 01:21 mc-116320-big-Index.db
-rw-r--r-- 1 cassandra cassandra 48G Mar 5 01:21 mc-116320-big-Data.db
同样,它们不是彼此的副本。*-Data.db
文件包含实际数据。*-Index.db
文件是包含分区索引的组件文件,即数据文件中用于快速检索的分区索引。
如果你感兴趣,我在这篇文章中更详细地解释了它- https://community.datastax.com/questions/5219/。干杯!
(更新)回答这个后续问题:
你能想象为什么这两个文件没有像往常一样压缩成一个文件吗?
假设表配置了SizeTieredCompactionStrategy
,在将候选表压缩在一起之前,它将需要类似大小的sstable。
默认的最小sstable候选是min_threshold: 4
,因此您需要4个大小相似的sstable来触发压缩。