Mysql數據過了500W如何優化?月薪從5K到25K

很多系統設計的時候沒有考慮到數據的暴漲,後期真爆了,抓瞎。。。本文僅提供一些優化思路。

都是個人實戰的總結

注:目前本人未接觸過幾十億數據量級處理,所以真要玩這個級別的,我的這些小把戲估計就沒用了,請自行斟酌。


1,優化你的查詢Sql

絕大部分性能問題是查詢效率低,那麼首先找出你的sql代碼,explain一下吧。

什麼?explain不知道是什麼??問度娘去!

另外,相關優化技巧很多,難度不大,自己百度去吧!

2,設計好索引

千百萬級數據用索引查詢跟不使用索引,效率差100倍以上。

當然索引的使用也有很多坑,以前碰到一個“高手”,把所有字段都索引了,我了個去(注意索引會引出

額外的性能問題的,比如插入會稍慢,這裡要有個權衡)

要說坑的話:比如同時使用多列的數據做查詢條件,如何設計索引?哪些情況索引失效?等等,百度去!

3,讀寫分離

就是用兩臺或者多臺主機做集群,一般是一寫多讀(一臺mysql只寫入,剩下的用來讀取,

寫入的數據要實時的從寫庫同步到讀庫)這個配置起來也比較簡單,

唯一要說的是代理插件的選擇,推薦360開源的atlas,用法很簡單,實際使用中也沒有

太多bug。

要說坑的話:運維要多練練,中間萬一出錯的情況下,導致數據不同步了咋辦?百度去!

另外,因為寫庫與讀庫之間同步難免有毫秒級誤差,所以某些數據剛寫入立即就要讀的情況下,

就不能從讀庫裡讀取了,咋辦?這次不用百度了,告訴你,atlas裡面有方案!自己找

4,分庫

一般來說,數據庫是安裝在一臺機器上,一個Mysql實例,我們就這麼死心眼的在這個Mysql上

創建一個數據庫,然後在裡面弄一堆表做業務。。。。然後出去吹牛我們是程序猿。。。

其實這種程序猿工資真心高不了。。。好吧,說的有點遠,直接說方案:

儘量分拆幾個庫,根據業務,比如訂單庫、用戶庫、日誌庫等等。。。

這樣什麼好處呢?

當以上1,2,3搞不定的時候,你把不同的庫分別安裝到不同的機器上啊,每個庫由一臺專門

的閃閃發光的Dell高配服務器來跑,多開心?

不過這樣的話也還是會有很多副作用,比如原來都在一個庫裡,做事務很簡單,現在弄了一大堆庫

事務不好辦,另外如果考慮到數據庫之外的因素,比如代碼跟著做了微服務,那事務可能要考慮

分佈式事務了,各種補償機制難免了。。。。

優點和缺點總是相輔相成!

5,水平拆分表

單表太大了,怎麼辦?可以把這個表的數據分成多個表,但是這裡有個原則,一定不能給編碼造成額外的

負擔,原來寫 select a from A,還得是這個!不能變!不然一切都沒意義了。好在Mysql本身就有這個機制。

你啥都不用管!

拆分時,有很多拆分原則,有根據hash的,有根據時間的。。。。看業務需要吧,比如說一個表,我們只關注

當年度數據,那麼根據時間拆分就行;如果使用索引查詢,那麼hash的不錯。

有利有弊:拆分完了,你備份個表看看時間消耗吧。。。。運維的同事累了,另外,拆分以後最大的弊端是

拆分原則與用法的匹配,如果沒有嚴格設計好,後面的用法跟拆分原則不一致,這絕對是個災難!耗時百倍甚至千倍

增長就是家常便飯

這一步步下來,千萬級,億級數據基本上差不多了!但是成本也是越來越高,用法也要越來越謹慎。

先這樣吧,有問題歡迎評論交流!

Mysql數據過了500W如何優化?月薪從5K到25K

相關推薦

推薦中...