https://blog.csdn.net/weixin_42687074/article/details/112623806

特点有哪些?


  • 场景

    读多改少吞吐高,宽表少列字段短,不必事务一致低

  • 查询相对较少(通常每台服务器每秒查询数百次或更少)

  • 每个查询有一个大表。除了他以外,其他的都很小。(Join弱?)
  • 查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中

    特性

  • Local attached storage

  • 原生支持 shard + replication
  • SQL 直接接口,有比较丰富的原生 client
    • 数据剪枝(LSM)
    • 资源垂直整合能力(并发 MPP+ SMP )

roaring bitmap

列式、专用压缩(LZ4/ZSTD)、向量(SIMD)、磁盘、并行、分布式、SQL、写入无锁、稀疏索引、在线查询、近似计算、自适应JOIN、数据安全、角色控制、强类型、可复制(用zookeeper维护)
优化了吞吐而不是延迟,每秒几十亿扫描
缺点:没有完整事务支持、缺少高频率,低延迟的修改或删除已存在数据的能力,稀疏索引不适合通过其键检索单行的点查询

引擎

  • 数据库引擎
  • 表引擎
    • MergeTree:按主键排序、分区键
    • VersionedCollapsingMergeTree(Sign,Version):根据版本折叠
    • AggregatingMergeTree:删主键同(准确的说是排序键)的行替换成一行,做增量数据的聚合统计
    • CollapsingMergeTree(Sign):折叠
    • ReplacingMergeTree:删排序键值同(ver版本列)
    • SummingMergeTree:具有相同主键的行合并为一行
    • ReplicatedXXXMergeTree:副本表级别
  • 日志引擎
    • Log
    • StripeLog
    • TinyLog
  • 集成的表引擎

    存储

  • 按主键字典序排序的数据片段(DATA PART)组,Wide/Compact,最小可移动的单元

  • 颗粒(granules):ClickHouse中进行数据查询时的最小不可分割数据集(可能包含多行)
  • 并发数据访问(多版本控制)

    索引

  • 索引:标记和标记号,额外数据读取,不要求主键唯一

  • 主键:改善索引性能略过很多、改善数据压缩(一致性越好压缩率越高)、长的主键会对插入性能和内存消耗有负面影响/不影响select
  • 稀疏索引是因为希望索引在内存中小,维护数更多,导致了主键不唯一
  • SummingMergeTree和AggregatingMergeTree:只保留少量的列在主键当中用于提升扫描效率,将维度列添加到排序键中
  • 跳数索引
  • primary.idx:index_granularity=8192,每个第N行的主键值,在内存中
  • column.mrk:每个第N行在数据文件中的偏移量,被缓存

    SQL语句

  • 建表

    • ENGINE = MergeTree()
    • ORDER BY XXX 排序键,ORDER BY tuple() 语法创建没有主键的表->数据插入的顺序存储
    • 自定义分区键:PARTITION BY toYYYYMM(VisitDate)【少于1000】
    • PRIMARY KEY 选择与排序键不同的主键
    • SAMPLE BY 抽样
    • TTL date + INTERVAl 1 DAY
    • SETTINGS
      依据主键索引剪掉不符合的数据,依据按月分区的分区键剪掉那些不包含符合数据的分区

https://xie.infoq.cn/article/9f325fb7ddc5d12362f4c88a8