大数据开发初识ClickHouse(第五十五篇)

70 阅读4分钟

这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

一、什么是ClickHouse

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。在传统的行式数据库系统中,数据按如下顺序存储:

RowWatchIDJavaEnableTitleGoodEventEventTime
#0893543506621Investor Relations12016-05-18 05:19:20
#1903295099580Contact us12016-05-18 08:10:20
#2899537060541Mission12016-05-18 07:38:00
#N

处于同一行中的数据总是被物理的存储在一起。常见的行式数据库系统有:MySQLPostgresMS SQL Server

而在在式数据库系统中,数据按如下的顺序存储:

Row:#0#1#2#N
WatchID:893543506629032950995889953706054
JavaEnable:101
Title:Investor RelationsContact usMission
GoodEvent:111
EventTime:2016-05-18 05:19:202016-05-18 08:10:202016-05-18 07:38:00

这些示例只显示了数据的排列顺序。来自不同列的值被单独存储,来自同一列的数据被存储在一起。

1.1、OLAP场景的关键特征
  1. 绝大多数是读请求
  2. 数据以相当大的批次(> 1000行)更新,而不是单行更新;或者根本没有更新。
  3. 已添加到数据库的数据不能修改
  4. 对于读取,从数据库中提取相当多的行,但只提取列的一小部分。
  5. 宽表,即每个表包含着大量的列
  6. 查询相对较少(通常每台服务器每秒查询数百次或更少)
  7. 对于简单查询,允许延迟大约50毫秒
  8. 列中的数据相对较小:数字和短字符串(例如,每个URL 60个字节)
  9. 处理单个查询时需要高吞吐量(每台服务器每秒可达数十亿行)
  10. 事务不是必须的
  11. 对数据一致性要求低
  12. 每个查询有一个大表。除了他以外,其他的都很小。
  13. 查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中
1.2、列式数据库更适合OLAP场景的原因

列式数据库更适合于OLAP场景(对于大多数查询而言,处理速度至少提高了100倍),下面详细解释了原因(通过图片更有利于直观理解):

行式

面向行式的数据库管理系统

列式

面向列式的数据库管理系统

1.3、输入输出
  1. 针对分析类查询,通常只需要读取表的一小部分列。在列式数据库中你可以只读取你需要的数据。例如,如果只需要读取100列中的5列,这将帮助你最少减少20倍的I/O消耗。
  2. 由于数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储这也更容易压缩。这进一步降低了I/O的体积。
  3. 由于I/O的降低,这将帮助更多的数据被系统缓存。

二、安装ClickHouse

2.1、RPM安装包

推荐使用CentOS、RedHat和所有其他基于rpm的Linux发行版的官方预编译rpm包。

首先,您需要添加官方存储库:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
sudo yum install -y clickhouse-server clickhouse-client
​
sudo /etc/init.d/clickhouse-server start
clickhouse-client # or "clickhouse-client --password" if you set up a password.
2.2、客户端连接

image-20230212140036322

查看数据库

show databases;

image-20230212140102785

2.3、服务端的配置

image-20230212140432233

2.4、数据存储

image-20230212140613856

三、ClickHouse常用命令

  1. 连接clickhouse的客户端

    clickhouse -client 此时默认的是9000端口

    这个9000端口,可以在/etc/clickhost-server目录下的config.xml

    clickhouse -client --host=localhost --port=xxx 指定端口号

  2. 启用多行sql,上面的连接方式,不支持多行的sql,支持多行使用-m

    clickhouse -client -m