天天看點

高并發簡單解決方案————redis隊列緩存+mysql 批量入庫(ThinkPhP)源碼位址:https://github.com/Tinywan/PHP_Experience

問題一:要求日志最好入庫;但是,直接入庫mysql确實扛不住,批量入庫沒有問題,done。【批量入庫和直接入庫性能差異】

問題二:批量入庫就需要有高并發的消息隊列,決定采用redis list 仿真實作,而且友善復原。

問題三:日志量畢竟大,儲存最近30條足矣,決定用php寫個離線統計和清理腳本。

考慮到log系統對資料庫的性能更多一些,穩定性和安全性沒有那麼高,<code>存儲引擎自然是隻支援select insert 沒有索引的archive</code>。如果确實有update需求,也可以采用myISAM。

考慮到log是實時記錄的所有資料,數量可能巨大,<code>主鍵采用bigint,自增即可</code>。

考慮到log系統<code>以寫為主,統計采用離線計算,字段均不要出現索引</code>,因為一方面可能會影響插入資料效率,另外讀時候會造成死鎖,影響寫資料。

第一種思路:

第二種思路(供參考,非架構) 

主要是部署,批量入庫腳本的調用和天級統計腳本,crontab例行運作。

總結:相對于其他複雜的方式處理高并發,這個解決方案簡單有效:通過redis緩存抗壓,mysql批量入庫解決資料庫瓶頸,離線計算解決統計資料,通過定期清理保證庫的大小。