提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 概述
    • 1.适用场景
    • 2.不适用场景
  • 一、核心特性
    • 1.完备的DBMS功能
    • 2.列式存储与数据压缩
  • 二、安装部署
    • 1.在线安装
    • 2.离线安装
  • 三、jdbc访问
  • 四、数据类型
  • 五、数据库引擎
    • MergeTree家族
  • 六、表引擎
  • 七、集群、分片与副本
    • zookeeper配置
    • 1个分片3个副本repos1r3集群配置
  • 总结

概述

  • ClickHouse 是一个用于联机分析 (OLAP) 的开源的列式数据库管理系统 (DBMS)。来自于俄罗斯本土搜索引擎企业 Yandex 公司。
  • ClickHouse具有ROLAP、在线实时查询、完整的 DBMS 功能支持、列式存储、支持批量更新、拥有非常完善的SQL支持和函数、支持高可用、不依赖 Hadoop 复杂生态、开箱即用等许多特点。
  • 在 1 亿数据集体量的情况下,ClickHouse 的平均响应速度是 Vertica 的 2.63 倍、InfiniDB 的 17 倍、MonetDB 的 27 倍、Hive 的 126 倍、MySQL 的429 倍以及Greenplum 的 10 倍。

1.适用场景

  • ClickHouse在存储数据超过20万亿行的情况下,做到了90%的查询都能够在1秒内返回的惊人之举。可以说ClickHouse具备了人们对一款高性能OLAP数据库的美好向往,所以它基本能够胜任各种数据分析类的场景,并且随着数据体量的增大,它的优势也会变得越为明显。
  • ClickHouse非常适用于商业智能领域(也就是我们所说的BI领域),除此之外,它也能够被广泛应用于广告流量、Web、App流量、电信、金融、电子商务、信息安全、实时数仓、物联网等众多其他领域。
  • 在国内的应用:
    今日头条内部用 ClickHouse来做用户行为分析,几千个 ClickHouse 节点,单集群最大 1200 节点,总数据量几十PB,日增原始数据300TB左右。
    腾讯内部用 ClickHouse做游戏数据分析,并且为之建立了一整套监控运维体系。
    携程内部80%的业务都跑在ClickHouse 上。每天数据增量十多亿,近百万次查询请求。
    快手内部也在使用 ClickHouse,存储总量大约10PB,每天新增 200TB,90% 查询小于 3S。

2.不适用场景

不支持高并发
没有完整的事务支持
稀疏索引导致 ClickHouse 不擅长细粒度或者 key-value 类型数据的查询需求
缺少高频率,低延迟的修改或删除数据的能力
两张大表join性能不高


一、核心特性

1.完备的DBMS功能

