Clickhouse存储海量数据学习

  1. 对数据的操作尽量进行增量更新而非全量更新
  2. clickhouse处理速度快的前提是占用一半的cpu,所以qps不高(安装时自动检测机器cpu,可以通过配置文件更改)  (Mysql单线程获取数据)

clickhouse存储引擎选择:

表引擎分类

MergeTree
  1. 主要用于海量数据分析,支持所有Clickhouse sql语法,部分功能与MySQL不一致

  2. 采用类似LSM tree的结构,很多存储层处理逻辑直到Compaction期间才会发生

  3. MergeTree

    1. 主键并无唯一约束,可插入多条相同主键数据

    2. 可设置 TTL,对数据存活时间进行约束,仅支持时间类型

  4. ReplacingMergeTree

    1. 解决MergeTree主键无法去重问题

    2. 插入多条主键相同数据,compaction前主键未去重,compaction后,主键相同数据被去重

    3. 注意事项

      1. 未彻底compaction之前,无法达到主键去重效果

      2. 分布式场景下,相同主键的数据可能被sharding到不用节点,不同shard主键可能无法去重

      3. optimize是后台操作,无法确认执行时间点

      4. 手动执行optimize海量数据下,耗费大量时间

    4. 适用于数据最终被去重场景,无法保证查询过程中主键不重复

  5. CollapsingMergeTree

    1. 要求建表时指定一个sign,后台compaction时将逐渐相同,sign不同的值进行删除

    2. 每次新增数据时,sign=1,需要删除时,写入一行数据sign= -1

    3. 由于compaction时机无法预测,查询count()时,需要改写为count(sign);     count(col)->count(col*sign)

    4. 乱序插入时(先插入取消行再插入状态行) -->   数据无法折叠

  6. VersionedCollapsingMergeTree

    1. 建表语句新增一列version,用于乱序情况下记录状态行与取消行的关系。

    2. 主键相同,version相同,sign相反的行,compaction时被删除。

  7. SummingMergeTree

    1. 支持对主键进行预先聚合,提升聚合计算性能,将主键相同的多行sum,存储一行数据

    2. 常常使用mergeTree存储数据明细,summingMergeTree存储聚合结果,用于提升查询效率

  8. AggregatingMergeTree

    1. 预先聚合引擎的一种,相较于上一个,可以指定各种聚合函数

    2. 语法较为复杂,之后进行详细了解

Log Family
  1. 功能相对简单,适用于快速写入小表(1百万行左右),之后快速读取
  2. 数据被顺序append到磁盘上
  3. 不支持 delete、update
  4. 不支持index
  5. 不支持原子性写
  6. insert会阻塞select操作
Integrations
  1. 主要用于讲外部数据导入clickhouse中,或者通过clickhouse操作外部数据
    1. kafka:将kafka tpic的数据直接导入
    2. Mysql:将Mysql作为存储引擎,直接ck操作mysql表
    3. jdbc/odbc:通过指定jdbc、odbc连接串读取数据源
    4. hdfs:直接读取hdfs特定格式的数据文件
Special      
  1. Memory:数据在内存中,重启数据丢失,适合于数据持久性无要求的一亿一下的小表
  2. Buffer:为目标表设置内存buffer,buffer触发一定条件后flush到磁盘

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值