目录
前言
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这句,同样集群 删除的话也可以加上这一句,在一个节点上操作,集群上的每一个节点对应的表就会删除,这个是集群操作。
暴露给外部的只要一个逻辑表就可以了,一切的增删改查都只能在逻辑表上,同时逻辑表也是一个集群操作