數(shù)據(jù)源集市實(shí)時(shí)流轉(zhuǎn)MySQL狀態(tài)表的優(yōu)化方案
自打構(gòu)建數(shù)據(jù)源集市的技術(shù)棧以來,其實(shí)整個(gè)體系也在不斷的完善,在數(shù)據(jù)流轉(zhuǎn)的出口方向我們基本達(dá)成了一致,那就是在保證數(shù)據(jù)準(zhǔn)確性和穩(wěn)定性的基礎(chǔ)上盡可能按照實(shí)時(shí)的標(biāo)準(zhǔn)去落地?cái)?shù)據(jù)交付效率,所以數(shù)據(jù)源集市的目標(biāo)不是簡(jiǎn)單交付數(shù)據(jù)了事,而是需要對(duì)中下游的服務(wù)提供強(qiáng)有力的支持,甚至提供數(shù)據(jù)實(shí)時(shí)流轉(zhuǎn)的參考和依據(jù)。
目前一張表的數(shù)據(jù)如果要提供近實(shí)時(shí)的數(shù)據(jù)交付標(biāo)準(zhǔn),一般有以下的幾類策略:
1)基于自增ID的模式,根據(jù)數(shù)據(jù)庫的自增ID可以快速的定位數(shù)據(jù)的增量位置,基本實(shí)現(xiàn)數(shù)據(jù)的增量同步,當(dāng)然這種模式的局限性比較大,需要表中含有自增ID字段,對(duì)于數(shù)據(jù)庫的吞吐量也會(huì)有潛在瓶頸,同時(shí)不適用于基于中間件的集群環(huán)境數(shù)據(jù)實(shí)時(shí)流轉(zhuǎn)。
2)基于時(shí)間字段同步模式,時(shí)間字段的同步是表數(shù)據(jù)實(shí)現(xiàn)增量同步的經(jīng)典方法,也是和業(yè)務(wù)緊密結(jié)合,但是帶來的潛在風(fēng)險(xiǎn)是可能相關(guān)的時(shí)間字段有多個(gè),同步定制化程度高,另外單一使用增量模式其實(shí)難以完全定位數(shù)據(jù),還是需要另外一個(gè)維度的支持,比如自增ID等。
如果一張狀態(tài)表要實(shí)現(xiàn)實(shí)時(shí)流轉(zhuǎn),實(shí)時(shí)交付,那么面臨的問題其實(shí)是比較復(fù)雜的。
通常這類狀態(tài)表數(shù)據(jù)量巨大,但很可能沒有基于自增ID的字段(通常是基于業(yè)務(wù)的ID字段),而基于時(shí)間字段基本可行,但是難以快速定位唯一的記錄內(nèi)容,最緊要的一點(diǎn)是我們通過唯一性定位得到的是變化后的值,變化前的值已經(jīng)被完全覆蓋,所以對(duì)于變化量的定義是比較復(fù)雜的。
目前來看,碰到的一些瓶頸問題主要有:
中下游的數(shù)據(jù)服務(wù)提取數(shù)據(jù)時(shí),盡管數(shù)據(jù)源是實(shí)時(shí)更新的,但是后續(xù)的數(shù)據(jù)服務(wù)是難以定位增量數(shù)據(jù)的。通過上述的多個(gè)維度都不合適,通常做數(shù)據(jù)檢查的時(shí)候只能無奈使用select count(*) from xxx這種校驗(yàn)?zāi)J剑鉀Q這個(gè)問題最直接的方案就是程序段提供相應(yīng)的流水日志,如果開發(fā)能力較強(qiáng)這個(gè)事情比較好落地,而如果業(yè)務(wù)風(fēng)險(xiǎn)高,這個(gè)事情要解決就比較麻煩了。
如下是一種折中的解決方案,在不需要程序修改代碼的前提下,能夠?qū)崟r(shí)提取數(shù)據(jù)變化并實(shí)時(shí)更新同步數(shù)據(jù)狀態(tài),大體的設(shè)計(jì)思路是基于實(shí)時(shí)日志服務(wù),在這里是Maxwell.
我來簡(jiǎn)單解釋下,如果一張狀態(tài)表的數(shù)據(jù)要實(shí)時(shí)交付,那么數(shù)據(jù)源集市中我們保證狀態(tài)表的數(shù)據(jù)實(shí)時(shí)復(fù)制是沒有問題的,技術(shù)上完全能夠做到,無論是基于庫級(jí)別還是過濾到表級(jí)別,都是可操作的。
而基于Maxwell的實(shí)時(shí)日志提取,我們可以從狀態(tài)表中解析出表中數(shù)據(jù)實(shí)時(shí)變化的內(nèi)容,我們可以間接實(shí)現(xiàn)一個(gè)賬單表,對(duì)于中下游來說,就是間接把狀態(tài)表轉(zhuǎn)換為流水日志表,從而間接實(shí)現(xiàn)的實(shí)時(shí)流轉(zhuǎn)和交付。
本文轉(zhuǎn)載自微信公眾號(hào)「楊建榮的學(xué)習(xí)筆記」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系楊建榮的學(xué)習(xí)筆記公眾號(hào)。