clickhouse的高级使用摸索

目录

前言

OLAP场景的关键特征

 缺陷

一、集群模式搭建

1、centos系统安装

2、配置文件

3、启动

4、连接数据库

二、字段知识

三、表知识

1、表引擎介绍

2、集群模式表用法

四、综合使用


前言

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。

OLAP场景的关键特征

  • 大多数是读请求
  • 数据总是以相当大的批(> 1000 rows)进行写入
  • 不修改已添加的数据
  • 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列
  • 宽表,即每个表包含着大量的列
  • 较少的查询(通常每台服务器每秒数百个查询或更少)
  • 对于简单查询,允许延迟大约50毫秒
  • 列中的数据相对较小: 数字和短字符串(例如,每个URL 60个字节)
  • 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)
  • 事务不是必须的
  • 对数据一致性要求低
  • 每一个查询除了一个大表外都很小
  • 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中

 缺陷

  • 1.无事务处理。
  • 2.缺乏全面的UPDATE / DELETE实现

参考:https://blog.csdn.net/asfjgvajfghaklsbf/article/details/85139888

 

一、集群模式搭建

1、centos系统安装

#集群模式,每台机器上都要执行
sudo yum install yum-utils
sudo rpm --import https://repo.yandex.ru/clickhouse/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.yandex.ru/clickhouse/rpm/stable/x86_64
sudo yum install clickhouse-server clickhouse-client

官网教程:https://clickhouse.yandex/docs/zh/getting_started/

2、配置文件

每台机器上都要执行

  • 配置文件目录: /etc/clickhouse-server
  • 修改config.xml:在里面添加一句:<include_from>/etc/clickhouse-server/metrika.xml</include_from>
  • 在该目录下添加一个文件:metrika.xml  
<yandex>
	<clickhouse_remote_servers>
		<!-- 集群名字 -->
		<clickhouse_cluster>
		    <!-- 数据分片1  -->
		    <shard>
			<!-- 写入数据的权重 -->
			<weight>1</weight>
			<!-- 复制数据是否写入全部副本false:全部 -->
			<internal_replication>true</internal_replication>
			<replica>
			    <host>hadoop001</host>
			    <port>9000</port>
			    <user>default</user>
			    <password>123456</password>
			</replica>
		    </shard>

		    <!-- 数据分片2  -->
		    <shard>
			<!-- 写入数据的权重 -->
			<weight>1</weight>
			<!-- 复制数据是否写入全部副本false:全部 -->
			<internal_replication>true</internal_replication>
			<replica>
			    <host>hadoop002</host>
			    <port>9000</port>
			    <user>default</user>
			    <password>123456</password>
			</replica>
		    </shard>

		    <!-- 数据分片3  -->
		    <shard>
			<!-- 写入数据的权重 -->
			<weight>1</weight>
			<!-- 复制数据是否写入全部副本 false:全部 -->
			<internal_replication>true</internal_replication>
			<replica>
			    <host>hadoop003</host>
			    <port>9000</port>
			    <user>default</user>
			    <password>123456</password>
			</replica>
		    </shard>

		</clickhouse_cluster>
	</clickhouse_remote_servers> 

        <zookeeper-servers>
                 <node index="1">
                        <host>hadoop001</host>
                        <port>2181</port>
                 </node>
                <node index="2">
                        <host>hadoop002</host>
                        <port>2181</port>
                </node>
                <node index="3">
                        <host>hadoop003</host>
                        <port>2181</port>
                </node>
        </zookeeper-servers>

</yandex>

3、启动

每台机器都要执行

启动: 
sudo service clickhouse-server start


关闭: 
sudo service clickhouse-server stop

4、连接数据库

1)终端下连接

clickhouse-client -h 127.0.0.1 --port 9000 -m -u default --password 123456

2)数据库工具

推荐使用:DBeaver ,下载:https://dbeaver.io/download/

二、字段知识

参考官网:https://clickhouse.yandex/docs/zh/data_types/int_uint/

三、表知识

1、表引擎介绍

  • ReplacingMergeTree() :主键去重,主键相同的数据,会有一个后台线程去重,不同的节点上相同的主键不会去重,去重的时间是不确定的,不能实时的去重;
  • MergeTree()主键不去重;
  • Distributed()分布式引擎,不存储数据,可以关联对应的物理表(存储数据的表),在集群模式中使用这个表引擎;
  • AggregatingMergeTree() 聚合型表

2、集群模式表用法

-- 创建物理表
CREATE TABLE IF NOT EXISTS operation.`store_cluster` ON CLUSTER clickhouse_cluster ( \ 
  `id` UInt32 COMMENT 'ID',\
  `storeID` Nullable(UInt16) COMMENT '门店ID',\
  `goodsID` Nullable(UInt32) COMMENT '商品ID',\
  `status` String  DEFAULT 'A'  COMMENT '关系状态',\
  `createTime` Nullable(datetime)   COMMENT '创建时间',\
  `lastUpdate` Nullable(datetime )  COMMENT '最后更新时间',\
  `saleStatus` Nullable(String) COMMENT '门店销售该商品的状态',\
  `stockBorder` Nullable(Int16) COMMENT '门店商品边界值'\
) ENGINE ReplacingMergeTree() PARTITION BY toDate(lastUpdate)  ORDER BY (id) SETTINGS index_granularity=8192 ;

-- operation为数据库
-- store_cluster为物理表
-- clickhouse_cluster为集群的名字
-- ReplacingMergeTree为表引擎
-- ORDER BY的字段,默认也是主键
-- 8192 分片大小


-- 创建逻辑表
CREATE TABLE store ON CLUSTER clickhouse_cluster  AS operation.`store_cluster` \
ENGINE = Distributed(clickhouse_cluster,  operation, `store_cluster`, rand());
-- store为逻辑表,映射的是store_cluster这个物理表
--                             
-- Distributed的4个参数,分别是集群名字、数据库名、表名、分布规则;

集群模式下创建表,只用在一个节点上就可以,需要加上ON CLUSTER clickhouse_cluster这句,同样集群 删除的话也可以加上这一句,在一个节点上操作,集群上的每一个节点对应的表就会删除,这个是集群操作。

暴露给外部的只要一个逻辑表就可以了,一切的增删改查都只能在逻辑表上,同时逻辑表也是一个集群操作

四、综合使用

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值