clickhouse 

clickhouse 


特点 
1   列式存储     
     分析型  聚合性能好 
     压缩比高 因为同一列的数据类型一样 
     同样数据占空间小  磁盘和缓存使用率高 
     
2   DBMS
       管理能力好   支持标准的SQL    开窗函数不支持  
       
3   多样化引擎
       最常见 

4   高吞吐写 
             顺序写入 到临时分区中  在后台进行异步合并       
             
5   并发查询 
        利用多线程 并发查询多个分区 
        问题  单条利用多个线程   不适合多条sql并发执行  qps不高   低频高复杂度大数据量的查询
        
6   更适合单表操作 ,多表join性能一般

 

数据类型   (使用时大小写敏感)
    Long     Int64  UInt64   带U的没有负值 
    Integer  Int32 UInt32   带U的没有负值 
    decimal  Decimal32(s) Decimal64(s) Decimal128(s)  |Decimal(7,2) Decimal(16,2) Decimal(36,2) 汇率  日利率
    varchar  String 
    date     Date   DateTime  DateTime64
    


表引擎

    TinyLog 小文件 
    Memory 内存 
    
    MergeTree (最重要)
        支持分区 (单机 按目录物理分区)   缩小数据范围  where 加入分区条件
        primary key 只是一个一级索引  不是唯一主键 (where 中进行筛选用的) 
        order by  必填项  影响你的存储顺序 primarykey必须是order by的前缀 
        
        二级索引 (实验性)  where 条件中使用 
        TTL 数据的时效性 
          遇到达到失效时间 不是立即生效 随着MergeTree 后台合并来进行时效   建议使用天级及以上 失效周期的字段建议使用分区字段
        
        查询执行计划 
        clickhouse-client  --send_logs_level=trace <<< 'select * from test1.t_order_mt  where total_amount > toDecimal32(900., 2)'
        
        手动触发合并操作
        optimize table  xxxx   final
   

  •    ReplacingMergeTree

       去重     以order by  字段 为准 维度列  , ReplacingMergeTree(版本列),版本列最大的保留 , 版本列相同留最新的

 

  •    SummingMergeTree 

       汇总统计      以order by  字段 为准 维度列 ,  SummingMergeTree(聚合列), 除了维度列和聚合列, 留最老的
   
   共同问题: 1. 范围有限 分区内字段聚合和去重  

                      2. 时效有延迟 必须触发分区合并 才进行聚合和去重  

                      3. 手动触发 optimize table xxxx final 
   
   
   副本
   ReplacatedMergeTree(zk_path,rep_name)
   ReplacatedReplacingMergeTree(zk_path,rep_name,版本列)
   ReplacatedSummingMergeTree(zk_path,rep_name,聚合列)
   
   基于zk ,利用zk观察里面的日志,来获得别的副本的最新数据
   
   配置: metrika.xml  配置zookeeper的地址就行了
   两个互为副本的表  
              zk_path 必须一致   /clickhouse/tables/{shard}/table_name  
              rep_name 必须不一致
              

    集群  
        本地表 存储真正数据
        分布式表    代理工作  不存储数据
        
        metrika.xml   配置一个集群 
        internal_replication  true 自己管理副本 集群不管 得用复制的本地表  官方推荐      false交给集群管理  普通表就可以 
            
        distribute 表 分发读请求 到所有的shard中 ,如果shard有多副本 选error_count最小 如果error_count相同 默认随机 也可以改成顺序

        distribute 表 分发写请求  根据分区键  取模 发到不同的shard中
        
        写入到
              sparkstreaming 写入clickhouse   使用 写入通用jdbc方法  地址不同 driver不同而已

        
        


        
 
    
    
    

上一篇:Java查询数据库返回结果集,统统都会!


下一篇:Flink+ClickHouse 玩转企业级实时大数据开发