概述
介绍
ClickHouse是一款由俄罗斯IT人员开发的一款开源的列式数据库管理系统。clickehouse是一款OLAP分析型数据库,以快取胜。至于为什么快,网络上各位大牛已经做了介绍,此处不再叙述。本文主要从使用角度来介绍关于CH的分布式表,ttl,主键等信息。
分布式表
分布式表是一种逻辑上的表,并不真正存储数据。查询时,请求直接下发分布式表,分布式表会下发到各个子表进行查询,之后结果进行汇总、合并,极大的加快了检索效率。它的创建和普通字表创建语法相似,主要是引擎类型不同。语法具体如下:
create table example_all (d DateTime, a Int) ENGINE = Distributed (test, default, example , rand());
说明:Distributed 代表所属引擎,分布式必须为此值;括号里 test代表分布式集群名;default代表database也就是我们说的命名空间或者数据库名;example是指分布式表对应的子表名;rand()此项称之为ShardingKey,代表数据分发测略,入库时如何分发,可以hash或者随机或者轮询等,每种对应的shardingKey配置不同,可根据需要选择。
目前官方已经不建议使用分布式表入数据,因为效率可能会比直接入子表差,但如果对入库效率没所谓的业务来说,可以继续入分布式表,目前我们就是这么做的,会方便一些。否则要不断更换子表客户端,以此来入库所有集群节点,达到数据均衡。
子表
与分布式表相对应的就是子表。子表是真正存储数据的表。也是真正干活的表。子表最常用的引擎也就是MergeTree系列了,底层与rocksdb相同,基于LSM-tree实现的,此处不在赘述。
MergeTree系列引擎有很多不同的种类,可供使用。一般最常用的还是MergeTree,还有可以主键去重的ReplacingMergeTree。关于数据去重,ClickHouse支持不是很好,不能像一般数据库一样做到主键覆盖或者过滤,即使使用ReplacingMergeTree,也不能做到实时去重,只有数据触发合并,数据才会删除,否则重复数据依然可见并且可查。可通过手动调用语句来触发合并,进而删除数据。
手动触发合并语句:OPTIMIZE table example final; 执行之后,即可删除
MergeTree系列建表语句:
create table example (d DateTime, a Int) ENGINE = MergeTree PARTITION BY toYYYYMM(d) order by d
TTL d + INTERNAL 90 Day
SETTINGS index_granularity = 1024;
PARTITION BY:如果要设置此项,要求表中必须存在一列时间类型的字段,比如上述表中列d DateTime数据类型即可。可以选择分区方式,到天或者到月,根据业务需求而定
order by:如果不设置主键PrimaryKey,默认order by字段为主键也就是一级索引。如果设置了主键,则以主键为准即可。
SETTINGS index_granularity:设置索引力度大小。默认8192,也可自行修改,原则上越小,代表最终结果检索的范围越小,但同样的,这样搜索的markRange会多,不能设置过小,可根据自身需求进行设置,并测试,选择最优即可,目前我们设置的为1024。
TTL
关于ttl,这就与数据存储有关了。线上的业务场景也是,很多时候,随着新数据的增加,老的数据慢慢提取的价值就少,并且还占用大量的存储空间,所以很多数据库都会设置TTL过期时间,来及时的清除过期数据。ClickHouse也不例外。
如上述子表创建所示,设置ttl时间,这是针对表级别的,clickhouse还支持针对列级别的ttl设置,但是只有在所属partition的所有列都过期后,才会整体删除,否则会将已经过期的列设置为默认值(如果此列为int类型,那么会设置为0),这对是用来说并不是特别方便,所以我们选择表级别,如上述子表建表语句所示。
注意:目前ttl的功能只支持MergeTree系列引擎,其它暂不支持。
总结
之前,我们实用的是rocksdb,选择clickhouse的主要原因是,它可以支持大量的分析任务,我们后期也会将算子下沉,以此来简化业务逻辑,丰富存储功能。
还有就是sql语言,比较大众,成本可控。快就不说了,业界公认,有目共睹。
唯一的问题是,学习材料太少了,哈哈,后期大家可以一起交流,分享。
最后
以上就是光亮彩虹为你收集整理的ClickHouse 简单介绍包括分布式表,子表,ttl,主键介绍总结的全部内容,希望文章能够帮你解决ClickHouse 简单介绍包括分布式表,子表,ttl,主键介绍总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复