这是 Clickhouse教程系列的第一部分。在本系列中,我涵盖了Clickhouse数据库的一些实用和重要方面,这是许多企业公司使用的强大OLAP技术。
在这一部分中,我将讨论Clickhouse的主要功能,弱点,安装和使用。我还会为那些想深入更广泛细节的人参考一些有用的链接。
什么是Clickhouse
ClickHouse是由Yandex开发的开源列数据库。它旨在为分析查询提供高性能。 ClickHouse使用类似SQL的查询语言来查询数据并支持不同的数据类型,包括整数,字符串,日期和浮点。它提供了各种功能,例如聚类,分布式查询处理和容错。它还支持复制和数据碎片。 Yandex,Facebook和Uber等公司使用Clickhouse进行数据分析,机器学习等。
主要特点
Clickhouse数据库的主要功能是:
面向列
Clickhouse中的数据存储在columns instead of rows中,至少带来两个好处:
- 每个列可以在单独的文件中排序;因此,每列和整个表都发生更强的压缩。
- 在分析处理中常见的范围查询中,由于数据在某些列中对数据进行排序(即定义为排序键),因此系统可以更轻松地访问和处理数据。此外,它可以在加载大量列时在多核上并行化过程。
注意:当卡桑德拉(Cassandra)将数据存储在行中时,它不应将其误认为是将密集的数据定义的,其中许多列会导致NON-SQL结构。
。
数据压缩
多亏了压缩算法(zstd和LZ4),数据的存储空间少得多,甚至超过20倍!您可以在Clickhouse和其他数据库存储here上研究一些基准。
可伸缩性
clickhouse在垂直和水平上均匀缩放。可以通过添加extra replicas和额外的碎片来缩放它以分布式方式处理查询。 ClickHouse支持多主管异步复制,可以在多个数据中心部署。所有节点都是相等的,这允许避免单点失败。
弱点
提及一些:
- 缺乏全面的更新/删除实现:ClickHouse不适合修改和突变。因此,您会遇到有关此类疑问的不良表现。
- 诸如尖锐的查询不会让您快乐,因为Clickhouse在像MySQL这样的传统RDBMS上的表现很容易带有这些查询。
竞争对手和替代方案
姓名:
- apache druid
- Elasticsearch
- 坠子
- 雪花
- timeScaledB
肯定,每个人都适合不同的用例,并且具有优缺点,但我在这里不会讨论他们的比较。但是,您可以研究一些有价值的基准here和here。
快速开始
安装
我在这里仅介绍Docker方法。有关不同发行版的其他方法,请关注ClicHouse's official Installation.
docker-compose文件:
version: '2'
services:
clickhouse:
container_name: myclickhouse
image: clickhouse/clickhouse-server:latest
ports:
- "8123:8123"
- "9000:9000"
volumes:
- ./clickhouse-data:/var/lib/clickhouse/
restart: unless-stopped
然后通过:
运行它
docker compose up -d
如您所见,已经暴露了两个端口:
- 8123 :HTTP API端口,用于HTTP请求,JDBC,ODBC和Web Interfaces使用。
- 9000 :本机协议端口(ClickHouse TCP协议)。 Clickhouse应用程序和流程(例如 clickhouse-server , clickhouse-client 和本机Clickhouse工具)使用。用于分布式查询的服务间通信。
由您的客户驱动程序选择其中一个。例如,DBeaver使用8123,而Python ClickhHouse-Driver使用9000。
要继续教程,我们使用已安装服务器上可用的ClickHouse-Client:
docker exec -it myclickhouse clickhouse-client
数据库和表创建
创建数据库测试:
CREATE DATABASE test;
创建表orders
:
CREATE TABLE test.orders
(`OrderID` Int64,
`CustomerID` Int64,
`OrderDate` DateTime,
`Comments` String,
`Cancelled` Bool)
ENGINE = MergeTree
PRIMARY KEY (OrderID, OrderDate)
ORDER BY (OrderID, OrderDate, CustomerID)
SETTINGS index_granularity = 8192;
在接下来的部分中,我们将讨论其他配置,例如Engine
,PRIMARY KEY
,ORDER BY
等。
插入数据
插入样本数据:
INSERT INTO test.orders
VALUES (334, 123, '2021-09-15 14:30:00', 'some comment',
false);
读取数据
就像其他任何SQL查询一样:
SELECT OrderID, OrderDate FROM test.orders;
结论
在 Clickhouse教程系列的第一部分中,我们讨论了Clickhouse的特征,功能和弱点。然后,我们看到了如何设置具有最低配置的实例,创建数据库和表格,将数据插入其中。
。