使用ClickHouse一鍵接管MySQL數(shù)據(jù)分析

  • 為啥有這篇文章博脑?
    • 很多人好奇ClickHouse添履,都聽說過很快屁倔,但是到底有多恐怖?
    • 新建表還要理解ClickHouse的引擎和數(shù)據(jù)類型暮胧,好麻煩
    • 今天锐借,用一個(gè)簡單粗暴的功能,幫你一鍵導(dǎo)入MySQL的數(shù)據(jù)往衷,無需人肉建表

數(shù)據(jù)導(dǎo)入

第一組

# du出的表大小
5.5G    article_clientuser_sum.ibd

# ClickHouse操作語句
CREATE TABLE article_clientuser_sum
ENGINE = MergeTree
ORDER BY id AS
SELECT *
FROM mysql('host:port', 'db', 'article_clientuser_sum', 'user', 'password') 

# 耗時(shí)和平均速度
0 rows in set. Elapsed: 137.251 sec. Processed 18.59 million rows, 7.34 GB (135.43 thousand rows/s., 53.48 MB/s.)

第二組

# 另一個(gè)表
20G     xx_httpcode_minf.ibd

CREATE TABLE xx_httpcode_minf
ENGINE = MergeTree
ORDER BY id AS
SELECT *
FROM mysql('host:port', 'db', 'tb', 'user', 'password') 

# 不知道為啥這表這么快就導(dǎo)入了 貌似是行少钞翔,但是表的總大小大啊
0 rows in set. Elapsed: 44.389 sec. Processed 13.03 million rows, 1.44 GB (293.44 thousand rows/s., 32.35 MB/s.)

PK之count(*)

第一組

# 1800w

# ClickHouse
SELECT count(*)
FROM article_clientuser_sum
┌──count()─┐
│ 18587381 │
└──────────┘

1 rows in set. Elapsed: 0.033 sec. Processed 18.59 million rows, 74.35 MB (556.76 million rows/s., 2.23 GB/s.)


# MySQL
mysql> select count(*) from article_clientuser_sum ;
+----------+
| count(*) |
+----------+
| 18587381 |
+----------+
1 row in set (39.48 sec)

# 性能 1196X

第二組

# 1300w

# ClickHouse
SELECT count(*)
FROM xx_httpcode_minf
┌──count()─┐
│ 13025469 │
└──────────┘
1 rows in set. Elapsed: 0.032 sec. Processed 13.03 million rows, 52.10 MB (406.68 million rows/s., 1.63 GB/s.)

# MySQL
mysql> SELECT count(*)
    -> FROM xx_httpcode_minf;
+----------+
| count(*) |
+----------+
| 13025469 |
+----------+
1 row in set (1 min 46.87 sec)

# 性能 3340X

PK之復(fù)雜查詢

第一組

# ClickHouse

SELECT SUM(size) AS size
FROM xx_network_flow
WHERE (date >= '2018-01-01') AND (date <= '2018-01-31') AND (netstat = 0) AND (project LIKE '保密%')

Row 1:
──────
size: 4132888693

1 rows in set. Elapsed: 0.039 sec. Processed 841.66 thousand rows, 9.46 MB (21.67 million rows/s., 243.70 MB/s.)


# MySQL
+------------+
| size       |
+------------+
| 4132888693 |
+------------+
1 row in set (2.34 sec)

# 性能 60X

  • SQL太長,截圖示例
  • SQL里的xxx均為脫敏數(shù)據(jù)
# ClickHouse
┌─────size─┐
│ 76888224 │
└──────────┘

1 rows in set. Elapsed: 0.137 sec. Processed 841.66 thousand rows, 9.46 MB (6.13 million rows/s., 68.97 MB/s.)


# MySQL
+----------+
| size     |
+----------+
| 76888224 |
+----------+
1 row in set (2.86 sec)

# 性能 21X

第二組

# ClickHouse
SELECT
    project,
    idc,
    minf,
    http_code,
    sum(sumhit) AS num