作为一个DBMS,它具备了一些基本功能,如下所示:
DDL(数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务。
DML(数据操作语言):可以动态查询、插入、修改或删除数据。
ClickHouse提供了DELETE和UPDATE的能力,这类操作被称为Mutation操作,是一种“很重”的操作,更适用于批量数据的修改和删除;
ALTER TABLE 表名 DELETE WHERE nodeid = ‘’;
ALTER TABLE表名 UPDATE 字段名=新值 WHERE xxx=xxx

权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
分布式管理:提供集群模式,能够自动管理多个数据库节点。

2.列式存储与数据压缩

  • 列式存储和数据压缩,是高性能数据库必不可少的特性。列式存储和数据压缩通常是伴生的,因为一般来说列式存储是数据压缩的前提。
  • 列式存储避免了多余的数据扫描
  • ClickHouse默认使用LZ4算法压缩,在Yandex的生产环境中,数据总体的压缩比可以达到8:1。

二、安装部署

1.在线安装

ClickHouse 可以通过源码编译、在线安装、Docker 镜像和 RPM 等多种方法进行安装。
Yum在线安装命令:
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
修改配置文件config.xml,允许所有ip访问
::
启动clickhouse
sudo /etc/init.d/clickhouse-server start

2.离线安装

需要下载以下4个安装包文件:
clickhouse-client-21.7.4.18-2.noarch.rpm
clickhouse-common-static-21.7.4.18-2.x86_64.rpm
clickhouse-server-21.7.4.18-2.noarch.rpm
clickhouse-server-common-21.7.4.18-2.x86_64.rpm
执行如下命令后即可安装RPM文件:
rpm -ivh ./*.rpm

可以使用clickhouse-client命令对数据库进行访问

三、jdbc访问

1、单机环境
官方最新驱动

com.clickhouse
clickhouse-jdbc
0.4.1
all

获取单节点连接代码示例:

2、集群环境
1 使用Nginx、F5等三方软件或设备做负载均衡。代码中访问地址为负载均衡ip地址。
2 使用jdbc的负载均衡功能,此种方式没有故障转移功能。


四、数据类型

基础类型:
数值类型:整数、浮点数和定点数三类
字符串类型:String、FixedString和UUID三类
时间类型:DateTime、DateTime64和Date三类
复合类型:
Array、Tuple、Enum和NestedNested四类
复合类型:
Nullable、Domain(IPv4和IPv6)

五、数据库引擎

1、Atomic
默认引擎,在此引擎下可以使用任意类型的表引擎。
2、MySQL
MySQL引擎用于将远程的MySQL服务器中的表映射到ClickHouse中,并允许您对表进行INSERT和SELECT查询,以方便您在ClickHouse与MySQL之间进行数据交换。引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中。
3、MaterializedMySQL
试验性特性,ClickHouse服务器作为MySQL副本工作。它读取binlog并执行DDL和DML查询。
4、Lazy
在最后一次访问之后,只在RAM中保存expiration_time_in_seconds秒。只能用于*Log表。
5、PostgreSQL
允许连接到远程PostgreSQL服务。支持读写操作(SELECT和INSERT查询),以在ClickHouse和PostgreSQL之间交换数据。
6、MaterializedPostgreSQL
同MaterializedMySQL
7、[experimental]Replicated
它支持通过将DDL日志写入ZooKeeper并在给定数据库的所有副本上执行的元数据复制。
一个ClickHouse服务器可以同时运行和更新多个复制的数据库。但是同一个复制的数据库不能有多个副本。
8、SQLite
允许连接到SQLite数据库,并支持ClickHouse和SQLite交换数据, 执行 INSERT 和 SELECT 查询。

MergeTree家族

MergeTree作为家族中最基础的表引擎,提供了主键索引、数据分区和数据TTL等基本能力,家族中其他的表引擎则在MergeTree的基础之上各有所长。

  • 基础MergeTree
    MergeTree 表引擎主要用于海量数据分析,支持数据分区、存储有序、主键索引、稀疏索引、数据 TTL 等。MergeTree 支持所有ClickHouse SQL 语法。虽然MergeTree拥有主键,但是它的主键却没有唯一键的约束。
    CREATE TABLE [IF NOT EXISTS] [db_name.]table_name (
    name1 [type] [DEFAULT| not null|ALIAS expr],
    name2 [type] [DEFAU T| not null| |ALIAS expr],
    省略…
    ) ENGINE = MergeTree() [PARTITION BY expr] [ORDER BY expr] [PRIMARY KEY expr]
    [SAMPLE BY expr] [SETTINGS name=value, 省略…]

PARTITION BY:分区键。指定表数据以何种标准进行分区。分区键既可以是单列字段,也可以多个列字段,也支持使用列表达式。
ORDER BY:排序键,用于指定在一个数据片段内,数据以何种标准排序。默认情况下主键(PRIMARY KEY)与排序键相同。
PRIMARY KEY:主键。声明后会依照主键字段生成一级索引。默认情况下,主键与排序键(ORDER BY)相同,所以通常使用 ORDER BY 代为指定主键。如果同时声明了ORDER BY与PRIMARY KEY,MergeTree会强制要求PRIMARY KEY列字段必须是ORDER BY的前缀。

  • ReplacingMergeTree
    为了解决 MergeTree 相同主键无法去重的问题,ClickHouse 提供了 ReplacingMergeTree 引擎,用来做去重。ReplacingMergeTree确保数据最终被去重,但是无法保证查询过程中主键不重复。因为相同主键的数据可能被 shard 到不同的节点,但是 compaction 只能在一个节点中进行,而且 optimize 的时机也不确定。
  • SummingMergeTree
    支持对主键列进行预先聚合。在后台 Compaction 时,会将主键相同的多行进行 sum 求和,然后使用一行数据取而代之,从而大幅度降低存储空间占用,提升聚合计算性能。
  • AggregatingMergeTree
    预先聚合引擎的一种,用于提升聚合计算的性能。与 SummingMergeTree 的区别在于:SummingMergeTree 对非主键列进行 sum 聚合,而 AggregatingMergeTree 则可以指定各种聚合函数。 。
  • CollapsingMergeTree
    ClickHouse虽提供了DELETE和UPDATE的能力,但这类操作被称为Mutation操作,是一种“很重”的操作,适用于批量数据的修改和删除;为支持细粒度的修改和删除行,提供了CollapsingMergeTree, CollapsingMergeTree通过以增代删的思路,支持行级数据修改和删除的表引擎。在建表语句中指定一个标记列 Sign(插入的时候指定为 1,删除的时候指定为 -1)。

六、表引擎

ClickHouse拥有合并树(MergeTree) 、外部存储、内存、文件、接口和其他6大类20多种表引擎。而在这众多的表引擎中,又属合并树(MergeTree)表引擎及其家族系列(*MergeTree)最为强大,在生产环境的绝大部分场景中,都会使用此系列的表引擎。

七、集群、分片与副本

  • 集群是副本和分片的基础,它将 clickhouse 的服务拓扑由单节点延伸到多个节点。
  • clickhouse 集群配置很灵活,既可以将所有节点组成一个单一的大集群,也可以按照业务需求,把节点划分为多个小集群。
  • 在每个小集群区域之间,它们的节点、分区和副本数量可以各不相同。
  • 副本与分片的区别:
    从数据层面上区分,假设 clickhouse 有 N 个节点,在集群的各个节点上都有一张结构相同的数据表 Y , 如果 N1,N2 两个节点的数据完全相同,则互为副本,如果数据完全不同则互为分片。
    从功能层面上看,副本的主要目的是为了防止数据丢失,而数据分片是为了实现数据的水平切分。

zookeeper配置

zookeeper配置如下:

zookeeper配置如下: <zookeeper><node><host>td65</host><port>2181</port></node> <node><host>td66</host><port>2181</port></node></zookeeper>

1个分片3个副本repos1r3集群配置

<test_s1r3><shard><internal_replication>false</internal_replication><replica><host>ck65</host><port>9000</port></replica><replica><host>ck66</host><port>9000</port></replica><replica><host>ck67</host><port>9000</port></replica></shard></test_s1r3><macros><shard>01</shard><replica>每台机器不同</replica> </macros>

总结

详细内容请下载 ClickHouse数据库详解和应用实践