數據越來越多,數據庫越來越慢該怎么辦


參考:

數據越來越多,數據庫越來越慢該怎么辦

方案一:讀寫分離,主從復制

方案二:歸檔歷史數據

當單表的數據太多,多到影響性能的時候,首選的方案是,歸檔歷史數據。就是把大量的歷史數據移到另外一張歷史數據表中,因為像訂單這類具有時間屬性的數據,都存在熱尾效應。大多數情況下訪問的都是最近的數據。因為新數據只占數據總量中很少的一部分,所以把舊數據和新數據分開存放,可以提高新數據的查詢效率。 這種方法能起到的效果好,且對系統的改動小,升級成本低

方案三:分庫分表

分庫主要是為了減少每個數據庫服務器的訪問量,分表主要是為了提高對單個表的數據的查詢速度。
並發大就分庫:可以拆分業務就垂直分庫,否則水平分庫
查詢慢就分表:有冗余字段就垂直分表,否則就水平分表

水平分表

字段的值為依據,按照一定策略(hash、range等),將一個中的數據拆分到多個中。把記錄分別存到不同的表中
場景:
系統絕對並發量並沒有上來,只是單表的數據量太多,影響了SQL效率,加重了CPU負擔,以至於成為瓶頸。例如表中分表記錄各個地區的數據或者不同時期的數據,特別是有些數據常用,有些不常用。
缺點:
1、給應用增加復雜度,通常查詢時需要多個表名,查詢所有數據都需UNION操作
2、在許多數據庫應用中,這種復雜度會超過它帶來的優點,查詢時會增加讀一個索引層的磁盤次數

垂直分表

字段為依據,按照字段的活躍性,將中字段拆到不同的(主表和擴展表)中。將同一條記錄前半段存到一個表中,后半段存到一個表中
場景:
系統絕對並發量並沒有上來,表中某些列常用,另外一些列不常用, 可以使數據行變小,可以把常用的列和不常用的列放在不同的表中,這樣一個數據頁能存儲更多數據,查詢時減少I/O次數
缺點:
管理冗余列,查詢所有數據需要join操作

水平分庫

字段為依據,按照一定策略(hash、range等),將一個中的數據拆分到多個
場景:系統絕對並發量上來了,分表難以根本上解決問題,並且還沒有明顯的業務歸屬來垂直分庫。

垂直分庫

為依據,按照業務歸屬不同,將不同的拆分到不同的
場景:系統絕對並發量上來了,並且可以抽象出單獨的業務模塊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM