ClickHouse 是一个用于在线分析处理(OLAP)的列式数据库管理系统,它支持分布式表,这意味着你可以将数据分布到多个服务器上以提高性能和可扩展性。以下是如何在ClickHouse中创建和配置分布式表的步骤:### 1. 创建分布式表首先,你需要创建

摘要:一、CK 分布式表和本地表 -> 关注清哥聊技术公众号,了解更多技术文章 (1)CK是一个纯列式存储的数据库,一个列就是硬盘上的一个或多个文件(多个分区有多个文件),关于列式存储这里就不展开了
一、CK 分布式表和本地表->关注清哥聊技术公众号,了解更多技术文章 (1)CK是一个纯列式存储的数据库,一个列就是硬盘上的一个或多个文件(多个分区有多个文件),关于列式存储这里就不展开了,总之列存对于分析来讲好处更大,因为每个列单独存储,所以每一列数据可以压缩,不仅节省了硬盘,还可以降低磁盘IO。 (2)CK是多核并行处理的,为了充分利用CPU资源,多线程和多核必不可少,同时向量化执行也会大幅提高速度。 (3)提供SQL查询接口,CK的客户端连接方式分为HTTP和TCP,TCP更加底层和高效,HTTP更容易使用和扩展,一般来说HTTP足矣,社区已经有很多各种语言的连接客户端。 (4)CK不支持事务,大数据场景下对事务的要求没这么高。 (5)不建议按行更新和删除,CK的删除操作也会转化为增加操作,粒度太低严重影响效率。 生产环境中通常是使用集群部署,CK的集群与Hadoop等集群稍微有些不一样。如图所示,CK集群共包含以下几个关键概念: (1)CK实例。可以一台主机上起多个CK实例,端口不同即可,也可以一台主机一个CK实例。 (2)分片。数据的水平划分,例如随机划分时,图5中每个分片各有大约一半数据。 (3)副本。数据的冗余备份,同时也可作为查询节点。多个副本同时提供数据查询服务,能够加快数据的查询效率,提高并发度。图5中CK实例1和示例3存储了相同数据。 (4)多主集群模式。CK的每个实例都可以叫做副本,每个实体都可以提供查询,不区分主从,只是在写入数据时会在每个分片里临时选一个主副本,来提供数据同步服务,具体见下文中的写入过程。 ck的表分为两种: 分布式表 一个逻辑上的表, 可以理解为数据库中的视图, 一般查询都查询分布式表. 分布式表引擎会将我们的查询请求路由本地表进行查询, 然后进行汇总最终返回给用户. 本地表: 实际存储数据的表 1、Replication & Sharding ClickHouse像ElasticSearch一样具有数据分片(shard)的概念,这也是分布式存储的特点之一,即通过并行读写提高效率。ClickHouse依靠Distributed引擎实现了分布式表机制,在所有分片(本地表)上建立视图进行分布式查询,使用很方便。ClickHouse依靠ReplicatedMergeTree引擎族与ZooKeeper实现了复制表机制,成为其高可用的基础。 2、一般不写分布式表的原因 分布式表接收到数据后会将数据拆分成多个parts, 并转发数据到其它服务器, 会引起服务器间网络流量增加、服务器merge的工作量增加, 导致写入速度变慢, 并且增加了Too many parts的可能性. 数据的一致性问题, 先在分布式表所在的机器进行落盘, 然后异步的发送到本地表所在机器进行存储,中间没有一致性的校验, 而且在分布式表所在机器时如果机器出现down机, 会存在数据丢失风险. 数据写入默认是异步的,短时间内可能造成不一致. 对zookeeper的压力比较大(待验证). 没经过正式测试, 只是看到了有人提出. 3、Replicated Table & ReplicatedMergeTree Engines ClickHouse的副本机制之所以叫“复制表”,是因为它工作在表级别,而不是集群级别(如HDFS)。也就是说,用户在创建表时可以通过指定引擎选择该表是否高可用,每张表的分片与副本都是互相独立的。 目前支持复制表的引擎是ReplicatedMergeTree引擎族,它与平时最常用的MergeTree引擎族是正交的,如下图所示。
阅读全文