clickhouse

elecclickhousetron

Posted by nomadli on June 27, 2023

表引擎

  • TinyLog 单机只读, 按列存储为单独的压缩文件, 不支持多写会损坏,不支持索引
  • Memory 读写无锁,无索引,无压缩
  • Merge 读引擎,并发读取其它本地表
  • MergeTree 单机、巨量数据插入、按规则合并而非UPDATE、按主键排序、可主键分区、支持副本、支持数据采样建表
  • ReplicatedMergeTree 比MergeTree多了定时删除相同主键的重复项
  • SummingMergeTree 比MergeTree多了定时合并相同主键的重复项,数值相加,非数值使用旧值
  • Distribute 分布式不存储数据,在集群中进行分布式并行查询

表分区

  • 分区是按某列的条件分目录存储
  • 如按时间分区
  • 加速查询 wherer

分片

  • 集群中的一个实例节点
  • 将一份数据分片加速查询

文件系统

  • table名/分区(partition)名/xxxx.xx
    • checksums.txt:校验文件,二进制保存其它文件size及size哈希值,校验文件的完整性和正确性
    • columns.txt: 明文存储列字段信息
    • count.txt: 明文存储计数,记录当前数据分区目录下数据的总行数
    • primary.idx: 主索引二进制存储稀疏索引
    • [Column].bin: 压缩存储数据,默认LZ4压缩
    • [Column].mrk: 二进制存储列字段标记,保存bin数据的偏移量
    • [Column].mrk2:自定义大小的索引间隔,标记文件会以.mrk2命名
    • partition.dat、minmax_[Column].id:使用分区会额外生产partition.dat与minmax索引文件,它们均用二进制格式存储。partition.dat用于保存当前分区下分区表达式最终生成的值;而minmax索引用于记录当前分区下分区字段对应原始数据的最小和最大值。在这些分区索引的作用下,进行数据查询能够快速跳过不必要的数据分区目录,从而减少最终需要扫描的数据范围。
    • skp_idx_[Column].idx、skp_idx_[Column].mrk: 声明了二级索引就会额外生成相应的二级索引与标记文件,它们同样也使用二进制存储