連續四年百度Java崗必問面試題!深夜思考
ClickHouse 是什麼?
ClickHouse:是一個用於聯機分析(OLAP)的列式資料庫管理系統(DBMS)
我們首先理清一些基礎概念
- OLTP:是傳統的關係型資料庫,主要操作增刪改查,強調事務一致性,比如銀行系統、電商系統
- OLAP:是倉庫型資料庫,主要是讀取資料,做複雜資料分析,側重技術決策支援,提供直觀簡單的結果
接著我們用圖示,來理解一下列式資料庫和行式資料庫區別
在傳統的行式資料庫系統中(MySQL、Postgres和MS SQL Server),資料按如下順序儲存:
在列式資料庫系統中(ClickHouse),資料按如下的順序儲存:
兩者在儲存方式上對比:
以上是ClickHouse基本介紹
二、業務問題
業務端現有儲存在Mysql中,5000萬資料量的大表及兩個輔表,單次聯表查詢開銷在3min+,執行效率極低。經過索引優化、水平分表、邏輯優化,成效較低,因此決定藉助ClickHouse來解決此問題
最終通過優化,查詢時間降低至1s內,查詢效率提升200倍!
希望通過本文,可以幫助大家快速掌握這一利器,並能在實踐中少走彎路。
三、ClickHouse實踐
1.Mac下的Clickhouse安裝
我是通過docker安裝,也可以下載CK編譯安裝,相對麻煩一些。
2.資料遷移:從Mysql到ClickHouse
ClickHouse支援Mysql大多數語法,遷移成本低,目前有[五種遷移]
- create table engin mysql,對映方案資料還是在Mysql
- insert into select from,先建表,在匯入
- create table as select from,建表同時匯入
- csv離線匯入
- streamsets
選擇第三種方案做資料遷移:
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = Mergetree AS SELECT * FROM mysql('host:port', 'db', 'database', 'user', 'password')
3.效能測試對比
型別 | 資料量 | 表大小 | 查詢速度 |
---|---|---|---|
Mysql | 5000萬 | 10G | 205s |
ClickHouse | 5000萬 | 600MB | 1s內 |
4.資料同步方案
臨時表
圖片來源:新建temp中間表,將Mysql資料全量同步到ClickHouse內temp表,再替換原ClickHouse中的表,適用資料量適度,增量和變數頻繁的場景
總結
本文從基礎到高階再到實戰,由淺入深,把MySQL講的清清楚楚,明明白白,這應該是我目前為止看到過最好的有關MySQL的學習筆記了,我相信如果你把這份筆記認真看完後,無論是工作中碰到的問題還是被面試官問到的問題都能迎刃而解!
重要的事:需要領取完整版的MySQL學習筆記的話,請轉發+關注後點這裡免費獲取到免費的下載方式!
MySQL50道高頻面試題整理: