ClickHouse 是什么
ClickHouse 是一個(gè)開(kāi)源的面向聯(lián)機(jī)分析處理(OLAP, On-Line Analytical Processing) 的列式存儲(chǔ)數(shù)據(jù)庫(kù)管理系統(tǒng)。
在一個(gè) "常規(guī)" 的行式數(shù)據(jù)庫(kù)管理系統(tǒng)中,數(shù)據(jù)按下面的順序存儲(chǔ):
id | name | age ---|----------|---1 | Zhangsan | 182 | GlonHo | 203 | Lisi | 22...| ... | ...
換言之,所有相關(guān)的值在一個(gè)行里面一個(gè)挨一個(gè)存儲(chǔ)。行式存儲(chǔ)的的數(shù)據(jù)庫(kù)管理系統(tǒng)有:MySQL, Postgres, MS SQL Server 等。
在一個(gè)列式存儲(chǔ)數(shù)據(jù)庫(kù)管理系統(tǒng)中,數(shù)據(jù)存儲(chǔ)的方式如下所示:
id: 1 2 3 ...name: Zhangsan GlonHo Lisi ...age: 18 20 22 ...
列式存儲(chǔ)的數(shù)據(jù)庫(kù)管理系統(tǒng)更適合于 OLAP 場(chǎng)景(對(duì)于大多數(shù)查詢,至少有 100 倍的處理速度提升)的原因有:
I/O 方面:
對(duì)于一個(gè)分析的查詢,只需要表中少量的列。在一個(gè)列存儲(chǔ)數(shù)據(jù)庫(kù)管理系統(tǒng)中,可以只讀取所需的數(shù)據(jù)。例如,如果只需要從 100 列中讀取 5 列,那么預(yù)期可以減少 20倍 I/O
列式存儲(chǔ)數(shù)據(jù),更易于壓縮,進(jìn)一步減少 I/O
由于減少了 I/O,系統(tǒng)中可以緩存更多符合要求的數(shù)據(jù)
CPU 方面:
執(zhí)行一個(gè)查詢需要處理大量的行,它有助于調(diào)度所有操作對(duì)整個(gè)向量而不是單獨(dú)的行,或?qū)崿F(xiàn)查詢引擎,這樣幾乎沒(méi)有調(diào)度成本,如果不這么做,對(duì)于任意還過(guò)得去的磁盤(pán)子系統(tǒng),查詢解釋器不可避免地分?jǐn)?CPU。