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