【MySQL】利用binlog完成實時計算

天府雲創發表於2017-01-05

囉哩八嗦

由於業務的發展,一些實時統計的需求越來越多。有些東西通過記錄日誌然後實時分析日誌可以解決。但是對於有入庫還有自己記錄到日誌的這顯然是多此一舉。因為MySQL本身就有幫你記錄日誌, 而且記錄的日誌比自己應用程式的要準確的多(MySQL 需要開啟row模式)。

  1. 解析MySQL Binlog,並獲取我們想要的Event。
  2. 過濾出我們關心的表。
  3. 將獲得的相關資料實時的儲存到相關儲存中(一般使用redis存資料,之後再定時刷入MySQL)。

模擬步驟:

我們這邊模擬實時算訂銷售總額,和訂單量。

  1. 使用python-mysql-replication作為實時解析MySQL Binlog的日誌利器(推薦使用 阿里的 canal,這裡主要看公司的開發人員擅長什麼而決定)。
  2. 我們只關心 WriteRowsEvent (事件號 30)。
  3. 我們只關心 ord_order 表產生的 WriteRowsEvent 事件。
  4. 在原來統計的基礎上加上本次訂單的資訊並儲存到Redis(使用列印來代替儲存到Redis)。

老套的 SQL 程式碼

青澀的 Python 程式碼

執行程式碼

關鍵的不說, 氣死你 (^_^)

  1. MySQL 掛掉要如何處理。
  2. 如何實現程式的高可用。
  3. 如何記錄解析的 log file 和 log pos。
  4. 需不需要將解析的資料統一管理和儲存。

大家可以考慮一下要如何實現上面的事情。具體如何做我就不說了。

相關文章