ClickHouse

ClickHouse

简介

clickhouse是2016年由俄罗斯Yandex开源的一个OLAP列存数据库,拥有原生的向量化执行引擎

特性

  • 列式数据库。 没有任何内容与值一起存储;
  • 线性扩展。 可以通过添加服务器来扩展集群;
  • 容错性。 系统是一个分片集群,其中每个分片都是一组副本。ClickHouse使用异步多主复制。数据写入任何可用的副本,然后分发给所有剩余的副本。Zookeeper用于协调进程,但不涉及查询处理和执行。
  • PB级数据支持。能够存储和处理数PB的数据。
  • SQL支持。 Clickhouse支持类似SQL的扩展语言,包括数组和嵌套数据结构、近似函数和URI函数,以及连接外部键值存储的可用性。
  • *高性能。
    • 使用向量计算。数据不仅由列存储,而且由向量处理(一部分列)。这种方法可以实现高CPU性能。
    • 支持采样和近似计算。
    • 可以进行并行和分布式查询处理(包括JOIN)。
  • 数据压缩。
  • HDD优化。 该系统可以处理不适合内存的数据。
  • 用于数据库(DB)连接的客户端。

不足

  • 不支持事务
  • 默认情况下,在执行聚合时,查询中间状态必须适合单个服务器上的RAM。但是,在这种情况下,可以将ClickHouse配置为溢出到磁盘上;
  • 缺乏完整的UPDATE/DELETE实现;

架构

ClickHouse 采用典型的分组式的分布式架构,具体集群架构如上图所示:

  • Shard:集群内划分为多个分片或分组(Shard 0 … Shard N),通过 Shard 的线性扩展能力,支持海量数据的分布式存储计算。
  • Node:每个 Shard 内包含一定数量的节点(Node,即进程),同一 Shard 内的节点互为副本,保障数据可靠。ClickHouse 中副本数可按需建设,且逻辑上不同 Shard 内的副本数可不同。
  • ZooKeeper Service:集群所有节点对等,节点间通过 ZooKeeper 服务进行分布式协调。

常用场景

Clickhouse是为OLAP查询而设计的。

  • 它可以处理少量包含大量字段的表。
  • 查询可以使用从数据库中提取的大量行,但只用一小部分字段。
  • 查询相对较少(通常每台服务器大约100个RPS)。
  • 对于简单的查询,允许大约50毫秒的延迟。
  • 列值相当小,通常由数字和短字符串组成(例如每个URL,60字节)。
  • 处理单个查询时需要高吞吐量(每台服务器每秒数十亿行)。
  • 查询结果主要是过滤或聚合的。
  • 数据更新使用简单的场景(通常只是批量处理,没有复杂的事务)。

ClickHouse的一个常见情况是服务器日志分析。在将常规数据上传到ClickHouse之后(建议将数据每次1000条以上批量插入),就可以通过即时查询分析事件或监视服务的指标,如错误率、响应时间等。

ClickHouse还可以用作内部分析师的内部数据仓库。ClickHouse可以存储来自不同系统的数据(比如Hadoop或某些日志),分析人员可以使用这些数据构建内部指示板,或者为了业务目的执行实时分析。

参考

  1. https://zh.wikipedia.org/wiki/ClickHouse

  2. 漫谈SIMD、SSE指令集与ClickHouse向量化执行 - 简书

  3. https://zhuanlan.zhihu.com/p/22165241

updatedupdated2024-05-152024-05-15