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);\

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

 


免責聲明!

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



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