Mysql

我需要 MySQL 組複製還是單台伺服器就足以進行點擊計數等?

  • January 4, 2018

我計劃創建一個系統來跟踪訪問者對數據庫的點擊次數。我預計每天約有 100 萬次插入到數據庫中。

在後端,我將有一個分析系統,它將分析在幾天/幾週/幾個月/幾年內收集的所有數據。

我的問題是:擁有 2 個不同的 MySQL 伺服器 + 1 個 Web 伺服器是一種實用的方法嗎?MySQL 伺服器 A 會將點擊插入到它的數據庫中,它會通過組複製連接到 MySQL 伺服器 B,所以每當我在 MySQL 伺服器 B 上創建報告等時,它不會大量載入伺服器 A。

然後,這 2 個數據庫伺服器將連接到 Web 伺服器,該伺服器將處理所有點擊請求並同時顯示後端報告。

這是一個實用的解決方案,還是擁有一台更大的伺服器來處理所有 MySQL 數據更好?或者有多個相互負載平衡的 MySQL 伺服器?或許還有什麼?

1M INSERTs/天 = 12/秒。這不是很重——對於 Web 伺服器或 MySQL。

雖然您提出了在從站上生成“報告”的論點,但有一些方法可以減輕負載。

但是創建和維護匯總表,報告變得足夠輕而不必擔心。匯總表將按天加上一些其他維度作為關鍵字,並具有COUNT(*)SUM(...)等。每日小計(通常)足以用於每週/每月/每年匯總。

為了計算點擊次數——假設你只是想計算它們——我建議有一個單獨的表格,除了id你正在計算的內容和一個INT UNSIGNED(最多 40 億)之外什麼都沒有。通過將其與與 相關的其他內容分開id,干擾會少得多。

可能不需要多個 Web 伺服器,但通過添加另一個 Web 伺服器進行擴展相對容易且輕鬆。但是,請務必將 Web 伺服器中的執行緒數保持在 30 個以內。

每個 Web 伺服器可以與至少一個 MySQL 伺服器通信。我(還)不認為需要多個 MySQL 伺服器。通過沒有多個 MySQL,可以避免這種複雜性。

使用 Replication(Group Repl 或其他)還有其他原因——備份、HA 等;我只是說你的功能分離是不夠的。

另一個注意事項…如果點擊計數是通過忽略響應的 HTTP 請求完成的,那麼沒有真正的理由擔心它們是否排隊和延遲。會有超過 12 次/秒的爆發。我的經驗法則是持續速度超過 100/秒。有理由額外考慮。

引用自:https://dba.stackexchange.com/questions/194556