FROM xx_httpcode_minf
WHERE (date = '2018-01-16') AND (httptype = 'download') AND \
(minf >= 0) AND (minf <= 288) AND \
(http_code IN ('200', '500', '404', '502', '503', '504'))
GROUP BY
    project,
    idc,
    minf,
    http_code
ORDER BY num DESC
LIMIT 3

┌─project─────────────────────────────────────┬─idc────┬─minf─┬─http_code─┬────num─┐
│ 域名1xxxx │ .1xx │  195 │ 200       │ 247522 │
│ 域名2xxxx │ .2xx │  185 │ 200       │ 246613 │
│ 域名3xxxx │ .3xx │  188 │ 200       │ 245808 │
└─────────────────────────────────────────────┴────────┴──────┴───────────┴────────┘

3 rows in set. Elapsed: 0.161 sec. Processed 13.03 million rows, 284.63 MB (80.94 million rows/s., 1.77 GB/s.)

# MySQL
+---------------------------------------------+--------+------+-----------+--------+
| project                                     | idc    | minf | http_code | num    |
+---------------------------------------------+--------+------+-----------+--------+
| 域名1xxxx| .1.xx |  195 | 200       | 247522 |
|  域名2xxxx | .2.xxx |  185 | 200       | 246613 |
|  域名3xxxx | .3xx |  188 | 200       | 245808 |
+---------------------------------------------+--------+------+-----------+--------+
3 rows in set (12.02 sec)

# 性能 75X

  • SQL太長席舍,截圖示例
  • SQL里的xxx均為脫敏數(shù)據(jù)


# ClickHouse

┌─project────────────────────────────┬─idc────┬─minf─┬─http_code─┬───num─┐
│  域名1 │ 1xxx│  154 │ 404       │ 10792 │
│  域名1 │ 2xxx │  155 │ 404       │ 10395 │
│ 域名1│ 3xxx │  272 │ 404       │ 10313 │
└────────────────────────────────────┴────────┴──────┴───────────┴───────┘

3 rows in set. Elapsed: 0.119 sec. Processed 13.03 million rows, 283.15 MB (109.10 million rows/s., 2.37 GB/s.)


# MySQL
+------------------------------------+--------+------+-----------+-------+
| project                            | idc    | minf | http_code | num   |
+------------------------------------+--------+------+-----------+-------+
|  域名1 | .1zz |  154 | 404       | 10792 |
|  域名1 | .3xx |  155 | 404       | 10395 |
|  域名1 | .3rr |  272 | 404       | 10313 |
+------------------------------------+--------+------+-----------+-------+
3 rows in set (2.19 sec)

# 性能 18X

壓縮對比

表名 MySQL表容量 ClickHouse表容量 壓縮倍數(shù)
article_clientuser_sum 5.5GB 1.2G 4.6
xx_httpcode_minf 20GB 243M 84
xx_network_flow 189MB 25M 7.56
  • :xx_httpcode_minf這個(gè)表的MySQL文件20個(gè)G布轿,應(yīng)該是有大量的空洞造成的,這也就是Facebook的人開發(fā)MyRocks的原因:減少空洞来颤,節(jié)省磁盤

風(fēng)險(xiǎn)

  • 目前該功能還處于初級階段汰扭,有不完善的地方,比如數(shù)據(jù)導(dǎo)入的方式比較粗暴福铅,中間如果有異常萝毛,需要重新執(zhí)行(使用的ClickHouse版本為:1.1.54342)
  • MySQL的參數(shù)需要修改,如max_allowed_packet
  • 數(shù)據(jù)導(dǎo)入時(shí)需要注意帶寬滑黔,實(shí)測可以達(dá)到50MB/S
  • 如果MySQL里的字段有decimal字符類型會怎么樣笆包?ClickHouse沒有雙精度的類型
  • 部分SQL需要改寫
    • 如雙引號改單引號

