室內(nèi)設(shè)計培訓(xùn)教程seo實戰(zhàn)培訓(xùn)中心
背景
我們的業(yè)務(wù)數(shù)據(jù)一般來說都是放在Mysql中的,而我們要分析的數(shù)據(jù)一般都存放在clickhouse中,所以如何把數(shù)據(jù)從mysql同步到ck,就變成了一個必須的步驟,本文簡單記錄下幾種同步的方式
mysql數(shù)據(jù)同步到clickhouse
方式一:
在clickhouse中獨立創(chuàng)建一個ck的表,對應(yīng)著mysql的一張表數(shù)據(jù),然后使用定時任務(wù)比如每天或者每小時從mysql中查詢一天的增量或者一小時的增量數(shù)據(jù)插入到ck中,這種方式比較容易理解和實現(xiàn)
方式二:
使用canel+kafka同步二進制binlog的方式同步數(shù)據(jù),具體來說是把每條db的變更轉(zhuǎn)換成kafka的記錄,然后消費kafka消息把數(shù)據(jù)插入到ck中
方式三:
使用ck提供的mysql引擎表
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],...
) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause'])
SETTINGS[ connection_pool_size=16, ][ connection_max_tries=3, ][ connection_wait_timeout=5, ][ connection_auto_close=true, ][ connect_timeout=10, ][ read_write_timeout=300 ]
;
方式四:
使用ck提供的當(dāng)前還處于實驗階段的MaterializedMySQL引擎
CREATE DATABASE mysql ENGINE = MaterializedMySQL('localhost:3306', 'db', 'user', '***');
方式五:
通過把mysql表導(dǎo)出成Tsv文件,然后通過clickhouse-client工具把TSV文件的數(shù)據(jù)導(dǎo)入到ck的表中.
參考文獻:
https://clickhouse.com/docs/zh/engines/database-engines/materialized-mysql