Clickhouse基本教程:简介
#教程 #database #clickhouse

这是 Clickhouse教程系列的第一部分。在本系列中,我涵盖了Clickhouse数据库的一些实用和重要方面,这是许多企业公司使用的强大OLAP技术。

在这一部分中,我将讨论Clickhouse的主要功能,弱点,安装和使用。我还会为那些想深入更广泛细节的人参考一些有用的链接。

什么是Clickhouse

ClickHouse是由Yandex开发的开源列数据库。它旨在为分析查询提供高性能。 ClickHouse使用类似SQL的查询语言来查询数据并支持不同的数据类型,包括整数,字符串,日期和浮点。它提供了各种功能,例如聚类,分布式查询处理和容错。它还支持复制和数据碎片。 Yandex,Facebook和Uber等公司使用Clickhouse进行数据分析,机器学习等。

主要特点

Clickhouse数据库的主要功能是:

面向列

Clickhouse中的数据存储在columns instead of rows中,至少带来两个好处:

  1. 每个列可以在单独的文件中排序;因此,每列和整个表都发生更强的压缩。
  2. 在分析处理中常见的范围查询中,由于数据在某些列中对数据进行排序(即定义为排序键),因此系统可以更轻松地访问和处理数据。此外,它可以在加载大量列时在多核上并行化过程。



以行为导向的数据库(ClickHouse的GIF)



柱状数据库(ClickHouse

注意:当卡桑德拉(Cassandra)将数据存储在行中时,它不应将其误认为是将密集的数据定义的,其中许多列会导致NON-SQL结构。

数据压缩

多亏了压缩算法(zstdLZ4),数据的存储空间少得多,甚至超过20倍!您可以在Clickhouse和其他数据库存储here上研究一些基准。


clickhouse柱状结构导致更有效地存储和读取列(Altinity的图形)

可伸缩性

clickhouse在垂直和水平上均匀缩放。可以通过添加extra replicas和额外的碎片来缩放它以分布式方式处理查询。 ClickHouse支持多主管异步复制,可以在多个数据中心部署。所有节点都是相等的,这允许避免单点失败。

弱点

提及一些:

  • 缺乏全面的更新/删除实现:ClickHouse不适合修改和突变。因此,您会遇到有关此类疑问的不良表现。
  • 诸如尖锐的查询不会让您快乐,因为Clickhouse在像MySQL这样的传统RDBMS上的表现很容易带有这些查询。

竞争对手和替代方案

姓名:

  • apache druid
  • Elasticsearch
  • 坠子
  • 雪花
  • timeScaledB

肯定,每个人都适合不同的用例,并且具有优缺点,但我在这里不会讨论他们的比较。但是,您可以研究一些有价值的基准herehere

快速开始

安装

我在这里仅介绍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;

在接下来的部分中,我们将讨论其他配置,例如EnginePRIMARY KEYORDER 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的特征,功能和弱点。然后,我们看到了如何设置具有最低配置的实例,创建数据库和表格,将数据插入其中。

有用的链接