Welcome everyone

高性能列式存储 ClickHouse

大数据 汪明鑫 887浏览 0评论

什么是列式数据库?

关系数据库针对存储数据行进行了优化,通常用于事务性应用程序,而列式数据库针对快速检索数据列进行了优化,通常用于分析应用程序。

对于存储而言,列式数据库总是将同一列的数据存储在一起,不同列的数据也总是分开存储。

列式数据对于大多数查询而言,处理速度至少提高了100倍。

仔细看看下面我找的两张图大概就清楚行式数据库和列式数据库的区别了

 

常见的列式数据库有:

Vertica、 Paraccel (Actian Matrix,Amazon Redshift)、 Sybase IQ、 Exasol、 Infobright、 InfiniDB、

MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel、 Google PowerDrill、 Druid、 kdb+

 

 

行式:

 

列式:

 

 

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

 

列式数据库读取表中一小部分列会大大加快查询速度,不用像行式数据库那样一行行扫全部数据,才取出需要的列

 

认识ClickHouse

 

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

于2016年开源,采用c++开发。

ClickHouse的性能超过了目前市场上可比的面向列的DBMS。

它每秒处理数亿个到超过十亿行和几十千兆字节的数据。

ClickHouse尽可能快地使用所有可用硬件来处理每个查询。

单个查询的峰值处理性能(在解压缩之后,仅使用列)的速度超过每秒2太字节。

 

ClickHouse可用于分析结构良好且不可变的事件或日志流。

在快手我们的打点就是通过kafka存到ClickHouse,再在Grafana可视化。

ClickHouse支持基于SQL的查询语言,该语言大部分情况下是与SQL标准兼容的。

支持的查询包括 GROUP BY,ORDER BY,IN,JOIN以及非相关子查询。

支持各类的聚合函数。

适合在线查询,在没有对数据做任何预处理的情况下以极低的延迟处理查询并将结果加载到用户的页面中。

 

性能对比:

https://clickhouse.tech/benchmark/dbms/

 

ClickHouse的安装和使用

ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。

虽然预构建的二进制文件通常是为x86 \ _64编译并利用SSE 4.2指令集,但除非另有说明,否则使用支持它的CPU将成为额外的系统要求。

因此需要检查当前CPU是否支持SSE 4.2:

[root@xinyeshuaiqi ~]# grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
SSE 4.2 supported

supported 表示支持

我是在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

启动

sudo service clickhouse-server start

 

 

 

可以在/var/log/clickhouse-server/目录中查看日志。

如果服务没有启动,检查配置文件 /etc/clickhouse-server/config.xml

如果我们不想让 clickhouse 服务在后台运行,也可以在控制台中直接启动服务:

clickhouse-server --config-file=/etc/clickhouse-server/config.xml

 

新开一个命令行,可以使用命令行客户端连接到服务: clickhouse-client

默认情况下它使用‘default’用户无密码的与localhost:9000服务建立连接。 客户端也可以用于连接远程服务,例如:clickhouse-client –host=example.com

 

 

【客户端连接】

clickhouse-client

 

创建数据库

xinyeshuaiqi :) create database xinye;

CREATE DATABASE xinye

Ok.

0 rows in set. Elapsed: 0.005 sec. 

 

创建表

xinyeshuaiqi :) CREATE TABLE IF NOT EXISTS xinye.testTable (id UInt64,name String,age UInt8) ENGINE = MergeTree ORDER BY (id,name)

CREATE TABLE IF NOT EXISTS xinye.testTable
(
    `id` UInt64,
    `name` String,
    `age` UInt8
)
ENGINE = MergeTree
ORDER BY (id, name)

Ok.

0 rows in set. Elapsed: 0.005 sec.

 

插入数据

xinyeshuaiqi :) insert into table xinye.testTable(id, name, age) values(666,'xinye',23);

INSERT INTO xinye.testTable (id, name, age) VALUES

Ok.

1 rows in set. Elapsed: 0.002 sec. 

 

查询数据

xinyeshuaiqi :) select * from  xinye.testTable;

SELECT *
FROM xinye.testTable

┌──id─┬─name──┬─age─┐
│ 666 │ xinye │  23 │
└─────┴───────┴─────┘

1 rows in set. Elapsed: 0.006 sec. 

 

查询某一列数据


xinyeshuaiqi :) select name  from  xinye.testTable;

SELECT name
FROM xinye.testTable

┌─name──┐
│ xinye │
└───────┘

1 rows in set. Elapsed: 0.002 sec. 

 

 

ClickHouse 第三方开发的可视化界面

【Tabix】
https://github.com/tabixio/tabix

浏览器直接连接 ClickHouse,不需要安装其他软件。

也是我们公司目前用的

 

【HouseOps】

https://github.com/HouseOps/HouseOps

 

【LightHouse】

https://github.com/VKCOM/lighthouse

 

参考文章

https://www.jianshu.com/p/ad2533e5cfaa

https://houbb.github.io/2018/12/27/database-clickhouse-01

https://www.jianshu.com/p/5f7809b1965e

https://developer.aliyun.com/article/713387

 

转载请注明:汪明鑫的个人博客 » 高性能列式存储 ClickHouse

喜欢 (0)

说点什么

您将是第一位评论人!

提醒
avatar
wpDiscuz