記一次資料同步需求的改進(一)

jeanron100發表於2015-10-28
最近有個需求,開發的同事找到我,提出了下面的需求
由於平臺業務發展需要,需要將test_account_log 和test_protect_log 表前一天的增量同步到新增的兩張表上
對於這個需求看起來還是蠻簡單的。自己結合這兩張報的設計方式發現沒那麼簡單。
首先對這兩個表做了分庫分表,從圖中可以看到,其實分成了4個庫,16個使用者,每個使用者按照業務邏輯儲存了一部分的明細資料,從目前的資料量來看,累計資料還不算大。

如果按照開發的需求,需要抽取保留前一天的增量資料,這個需求還是需要好好斟酌的。
因為是評估,還是要做一些工作的,不能憑空來想決定可不可行,
首先來抓取了
我抓取了部分使用者下表中資料的增長情況,這個過程還是在備庫完成,基本每天的資料變化頻率不高,下面是test_account_log的資料情況,test_protect_log的頻率要更低一些。
2015-10-05       7487
2015-10-06       8140
2015-10-07       8436
2015-10-08       7763
2015-10-09      13933
2015-10-10      15391
2015-10-11       9357
2015-10-12       7680
2015-10-13       5575
2015-10-14       5427
2015-10-15       5697
2015-10-16       6095
2015-10-17       7370
2015-10-18       6869
2015-10-19       5634
2015-10-20       5562
2015-10-21       4900
2015-10-22        694
可以看出每天的資料變更其實不大,10多個累計起來就幾萬,還是比較小的,從增量資料的情況來看,還是很容易能夠實現的。
如果每天的都在百萬,千萬,那就需要進一步評估確認了。
於是我提了下面幾個問題,把這些問題的責任人都指定,誰來負責確認哪些都標明,因為這個還是需要協同來完成。
1.提供增量抽取sql語句   --開發同學
請從業務上評估,提供增量抽取sql語句。
    取昨天的增量:
後續得到開發同學的反饋,發現這個operation_date欄位上沒有相關的索引,也就意味著這種抽取還是會有潛在的風險。
select * from test_account_log where operation_date>=to_date(‘2015-10-25’,’yyyy-mm-dd’) and operation_date=to_date(‘2015-10-25’,’yyyy-mm-dd’) and operation_date<to_date(‘2015-10-26’,’yyyy-mm-dd’)

2. 目前test_account_log,test_protect_log沒有operation_date相關的索引,需要建立額外的索引  --開發同學,DBA
因為不存在相關的索引,所以還是需要考慮能夠新增索引,如果能夠新增,索引列是為多個相關欄位還是單單為operation_date
開發同學的反饋,建立索引的語句為:
create index account_log_date on test_account_log (operation_date)
create index protect_log_date on test_protect_log (operation_date)
對這個索引的建立,我需要從歷史的sql執行情況來分析是否合適,是否會有潛在的原因導致執行計劃的變更。
3.請確認是否operation_date為變化欄位,如果這個值發生變化,增量抽取的資料就會有問題。--開發同學
比如 log_id          uid     operation_date
         1              100    2015-10-21 xxxx
如果發生變化
          1             100    2015-10-23 xxxx
在增量抽取的資料中就會存在重複資料(log_id,uid.xxxx)
這一點看似會忽略,但是卻是至關重要,因為僅僅根據開發的需求來完成,如果不考慮這種資料變更的影響,那後面就會有非常多的隱患。
得到開發同學的反饋為:
該表的資料都不會變化,只會增加。因為這個表是一個歷史資料表,所以裡面的資料是不會修改的。

4.彙總後的表放哪兒確認完再討論,技術上是可以支援的。不過基於安全和後期資料量的情況,還是需要找領導審批   --找主管審批確認
所以一個簡單的問題仔細分析之後,還是在於其範圍之內,可以很容易就實現的。後續的就是實施的過程了,當然這個過程會有很多的轉折點,可能會對這個需求產生更大的影響,甚至推翻需求重來,後續再來解讀。
</to_date(‘2015-10-26’,’yyyy-mm-dd’)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1817817/,如需轉載,請註明出處,否則將追究法律責任。

相關文章