clickhouse常见部署图及LowCardinality低基数类型优缺点

clickhouse使用jdbc进行查询插入数据操作的部署图

一.读sql的核心是 读分布式表的数据(分布式表可以读取互为副本的本地表的数据,起到容灾的目的),然后使用nginx作为负载均衡器和反向代理,代理后端clickhouse的分布式表的服务器节点,jdbc连接的ip指定为nginx服务器所在的地址,nginx还可以记录每条sql操作的耗时
二.写sql的核心: 写sql也就是insert语句一般会直接操作本地表,至于哪些数据写到哪个clickhouse本地表的逻辑由客户端按照自定义的规则来定义,确定好哪些数据写到哪些clickhouse本地表之后,直接操作本地表,操作本地表的时候可以操作互为副本的本地表中的任何一个,或者轮流操作互为副本的本地表的任何一个,另外一个会自动同步数据

clickhouse常见部署图及LowCardinality低基数类型优缺点_第1张图片

LowCardinality数据类型优缺点

一 LowCardinality数据类型定义

create table A
(id uInt32, name LowCardinality(String))
engine=MergeTree() order by id 

一般使用LowCardinality低基数类型修饰字符串变量,其还有一个别名StringWithDictionary,也就是使用字典编码实现的

二 LowCardinality字典编码实现原理

clickhouse常见部署图及LowCardinality低基数类型优缺点_第2张图片
LowCardinality数据类型首先通过字典编码把具体的字符串转换成index数值,在随后的sql操作中都是操作的index的值,直到最终结果返回给client之前才通过倒排索引把index映射到具体的字符串值中.

三 LowCardinality优缺点

1.LowCardinality可以节省存储空间,因为通过字典编码之后,只需要存放编码后的index值以及倒排索引,所以可以节省大量的磁盘存储(不过这个结论是相对的,也就是在某一列的基数值不超过百万级的时候,超过了这个值需要的存储反倒比原始String列更多的内存,所以也有一些公司改造LowCardinality类型,当某一列是高基数时fall back 回退到原始类型中去)
2.LowCardinality可以提升查询性能,其原因一方面来源于数据列的数据量的减少(原始字符串的列字段长度越长,能节省的磁盘空间就越大),另一方面来源于clickhouse对LowCardinality列在过滤,聚合等的优化。
3.LowCardinality类型对Insert数据写入和Merge数据合并有副作用,也就是会导致insert和merge操作变慢,当应用是实时写入的场景时,需要评估具体的影响

参考文章:
https://blog.csdn.net/nazeniwaresakini/article/details/111841320
https://zhuanlan.zhihu.com/p/562815347
https://www.cnblogs.com/bytedata/p/16635953.html

你可能感兴趣的:(clickhouse,clickhouse,数据库,sql)