# clickhouse
为了解决数据孤岛的问题,人们提出了数据仓库的概念
第一类架构称为 ROLAP(Relational OLAP,关系型 OLAP)
第二类架构称为 MOLAP(Multidimensional OLAP,多维型 OLAP)。它的出现是为了缓解 ROLAP 性能问题。MOLAP 使用多维数组的形式保存数据,其核心思想是借助预先聚合结果,使用空间换取时间的形式最终提升查询性能
相比 InnoDB 表引擎,MyISAM 表引擎在分析场景中具有更好的性能。
CK 不支持事务。 不擅长根据主键按行粒度进行查询(虽然支持),故不应该把 ClickHouse 当作 Key-Value 数据库使用。
不擅长按行删除数据(虽然支持)
相同列压缩,数据默认使用 LZ4 算法压缩,在 Yandex.Metrica 的生产环境中,数据总体的压缩比可以达到 8:1(未压缩前 17PB,压缩后 2PB)
列式存储除了降低 IO 和存储的压力之外,还为向量化执行做好了铺垫。
ClickHouse 则采用 Multi-Master 多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能得到相同的效果。这种多主的架构有许多优势,例如对等的角色使系统架构变得更加简单,不用再区分主控节点、数据节点和计算节点,集群中的所有节点功能相同。所以它天然规避了单点故障的问题,非常适合用于多数据中心、异地多活的场景。
Vertica 这类商用软件价格高昂;SparkSQL 与 Hive 这类系统无法保障 90%的查询在 1 秒内 返回,在大数据量下的复杂查询可能会需要分钟级的响应时间;而 Elasticsearch 这类搜索引擎在处理亿级数据聚合查询时则显得捉襟见肘。
# 基本数据类型
https://clickhouse.com/docs/en/sql-reference/data-types/ (opens new window)
# DSL
# 使用 MergeTree 引擎的建表语句语法
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
...
INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
ORDER BY expr
[PARTITION BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]
2
3
4
5
6
7
8
9
10
11
12
13
14
← c/c++ command line →