Big Data

ClickHouse概述

2019-04-28  本文已影响0人  盗梦者_56f2

简介

ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
列式数据库总是将同一列的数据存储在一起,不同列的数据也总是分开存储。

支持的特性

不支持的特性

性能

架构

ClickHouse是一个完全面向列式的分布式数据库。数据通过列存储,在查询过程中,数据通过数组来处理(向量或者列Chunk)。当进行查询时,操作被转发到数组上,而不是在特定的值上。因此被称为”向量化查询执行”,相对于实际的数据处理成本,向量化处理具有更低的转发成本。

表引擎

对于大多数正式的任务,应该使用MergeTree族中的引擎。
Clickhouse 中最强大的表引擎当属 MergeTree (合并树)引擎及该系列(*MergeTree)中的其他引擎。

TinyLog

最简单的表引擎,用于将数据存储在磁盘上。每列都存储在单独的压缩文件中。写入时,数据将附加到文件末尾。不支持索引。
并发数据访问不受任何限制: - 如果同时从表中读取并在不同的查询中写入,则读取操作将抛出异常 - 如果同时写入多个查询中的表,则数据将被破坏。
这种表引擎的典型用法是 write-once:首先只写入一次数据,然后根据需要多次读取。查询在单个流中执行。换句话说,此引擎适用于相对较小的表(建议最多1,000,000行)。

Memory

Memory 引擎以未压缩的形式将数据存储在内存中。数据完全以读取时获得的形式存储。换句话说,从这张表中读取是很轻松的。并发数据访问是同步的。锁范围小:读写操作不会相互阻塞。不支持索引。阅读是并行化的。在简单查询上达到最大生产率(超过10 GB /秒),因为没有磁盘读取,不需要解压缩或反序列化数据。(值得注意的是,在许多情况下,与 MergeTree 引擎的性能几乎一样高)。重新启动服务器时,表中的数据消失,表将变为空。通常,使用此表引擎是不合理的。

Merge

Merge 引擎本身不存储数据,但可用于同时从任意多个其他的表中读取数据。 读是自动并行的,不支持写入。读取时,那些被真正读取到数据的表的索引(如果有的话)会被使用。 Merge 引擎的参数:一个数据库名和一个用于匹配表名的正则表达式。

Distributed

分布式引擎本身不存储数据, 但可以在多个服务器上进行分布式查询。 读是自动并行的。读取时,远程服务器表的索引(如果有的话)会被使用。 分布式引擎参数:服务器配置文件中的集群名,远程数据库名,远程表名,数据分片键(可选)。远程服务器不仅用于读取数据,还会对尽可能数据做部分处理。分片是指包含数据不同部分的服务器(要读取所有数据,必须访问所有分片)。 副本是存储复制数据的服务器(要读取所有数据,访问任一副本上的数据即可)。配置了副本,读取操作会从每个分片里选择一个可用的副本。可配置负载平衡算法(挑选副本的方式)。 如果跟服务器的连接不可用,则在尝试短超时的重连。如果重连失败,则选择下一个副本,依此类推。如果跟所有副本的连接尝试都失败,则尝试用相同的方式再重复几次。 该机制有利于系统可用性,但不保证完全容错:如有远程服务器能够接受连接,但无法正常工作或状况不佳。

Null

当写入 Null 类型的表时,将忽略数据。从 Null 类型的表中读取时,返回空。
但是,可以在 Null 类型的表上创建物化视图。写入表的数据将转发到视图中。

MergeTree

MergeTree 引擎系列的基本理念如下:当有巨量数据要插入到表中时,需要高效地一批批写入数据片段,并希望这些数据片段在后台按照一定规则合并。

特点
存储

表由按主键排序的数据片段组成。
当数据被插入到表中时,会分成数据片段并按主键的字典序排序。
不同分区的数据会被分成不同的片段,ClickHouse 在后台合并数据片段以便更高效存储。不会合并来自不同分区的数据片段。这个合并机制并不保证相同主键的所有行都会合并到同一个数据片段中。

主键与排序键
上一篇 下一篇

猜你喜欢

热点阅读