compaction时两种算法分别有什么不同呢?

看了下compaction时候的源码,貌似compaction的时候会选择HORIZONTAL_COMPACTION或VERTICAL_COMPACTION。
VERTICAL_COMPACTION好像是表的列比较多(我看配置里是大于5列以上)就会走这种。这种是以列组的形式走 VerticalBetaRowsetWriter::add_columns 这个函数

HORIZONTAL_COMPACTION走的和写数据时候的方法一样是HorizontalBetaRowsetWriter::add_chunk 这个函数

想请问下这两种compaction 算法有何不同呢?分别对应怎样的情况进行优化呢?如果相反使用会对结果产生影响么?

同问,有人知道吗

compaction本质上就是给N个有序文件排序,
按列compaction:
把排序列读出来然后添加一个permutation。排好序之后其他列按照 permutation输出就行。
不需要上来把所有列数据读出来.
按行compaction:
一次你要把100个列读出来然后做个排序,都要hold在内存里,列多内存用的太多扛不住。
对列少的情况下性能会稍微好些