我正在運行一個與金融相關的門戶網站,其中涉及 MySQL 中的數百萬次借記貸記交易,在特定限制下(即 300 萬行)獲取特定用戶的余額變得很慢。
現在我正在考慮為每個用戶創建單獨的 MySQL 容器,并只記錄每個容器中的相關用戶事務,我相信計算任何用戶的余額都會很快。我有大約 2 萬用戶,我想知道為每個用戶創建單獨的 MySQL 容器是否可行?還是我應該采用任何其他方法。謝謝
uj5u.com熱心網友回復:
我不建議每個用戶使用單獨的 MySQL 實體。
在過去的作業中,我在 docker 容器中操作 MySQL。即使在非常強大的服務器上,我們也只能在每臺服務器上運行大約 30 個 MySQL 實體,然后才會耗盡資源。如果每個實體大部分時間都處于空閑狀態,可能還會增加一些。無論如何,您將需要數百或數千臺服務器來執行您所描述的操作,并且隨著用戶的增加,您需要不斷添加服務器。
您是否考慮過如果每個用戶的資料都在不同的 MySQL 實體中,您將如何制作報告?可以對任何單個用戶進行報告,但您可能還需要有關所有用戶的匯總財務活動的報告。您不能運行跨 MySQL 實體的單個查詢,因此您必須對每個實體執行一個查詢并撰寫自定義代碼來組合結果。
當您需要進行備份、升級、架構更改、錯誤監控等時,您還將有更多的作業。這些操作任務中的每一項都將乘以實體的數量。
您沒有描述您的資料是如何組織的或您運行的任何特定查詢,但是有一些技術可以優化不需要將資料拆分為多個 MySQL 實體的查詢。索引、快取、磁區或升級到更強大的服務器等技術。在拆分資料之前,您應該了解這些優化技術,因為您最終會得到成千上萬個優化不佳的小實體。
uj5u.com熱心網友回復:
我有大約 20000 個用戶,我想知道為每個用戶創建單獨的 MySQL 容器是否可行
不,絕對不是。雖然 docker 容器相對輕量級,但其中 20k 已經很多了,這將需要大量額外資源(記憶體、磁盤、CPU)。
在某個限制(即 300 萬行)中獲取特定用戶的余額變得很慢。
您可以嘗試做幾件事。
- 首先嘗試優化資料庫/查詢(可以結合垂直擴展 - 通過為資料庫使用更強大的服務器)
- 啟用復制(如果尚未)并使用輔助實體進行讀取查詢
- 使用磁區和/或分片
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/519769.html
