iT邦幫忙

2024 iThome 鐵人賽

DAY 16
1
AI/ ML & Data

資料決策時代:從零開始打造公司數據引擎與決策文化系列 第 16

OLTP 不是所有歷程都有存怎麼辦?Change Data Capture (CDC)

  • 分享至 

  • xImage
  •  

前言


我們前面聊過OLTP 到OLAP ,也講了資料流的設計,但在實際上運作的時候遇到了一個問題,讓我們有點頭痛,也就是系統資料表並沒有留存所有變更的紀錄,OLTP 的設計目的是為了讓系統功能的運作順暢,並不是針對分析的需求,所以很多時候有留存變化的資料,是幸運撿到而非必要,那我們要怎麼處理這個問題呢?

需要追蹤資料變化的原因


在進入解決方案討論前,我們先簡單聊聊有什麼原因需要去追蹤資料變化吧!

業務導向指標

在我們一開始推動資料決策,最常被追殺的就是業務KPI 相關的指標,像是訂閱中的人數,因為系統功能也持續迭代,導致數據產出的規則會有些變化,有時候會遇到今天訂閱中的人數 不等於 昨天訂閱中人數+昨天新訂閱人數-昨天退訂人數,就被業務追殺,你在追蹤一些原因的時候,會需要某些相關的紀錄去追查。

解答產品營運、用戶疑問

有些時候是用戶對於自己使用資料的疑問,可能因為網路問題、認知不同而有疑慮,打到客服來詢問,客服就會請RD提供一些使用紀錄,來協助回應用戶問題。

研究分析需求

當你的組織使用數據到一定的程度後,大家會好奇更多的事情,例如:我們想知道這個學生在每個年級的班級,以及他曾經收到的任務,我們可以追到任務資料,但是班級內有哪些學生可能只紀錄了當下,所以如果他退出了班級,或是老師使用會一直用同一個班級,每個學年把舊生移除,加入新生,就會影響到我們的分析需求。

Change Data Capture(CDC)的解決方案


方案一:定期做資料快照

如果你需要的資料,變更的頻率不高,定時做快照是一個最簡單的做法,你可以提高快照的頻率,從每週的快照增加到每天做快照,從每天的快照增加到每小時做快照。

o 優點

確認你要追蹤的資料後,就可以直接從分析端的 ELT 排程安排想紀錄的變化以及頻率。

x 缺點

這個做法會遇到一個問題:如果中間有一些小的變化,你就會有機率的遺失資料,而無力回天。


方案二:請RD增加紀錄

方案一的做法是從分析端的角度切入處理,但就是有可能遺漏資料,那針對這個問題,是不是能回到更上游,請RD做紀錄呢?當然可以!請後端工程師在資料庫上面做調整紀錄,是一個解決方案沒錯。

o 優點

對於你想追蹤的資料變化,不會再遺漏。

x 缺點

這樣的做法非常『客製化』,只能針對你特別要求的情境去追蹤變化,而有經驗的你也知道業務的變化很快速,可能你今天請工程師增加了『定價』的追蹤,下次行銷就跑來說要追蹤『折扣』的變化,最後 OLTP 的資料表混雜了不同的目的,混亂而難以管理。


方案三:分析log,抓RD API 呼叫的紀錄

當時遇到這問題時諮詢過一些前輩,某些前輩提供了這個方向,就是從 RD API 被呼叫的紀錄去清理出自己想要追蹤的資料變化。

o 優點

RD 不需要額外做什麼事,也能盡可能追蹤所有系統上發生過的事件

x 缺點
  1. 資料量很大
  2. 和資料庫的資料表邏輯不同,需要花費更多心力理解系統上的API 設計
  3. API 有時候會改變規格、改變 route 的命名,這些變化無法事前被追蹤,要求RD改 API 前要跟DA討論也有點不切實際

方案四:在 OLTP 設置 Trigger

和方案一類似的做法,除了請RD 額外用程式處理外,可以在 OLTP 裡面加上 Trigger ,在資料變更的時候觸發,把變更記錄下來,但我並不太推薦這做法。

o 優點

不用額外請RD做,可以開一個Read Replica,不影響系統的前提下,讓分析師在上面自行設置很多 Trigger。

x 缺點

Trigger 一開始用起來很開心,數量持續增加後會很難追蹤管理。


方案五:透過第三方工具,解析OLTP 的 DML log

透過第三方工具去解析OLTP的交易日誌,像是 MySQL 的 binlog,可以 realtime 紀錄資料庫的變化紀錄,持續匯出到 Data Lake,最後一個方案是我們最後有採用的方案。

技術說明
  1. OLTP 交易日誌: 不管透過程式或是人為操作,對資料進行操作我們通稱 Data Manipulation Language (DML),這些操作都會被資料庫的交易日誌記錄下來,在MySQL裡叫做 binlog (binary log),在MySQL 系統內也是透過binlog來做到很多高頻率CRUD操作,資料一致性的維護。
  2. 常見工具: Debezium (https://debezium.io/)

https://ithelp.ithome.com.tw/upload/images/20240930/20114297bVilvq94Yg.png

o 優點
  1. RD 一樣負擔較小,也盡可能追蹤所有資料上的變化
  2. 邏輯會遵照 OLTP 的資料表,需要額外理解的負擔稍微小一些
x 缺點
  1. 需要較高的資料庫權限,要先確保好安全性的管理
  2. 資料量很大
  3. 需要額外的技術工具來實現

小結


資料的變更追蹤是一定會遇到的問題,今天分享了一些營運的做法、跨部門合作的作法,還有技術上的作法,你可以依照組織的需求去選擇現階段的作法,也許你只是在剛起步階段,不需要追蹤所有的變化,也許只是研究分析需求,可以從其他紀錄裡去逼近重現,不需要事前都把變更記錄下來,又或是你已經走到較成熟的應用,事後追溯已經無法滿足業務分析的深度和變化,那就可以考慮導入 Debezium 這樣的技術工具,讓不同的角色協作都不需要花非常大的力氣,卻能讓組織可以有效地提升分析的深度和廣度,也更靈活彈性!


上一篇
資料使用者的接觸點:商業智慧 (BI)
下一篇
外傳:初期土炮小故事(強大的文字處理工具 Sed)
系列文
資料決策時代:從零開始打造公司數據引擎與決策文化30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言