ClickHouse使用Docker部署

OLTP和OLAP介绍

基本业务量到达分库分表量级,则离不开数据大屏、推荐系统、画像系统等搭建,需要搭建以上系统,则离不开海量数据进行存储-分析-统计。

而海量数据下 TB、PB级别数据存储,靠Mysql进行存储-分析-统计无疑是灾难。所以就需要用到使用OLAP数据处理技术。

什么是OLTP

全称 OnLine Transaction Processing,联机事务处理系统, 就是对数据的增删改查等操作。

存储的是业务数据,来记录某类业务事件的发生,比如下单、支付、注册、等等。

典型代表有Mysql、 Oracle等数据库,对应的网站、系统应用后端数据库。

针对事务进行操作,对响应时间要求高,面向前台应用的,应用比较简单,数据量相对较少,是GB级别的。

面向群体:业务人员

当数据积累到一定的程度,需要对过去发生的事情做一个总结分析时,就需要把过去一段时间内产生的数据拿出来进行统计分析,从中获取想要的信息,为公司做决策提供支持,这个就是做OLAP了。

什么是OLAP

OnLine Analytical Processing,联机分析处理系统。

存储的是历史数据,对应的风控平台、BI平台、数据可视化等系统。

OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策,并且提供直观易懂的查询结果。

典型代表有 Hive、ClickHouse。

针对基于查询的分析系统,基础数据来源于生产系统中的操作数据,数据量非常大,常规是TB级别的。

面向群体:分析决策人员。

数据库里面行存储和列式存储

什么是行存储

传统的OLTP关系型数据库都是行存储。

一行中的数据在存储介质中以连续存储形式存在。

适合随机的增删改查操作 或者 在行中选取所有属性的查询操作,结合索引提升性能。

缺点

查询的全部记录的某几个字段,但由于这些字段在各行数据单元中,而整个行特别大(字段特别多),程序必须不断读取每一条的行记录取对应的字段,使得读取效率大大降低。

例子:找某个订单的话,就很方便,订单的全部信息都能获取; 但找全部订单总金额就需要遍历多个数据。

|----------|--------------|
| order_id | total_amount |
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |

什么是列式存储

存储结构化数据时,在底层的存储介质上,数据是以列的方式来组织的。

存储完若干条记录的首个字段后,再存储这些记录的第二个字段,然后再第三个字段、第四个字段...

查询时只有涉及到的列会被读取,而不需要全表扫描,可以显著减少IO消耗,并降低查询响应时间。

例子:查询全部成交额,只需要把订单金额拿出来即可。

|----|----|----|
| 1 | 2 | 3 |
| 10 | 20 | 30 |

总结

描述的是底层存储介质上,数据的组织形式,哪种组织对应哪种业务需求。

列存储在聚合、统计等操作性能会优于行存储。

列存储将多行记录的列连续存储在一起,一列接着一列。

列式存储是同个数据类型,会进行数据压缩率更高,更省空间。

列存储数据更新成本较高,一般适合读多写少的场景,适合 OLAP 分析型系统。

列式存储ClickHouse介绍和应用场景说明

ClickHouse的由来和应用场景

俄罗斯Yandex在2016年开源,使用C++编写的列式存储数据库,近几年在OLAP领域大范围应用。

官网:

复制代码
https://clickhouse.com

GitHub:

复制代码
https://github.com/ClickHouse/ClickHouse

阿里云的ClickHouse 文档:

复制代码
https://www.aliyun.com/product/clickhouse

分析型数据库管理系统基准测试

复制代码
https://benchmark.clickhouse.com/#system=+lik|yL|gQ&type=-&machine=-ca2|gle|6ax|ae-|6ale|3al|gel&cluster_size=-&opensource=-&tuned=+n&metric=hot&queries=-

特点和应用场景

不依赖Hadoop 生态、安装和维护简单。

擅长对列的聚合、计数等统计操作性能强劲。

对列存储和压缩采用更好的算法,更节省成本。

拓展性强,在生产中经过实战测试,从单服务器部署到具有数千个节点的集群的线性水平可扩展性。

具有企业级安全功能和故障安全机制,可防止数据因应用程序错误和人为错误而损坏。

支持主流的大部分SQL语法和函数。

吞吐能力强,官方测试支持,支持多种存储引擎,满足多数业务场景。

广泛应用:互联网电商、在线教育、金融等领域用,用户行为数据记录和分析,搭建数据可视化平台。

Linux服务器Docker安装

安装并运行Docker

复制代码
yum install docker-io -y

检查安装结果

复制代码
docker info

运行Docker守护进程

复制代码
systemctl start docker

停止Docker守护进程

复制代码
systemctl stop docker

重启Docker守护进程