討論

  • ClickHouse為啥快?

    1. MySQL單條SQL是單線程的略荡,只能跑滿一個(gè)core庵佣,ClickHouse相反,有多少CPU撞芍,吃多少資源秧了,所以飛快
    2. ClickHouse不支持事務(wù),不存在隔離級別序无。這里要額外說一下验毡, 有人覺得衡创,你一個(gè)數(shù)據(jù)庫都不支持事務(wù),不支持ACID還玩?zhèn)€毛晶通。ClickHouse的定位是分析性數(shù)據(jù)庫璃氢,而不是嚴(yán)格的關(guān)系型數(shù)據(jù)庫。又有人要問了狮辽,數(shù)據(jù)都不一致一也,統(tǒng)計(jì)個(gè)毛。舉個(gè)例子喉脖,汽車的油表是100%準(zhǔn)確么椰苟?為了獲得一個(gè)100%準(zhǔn)確的值,難道每次測量你都要停車檢查么树叽?統(tǒng)計(jì)數(shù)據(jù)的意義在于用大量的數(shù)據(jù)看規(guī)律舆蝴,看趨勢,而不是100%準(zhǔn)確题诵。
    3. IO方面洁仗,MySQL是行存儲,ClickHouse是列存儲性锭,后者在count()這類操作天然有優(yōu)勢赠潦,同時(shí),在IO方面草冈,MySQL需要大量隨機(jī)IO她奥,ClickHouse基本是順序IO。
    4. 有人可能覺得上面的數(shù)據(jù)導(dǎo)入的時(shí)候疲陕,數(shù)據(jù)肯定緩存在內(nèi)存里了方淤,這個(gè)的確,但是ClickHouse基本上是順序IO蹄殃,用過就知道了携茂,對IO基本沒有太高要求,當(dāng)然诅岩,磁盤越快讳苦,上層處理越快,但是99%的情況是吩谦,CPU先跑滿了(數(shù)據(jù)庫里太少見了鸳谜,大多數(shù)都是IO不夠用)。
  • 說到MySQL上跑的各種復(fù)雜查詢式廷,那是相當(dāng)痛苦的回憶咐扭。從索引層面,很難對這些SQL進(jìn)行優(yōu)化,這也是我從MySQL DBA轉(zhuǎn)做數(shù)據(jù)分析后要解決的第一個(gè)問題

  • 專業(yè)的事情讓專業(yè)的數(shù)據(jù)庫來做蝗肪,放開MySQL吧~

  • 太?快了袜爪,還不趕緊來試試

Reference

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市薛闪,隨后出現(xiàn)的幾起案子辛馆,更是在濱河造成了極大的恐慌,老刑警劉巖豁延,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昙篙,死亡現(xiàn)場離奇詭異,居然都是意外死亡诱咏,警方通過查閱死者的電腦和手機(jī)苔可,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袋狞,“玉大人硕蛹,你說我怎么就攤上這事∷恫ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵秧荆,是天一觀的道長倔毙。 經(jīng)常有香客問我,道長乙濒,這世上最難降的妖魔是什么陕赃? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮颁股,結(jié)果婚禮上么库,老公的妹妹穿的比我還像新娘。我一直安慰自己甘有,他們只是感情好诉儒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亏掀,像睡著了一般忱反。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滤愕,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天温算,我揣著相機(jī)與錄音,去河邊找鬼间影。 笑死注竿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巩割,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裙顽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喂分?” 一聲冷哼從身側(cè)響起锦庸,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒲祈,沒想到半個(gè)月后甘萧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梆掸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年扬卷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酸钦。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怪得,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卑硫,到底是詐尸還是另有隱情徒恋,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布欢伏,位于F島的核電站入挣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏硝拧。R本人自食惡果不足惜径筏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望障陶。 院中可真熱鬧滋恬,春花似錦、人聲如沸抱究。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳维。三九已至酿雪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侄刽,已是汗流浹背指黎。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留州丹,地道東北人醋安。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓杂彭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吓揪。 傳聞我的和親對象是個(gè)殘疾皇子亲怠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容