clickhouse之分布式(distribute)

Distribute

   原文地址:https://clickhouse.yandex/docs/en/table_engines/distributed.html

  clickhouse的分布式引擎本身不存储数据,但是允许查询分布式查询。读取数据自动就是并行化的。在读取数据的时候,会使用在不同节点上的索引。分布式引擎接受参数:在配置文件中配置的集群的名字,在远端的数据库名字,在远端的表名,可选的分片数,例如:

Distributed(logs,default,hits[,sharding_key])

  数据会从名字叫做logs的集群上被读取,从各个节点上的default.hits这个表上,数据不仅仅被读取,还会在各个节点上进行计算,例如,对于一个group by操作,数据将会在各个节点上做聚合,聚合结果会被发送到请求的server节点上,数据会被进行更进一步的聚合。

 logs-集群的名字,被配置在配置文件里。

集群的配置文件如下:


    
        
            
            1
            
            false
            
                example01-01-1
                9000
            
            
                example01-01-2
                9000
            
        
        
            2
            false
            
                example01-02-1
                9000
            
            
                example01-02-2
                9000
            
        
    

上面展示的是一个集群名字是logs的配置文件。包含了两个分片节点,每个节点有两个数据副本。分片服务器节点存储了不同的数据,每个副本存储了该节点上的所有的数据,用作备份,便于恢复数据。

  对于每一个节点,有很多参数:如host,port,user,password

  1.host 远程节点的地址,可以是主机名或者是ip地址

   2.port tcp端口用作节点之间的通讯。

   3.user  用于与其他节点通讯用的用户名,通常情况下 这个用户名默认是default,这个用户名必须有权限登陆其他节点。权限配置在users.xml里

   4.password  登陆其他节点的密码,通常情况下是空字符串

 当指定使用副本后,在读取数据的时候其中的一个副本会被选中,可以指定算法来平衡load压力,通过修改load_balancing setting

如果服务器节点间的连接没有建立,会在超时时间内进行一次尝试重连,如果连接失败了,下一个数据副本会被选中,依次类推到其他的副本,如果全部的副本都连接失败了,尝试重连还会不断进行,因此有个缺陷,就是说一个远程节点可能会接受连接,但是可能该节点无法工作或者很低效的工作。

  你可以在配置文件中配置多个集群。

  如果想看集群的列表,可以用system.cluster表。

   这个分布式引擎允许像使用本地服务器一样使用集群,然而,这个集群是不可扩展的,你必须在配置文件中写死这个集群中节点的数量。

  这些分布式的引擎集群创建是热加载的,不需要重启server,如果你查询了一个数据,该数据不在你指定的节点上,只需要使用remote表即可。

  有两种方式来写入数据到集群:

 1.指定哪些数据写入到哪些节点里

 2.通过一个节点写,数据分到不同的节点里,通过指定分片的key来分发数据。

每一个分片服务器都有自己的权重,默认情况下,这个权重是1,数据写入到每个分片服务器的数量跟这个权重有关,例如,如果有两个分片服务器,其中一个的权重是9,另一个是10,第一个节点会接收到9/19的rows里的parts 剩下的给另外一个。

  Each shard can have the ‘internal_replication’ parameter defined in the config file.

  数据分片函数可以是任意的函数或者是个数值,例如,你可以使用随机函数。 此处有个优化,如果说有join操作,可以按照join的key进行随机分片,这样数据会比较均匀,性能高,或者可以用哈希函数来做。

  数据写入是异步的,对于插入数据到集群的其他节点,数据先是写入到本地磁盘,然后在后台发送到其他分片服务器,如果想查看数据有没有同步完,可以检查下面的目录:/var/lib/clickhouse/data/database/table//  如果发送出去的数据节点有问题,会被记录到broken 子目录里 同时不会再次被使用到。需要人工处理

  

你可能感兴趣的:(clickhouse)