复制代码
systemctl restart docker

查看容器

复制代码
docker ps

停止容器

docker stop 容器id

修改镜像仓库,改完重启docker

复制代码
vim /etc/docker/daemon.json

{
"debug":true,"experimental":true,
"registry-mirrors":["https://pb5bklzr.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]
}

查看信息

复制代码
docker info

Docker部署ClickHouse

镜像仓库地址

复制代码
https://hub.docker.com

安装命令

复制代码
docker run -d -e CLICKHOUSE_USER=admin -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 -e CLICKHOUSE_PASSWORD=admin --name test_clickhouse --ulimit nofile=262144:262144 \
-p 8123:8123 -p 9000:9000 -p 9009:9009 --privileged=true \
-v /usr/local/clickhouse/log:/var/log/clickhouse-server \
-v /usr/local/clickhouse/data:/var/lib/clickhouse clickhouse/clickhouse-server

默认http端口是8123,tcp端口是9000, 同步端口9009

web可视化界面:http://你的ip:8123/play

命令

查看数据库:SHOW DATABASES

查看某个库下面的全部表:SHOW TABLES IN system

系统数据库是 ClickHouse 存储有关 ClickHouse 部署的详细信息的地方

默认数据库最初为空,用于执行未指定数据库的命令

数据库连接工具下载

复制代码
https://dbeaver.io/download

创建ClickHouse数据库和表

创建数据库

复制代码
CREATE DATABASE test

创建表

复制代码
CREATE TABLE clickstream (
    customer_id String, 
    time_stamp Date, 
    click_event_type String,
    page_code FixedString(20),  
    source_id UInt64
) 
ENGINE = MergeTree()
ORDER BY (time_stamp)

说明:

ClickHouse 有自己的数据类型,每个表都必须指定一个Engine引擎属性来确定要创建的表的类型

引擎决定了数据的存储方式和存储位置、支持哪些查询、对并发的支持。

数据类型说明

String类型替换来自其他数据库的 VARCHAR、BLOB、CLOB 和其他类似字符串的数据类型。

UInt64是一个 64 位无符号整数。

日期是在 ClickHouse 中存储日期的几种方法之一。

如果知道列中所有字符串的精确长度,则使用FixedString( n )数据类型。

插入数据

复制代码
INSERT INTO clickstream VALUES ('customer1', '2021-10-02', 'add_to_cart', 'home_enter', 568239 ) 

查询数据

复制代码
SELECT * FROM clickstream

数据类型和语法说明

数值类型(整形,浮点数,定点数)

整型

固定长度的整型,包括有符号整型或无符号整型 IntX X是位的意思,1Byte字节=8bit位

有符号整型范围

Int8 --- [-128 : 127]

Int16 --- [-32768 : 32767]

Int32 --- [-2147483648 : 2147483647]

Int64 --- [-9223372036854775808 : 9223372036854775807]

Int128 --- [-170141183460469231731687303715884105728 : 170141183460469231731687303715884105727]

Int256 --- [-57896044618658097711785492504343953926634992332820282019728792003956564819968 : 57896044618658097711785492504343953926634992332820282019728792003956564819967]

无符号整型范围

UInt8 --- [0 : 255]

UInt16 --- [0 : 65535]

UInt32 --- [0 : 4294967295]

UInt64 --- [0 : 18446744073709551615]

UInt128 --- [0 : 340282366920938463463374607431768211455]

UInt256 --- [0 : 115792089237316195423570985008687907853269984665640564039457584007913129639935]

浮点型(存在精度损失问题)

建议尽可能以整型形式存储数据

Float32 - mysql里面的float类型

Float64 - mysql里面的double类型

相关推荐
key_Go12 小时前
07.容器监控
运维·网络·网络协议·docker·监控
苦逼IT运维12 小时前
Windows 作为 Ansible 节点的完整部署流程(含 Docker 部署 Ansible)
windows·docker·ansible
Lin_Aries_042113 小时前
部署 Jenkins 服务器
运维·服务器·docker·容器·云计算·jenkins
huangdengji14 小时前
【docker默认防火墙行为调整】
docker·容器
ftswsfb14 小时前
Docker进阶-管理和应用
运维·docker·容器
gs8014014 小时前
在 openEuler 上排查 Docker 同桥网络不通:从“全线超时”到定位容器没启动
网络·docker·容器
jqh_048414 小时前
docker jenkins gitlab 流水线构建
docker·gitlab·jenkins
Kaede615 小时前
Docker和K8S的区别详解
docker·容器·kubernetes
伞啊伞16 小时前
开源的容器化平台:Docker
docker·容器·开源
空灵之海1 天前
Docker部署Nexus Repository Community Edition
运维·docker·容器