ClinkHouse简介

ClinkHouse简介

ClickHouse来源

Yandex在2016年6月15日开源了一个数据分析的数据库,名字叫做ClickHouse,这对保守俄罗斯人来说是个特大事。更让人惊讶的是,这个列式存储数据库的跑分要超过很多流行的商业MPP数据库软件,例如Vertica。如果你没有听过Vertica,那你一定听过 Michael Stonebraker,2014年图灵奖的获得者,PostgreSQL和Ingres发明者(Sybase和SQL Server都是继承 Ingres而来的), Paradigm4和SciDB的创办者。Michael Stonebraker于2005年创办Vertica公司,后来该公司被HP收购,HP Vertica成为MPP列式存储商业数据库的高性能代表,Facebook就购买了Vertica数据用于用户行为分析。

  1. 真正的面向列的DBMS
  2. 数据高效压缩
  3. 磁盘存储的数据
  4. 多核并行处理
  5. 在多个服务器上分布式处理
  6. SQL语法支持
  7. 向量化引擎
  8. 实时数据更新
  9. 索引
  10. 适合在线查询
  11. 支持近似预估计算
  12. 支持嵌套的数据结构
  13. 支持数组作为数据类型
  14. 支持限制查询复杂性以及配额
  15. 复制数据复制和对数据完整性的支持
ClinkHouse Tbale常用引擎(ENGINE)
  1. TinyLog
    1. 是最简单的表轻量引擎(最多约100万行), 一写多读的应用场景。同时读写会损害数据
    2. TinyLog 表经常作为中间表,用于数据的微批量处理. 语法中无需携带任何参数
    3. 它将数据保存到磁盘. 每个字段都以单独压缩文件形式保存. 当写入数据时, 数据追加到文件的末尾
    CREATE  TABLE  [ IF  NOT  EXISTS ]  [ db 。] table_name  [ ON  CLUSTER  cluster ] 
    		(
        name1  [ type1 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr1 ]  [ TTL  expr1 ],
       	name2  [ type2 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr2 ]  [ TTL  expr2 ]... 
      	INDEX index_name1  expr1的 TYPE  TYPE1 (...) 粒度 值1INDEX  index_name2  表达式2  TYPE  TYPE2 (...) 粒度 值2ENGINE  =  TinyLog();
    
  2. MergeTree
    1. 这是目前 ClickHouse处理能力最好的引擎。
    2. 引擎支持索引,通过主键和日期来构建索引, 同时提供数据的实时更新能力。
    CREATE  TABLE  [ IF  NOT  EXISTS ]  [ db 。] table_name  [ ON  CLUSTER  cluster ] 
    		(
        name1  [ type1 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr1 ]  [ TTL  expr1 ],
       	name2  [ type2 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr2 ]  [ TTL  expr2 ]... 
      	INDEX index_name1  expr1的 TYPE  TYPE1 (...) 粒度 值1INDEX  index_name2  表达式2  TYPE  TYPE2 (...) 粒度 值2ENGINE  =  MergeTree ()
    [ PARTITION  BY  EXPR ] 
    [ ORDER  BY  EXPR ] 
    [ PRIMARY  KEY  EXPR ] 
    [ 样品 BY  EXPR ] 
    [ SETTINGS  name = value...]
    
  3. ReplacingMergeTree
    1. 适用于在后台清除重复数据以节省空间,但不保证不存在重复。
    CREATE  TABLE  [ IF  NOT  EXISTS ]  [ db 。] table_name  [ ON  CL	USTER  cluster ] (
    	name1  [ type1 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr1 ]  [ TTL  expr1 ]
        name2  [ type2 ]  [ DEFAULT | MATERIALIZED | ALIAS  expr2 ]  [ TTL  expr2 ]INDEX index_name1 expr1的 TYPE  TYPE1 (...) 粒度值1INDEX  index_name2 表达式2  TYPE  TYPE2 (...) 粒度值2 
    ) ENGINE  =ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/wt_order_details','{replica}') 
    		[ PARTITION BY EXPR ] 
    		[ ORDER BY EXPR] 
    		[ PRIMARY KEY EXPR ] 
    		[ 样品 BY EXPR] 
    		[ SETTINGS name = value...]
    
  4. Memory
    1. 重新启动服务器时,表中的数据消失,表将变为空。通常,使用此表引擎是不合理的。(值得注意的是,在许多情况下,与 MergeTree 引擎的性能几乎一样高)。
    2. 锁范围小:读写操作不会相互阻塞。不支持索引。阅读是并行化的。
    3. 换句话说,从这张表中读取是很轻松的。并发数据访问是同步的。
    4. 以未压缩的形式将数据存储在内存中。数据完全以读取时获得的形式存储。
  5. Distributed
    1. 分布式引擎本身不存储数据, 但可以在多个服务器上进行分布式查询。 读是自动并行的。
    2. 读取时,远程服务器表的索引(如果有的话)会被使用。
    3. 远程服务器不仅用于读取数据,还会对尽可能数据做部分处理。
    4. 分布式引擎参数:服务器配置文件中的集群名,远程数据库名,远程表名,数据分片键(可选)
    5. 样例:ENGINE =Distributed(cluster, db, table[, sharding_key])
  6. Kafka <导致数据丢失或者重复>
    1. 自动跟踪传递的消息,因此组中的每条消息仅计算一次。如果要获取数据两次,则使用另一个组名创建表的副本。组是灵活的并在群集上同步。
    2. 发布或订阅数据流。
    3. 组织容错存储。
    4. 处理流可用。
    CREATE TABLE [IF NOT EXISTS] [db] table_name [ON CLUSTER cluster](
        name1 [type1] [DEFAULT | MATERIALIZED | ALIAS expr1],
        name2 [type2] [DEFAULT | MATERIALIZED | ALIAS expr2],
    ) ENGINE = Kafka()
        	kafka_broker_list ='host:port',
      		kafka_topic_list ='topic1,topic2,...',
        	kafka_group_name ='group_name',
        	kafka_format ='data_format'[,]
       		[kafka_row_delimiter ='delimiter_symbol',]
        	[kafka_schema ='',]
        	[kafka_num_consumers = N,]
       		[kafka_skip_broken_messages = N]
    

ClinkHouse开发说明

建表说明
create table dim.pay_user (
    user_id Integer,
    status Integer,
    start_date Integer,
    end_date Nullable(Integer),
    etl_time DateTime
)ENGINE = MergeTree() ORDER BY (user_id,status) SETTINGS index_granularity = 8192
--Nullable() 代表该字段有空值
--Date等同于2020-12-12 | DateTime 等同于 2020-12-12 12:12:12
--默认ENGINE为MergeTree,
--ORDER BY为表排序索引字段,
--SETTINGS index_granularity = 8192为默认结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值