包含标签 列存 的文章

Optimal Column Layout for Hybrid Workloads

基于 HTAP 场景的列布局优化,仍然使用列布局,但是对列做水平分区,一个分区内包含多个 block,每个block 的大小是 CPU cache 的数倍,这样更好利用CPU;每个分区根据是否为边界(0 或 1 表示),输出为一堆的 bit范围,这是一个 NP hard问题,也有相关研究可以解决此问题;工作负载包括:点查询、范围查询、插入、删除、更新;每种场景对应底层 I/O 包括 随机读、随机写、顺序读、顺序写,不同场景对于 block的访问频率也是不同的,论文给出了 10 种统计的直方图;之后收集各种负载的 block 访问情况然后离线分析,再将分析后的结果优化,输出为一堆bit,这样就可以动态调整分区,达到了自适应的效果;从性能分析结果看,可以适用于各种场景,除了读基本不变,其他场景都有大幅度提升,同时吞吐量也保持不变

阅读全文

Column-Stores vs. Row-Stores: How Different Are They Really?

论文中通过行存系统来模拟列存,并将几个可能提升的关键点:延迟物化、块迭代、压缩、invisible-join,挨个拆分,并分析每种可能提升的原因和提升比例‘在行存的系统中使用垂直分区依然达不到列存性能,因为垂直分区后需要冗余存储主键,重建这些tuple 需要hash-join,数量大内存CPU开销也大;全索引如果返回的数据多hash-join压力大可能会更慢,反之可能更快;物化视图最好只需要读取部分数据,bitmap选择率高时效率会变差。对于列存:块迭代可以提升5% - 50%性能(取决于压缩)、invisible-join可以提升50% - 70%、压缩为2倍,如果数据有序可以量级提升、延迟物化提升3倍,如果将这些全部去掉,列存跟行存就差不多了;在列存中使用反规范化大宽表效果不好,增加维度表列冗余数据变多、只有大宽表的维度属性是排序高度压缩的才有效

阅读全文