1. 程式人生 > >Mysql大資料優化方案

Mysql大資料優化方案

隨著業務規模的不斷擴大,需要選擇合適的方案去應對資料規模的增長,以應對逐漸增長的訪問壓力和資料量。

關於資料庫的擴充套件主要包括:業務拆分、主從複製,資料庫分庫與分表。

(1)業務拆分

假設:Mysql一個數據庫中有三張表,shop表,goods表,history表。

隨著業務逐漸複雜,資料逐漸增多。資料庫的執行效率越來越低。

此時可以將三張表放到三個不同主機上人不同資料庫中,這樣對一個數據庫人壓力就分成了三份,系統的吞吐量就會大大提高。

(2)主從複製

MySQL的Replication是一個多MySQL資料庫做主從同步的方案,特點是非同步複製,廣泛用在各種對MySQL有更高效能、更高可靠性要求的場合。

MySQL Replication 就是從伺服器拉取主伺服器上的 二進位制日誌檔案,然後再將日誌檔案解析成相應的SQL語句在從伺服器上重新執行一遍主伺服器的操作,通過這種方式來保證資料的一致性。

特點:

  • 主從間的資料庫不是實時同步,就算網路連線正常,也存在瞬間主從資料不一致的情況。

  • 如果主從的網路斷開,則從庫會在網路恢復正常後,批量進行同步。

  • 如果對從庫進行修改資料,那麼如果此時從庫正在在執行主庫的bin-log時,則會出現錯誤而停止同步,所以一般情況下,我們要非常小心的修改從庫上的資料。

  • 一個衍生的配置是雙主、互為主從配置,只要雙方的修改不衝突,則可以工作良好。

  • 如果需要多主庫的話,可以用環形配置,這樣任意一個節點的修改都可以同步到所有節點。

(3)資料庫分表、分割槽、分庫

分表實現策略:分表就是將一個表分成多個表,比如有一個使用者表,因為使用者無限制地增長嚴重影響效能。假設有1000萬條資料,可以每10萬條資料建一個表,根據ID判斷屬於哪個表。

分割槽實現策略:分割槽是把存放資料的檔案分成許多小塊,分割槽後人表還是一張表,可以突破磁碟的讀寫能力。

分割槽的適用場景:

1.一張表的查詢速度很慢

2.表中的資料可以分段

3.每次只是操作資料人一小部分,而不是全部

CREATE TABLE sales (
    id INT AUTO_INCREMENT,
    amount DOUBLE NOT NULL,
    order_day DATETIME NOT NULL,
    PRIMARY KEY(id, order_day)
) ENGINE=Innodb 
PARTITION BY RANGE(YEAR(order_day)) (
    PARTITION p_2010 VALUES LESS THAN (2010),
    PARTITION p_2011 VALUES LESS THAN (2011),
    PARTITION p_2012 VALUES LESS THAN (2012),
PARTITION p_catchall VALUES LESS THAN MAXVALUE);

分庫實現策略:對資料庫進行拆分,從而提高資料庫的寫入能力。

簡單的分庫就是把表分別儲存在不同人資料庫中