優化時機
通常單表超過500萬左右,或明顯感受到性能降低時,須要優化mysql
優化方案
- 讀寫分離
- 使用緩存,如memcached或Redis
- 使用搜索引擎,如ElasticSearch或solr
- 分庫分表
詳細說明
- 讀寫分離很容易實現,建議在一開始作,沒必要等到性能降低時
- 發現性能降低時可作。好比有一張500萬大表,不可能緩存全表,只能緩存熱點數據,因此須要有一個監控熱點數據的功能
- 像緩存整個大表或者數據量很大能夠用搜索引擎,搜索引擎是文件存儲,適合高效查找,但不對插入修改、事務等支持。使用搜索引擎的話須要定時把mysql的數據同步給它,一樣的數據須要預留2倍磁盤,雖然搜索引擎可能能夠壓縮
- 分庫分表其實能夠在第二步作,但實現較複雜;分表後必然涉及要讀取多個表的問題,但對開發是透明的,在應用開發與數據庫中間須要研發一個平臺,自動hash索引到分表後的表。舉個例子,假設有一張600萬的表,能夠分爲兩張表,按時間分,時間點A之前的分一張,500萬;另外一張表100萬,後續的都插入到該表
現狀:數據庫如今用5.5版本,免費的,不購買服務,使用了上面的2和3,暫時沒遇到什麼難題。不須要dba,通常難題研發能夠搞定。sql
以上方案針對的是最大表是1000萬數據量的表。超過1000萬未經實踐。(感謝老郭提供技術支持)數據庫
ouyida3的blog
2015.4.8緩存