目录
什么是列式数据库?
关系数据库针对存储数据行进行了优化,通常用于事务性应用程序,而列式数据库针对快速检索数据列进行了优化,通常用于分析应用程序。
对于存储而言,列式数据库总是将同一列的数据存储在一起,不同列的数据也总是分开存储。
列式数据对于大多数查询而言,处理速度至少提高了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+
行式:
列式:
- 针对分析类查询,通常只需要读取表中一小部分列。在列式数据库中你可以只读取你需要的数据。如果只需要读取100列中的5列数据,这将帮助你减少20倍的io消耗。
- 由于数据总是打包成批量读取的,所以压缩是非常容易的。同时数据按列分别存储也容易压缩。
- 由于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
说点什么
您将是第一位评论人!