寫入mysql數據庫的數據量很大?
數據庫的寫入量高,是一個很常見的技術瓶頸,場景如央視春晚發紅包,千萬級別的寫入qps。而解決方案有很多,筆者分享一些目前業界最成熟有效的措施:
一、分表將數據分攤到多個表上,流量也將分攤到多個表上,可以提高數據庫讀寫的吞吐量。
如將一個表從1個,分解為256個。
二、緩存我們可以將數據庫中的熱點數據,寫入緩存中,將讀請求的流量優先走緩存,這樣可以分攤數據庫的讀壓力。
如使用Redis來存儲熱點數據,而使用Canal將MySQL中的熱點數據同步到Redis中。
三、異步我們知道,MySQL數據庫日志系統,有一個持久化日志redolog,原理是數據庫為了減少磁盤IO的次數,將要寫入數據庫的數據先在內存中暫存,后續再批量寫入磁盤中,這邊是異步的一種案例。
我們的系統設計,也可以參考這個模式,將要寫入數據庫中的操作通過發送mq暫存到Kafka中,再通過消費mq的方式,將數據寫入數據庫,從而避免流量過大,一下子將數據庫打死了。
四、分庫經過壓測得知,一個16核32G內存500G硬盤的MySQL,它的寫入極限是5600/s,這是硬件上的極限,從軟件層面已無法提升。
如使用MyCat就是構建數據庫集群,以增加更多的數據庫實例,從硬件層面上解決問題。
五、其他以上是互聯網大廠最常用的優化方案,只要你肯花心思,總有優化的空間。