【資料庫】分區分表分庫、讀寫分離__資料庫

來源:互聯網
上載者:User
【資料庫】分區分表分庫、讀寫分離 一、什麼是分區、分表、分庫 分區

就是把一張表的資料分成N個區塊,在邏輯上看最終只是一張表,但底層是由N個物理區塊組成的 分表

就是把一張表按一定的規則分解成N個具有隔離儲存區 (Isolated Storage)空間的實體表。系統讀寫時需要根據定義好的規則得到對應的字表明,然後操作它。 分庫

一旦分表,一個庫中的表會越來越多

將整個資料庫比作圖書館,一張表就是一本書。當要在一本書中尋找某項內容時,如果不分章節,尋找的效率將會下降。而同理,在資料庫中就是分區。 二、常用的單機資料庫的瓶頸 問題描述 單個表資料量越大,讀寫鎖,插入操作重建立立索引效率越低。 單個庫資料量太大(一個資料庫資料量到1T-2T就是極限) 單個資料庫伺服器壓力過大 讀寫速度遇到瓶頸(並發量幾百) 三、分區 什麼時候考慮使用分區。

一張表的查詢速度已經慢到影響使用的時候。

sql經過最佳化

資料量大 表中的資料是分段的

對資料的操作往往只涉及一部分資料,而不是所有的資料 分區解決的問題

主要可以提升查詢效率 分區的實現方式(簡單)

mysql5 開始支援資料分割函數

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);
四、分表 什麼時候考慮分表。

一張表的查詢速度已經慢到影響使用的時候。

sql經過最佳化 資料量大

當頻繁插入或者聯集查詢時,速度變慢 分表解決的問題

分表後,單表的並發能力提高了,磁碟I/O效能也提高了,寫操作效率提高了 查詢一次的時間短了 資料分布在不同的檔案,磁碟I/O效能提高 讀寫鎖影響的資料量變小 插入資料庫需要重建立立索引的資料減少 分表的實現方式(複雜)

需要業務系統配合遷移升級,工作量較大 分區和分表的區別與聯絡

分區和分表的目的都是減少資料庫的負擔,提高表的增刪改查效率。 分區只是一張表中的資料的儲存位置發生改變,分表是將一張表分成多張表。 當訪問量大,且表資料比較大時,兩種方式可以互相配合使用。

當訪問量不大,但表資料比較多時,可以只進行分區。 常見分區分表的規則策略(類似) Range(範圍) Hash(雜湊) 按照時間拆分 Hash之後按照分表個數模數 在認證庫中儲存資料庫配置,就是建立一個DB,這個DB單獨儲存user_id到DB的映射關係 五、分庫 什麼時候考慮使用分庫。 單台DB的儲存空間不夠 隨著查詢量的增加單台資料庫伺服器已經沒辦法支撐 分庫解決的問題

其主要目的是為突破單節點資料庫伺服器的 I/O 能力限制,解決資料庫擴充性問題。  垂直分割

將系統中不存在關聯關係或者需要join的表可以放在不同的資料庫不同的伺服器中。

按照業務垂直劃分。比如:可以按照業務分為資金、會員、訂單三個資料庫。

需要解決的問題:跨資料庫的事務、jion查詢等問題。 水平分割

例如,大部分的網站。資料都是和使用者有關,那麼可以根據使用者,將資料按照使用者水平分割。

按照規則劃分,一般水平分庫是在垂直分庫之後的。比如每天處理的訂單數量是海量的,可以按照一定的規則水平劃分。需要解決的問題:資料路由、組裝。 讀寫分離

對於時效性不高的資料,可以通過讀寫分離緩解資料庫壓力。需要解決的問題:在業務上區分哪些業務上是允許一定時間延遲的,以及資料同步問題。 思路

垂直分庫-->水平分庫-->讀寫分離 六、拆分之後面臨新的問題 問題 事務的支援,分庫分表,就變成了分散式交易 join時跨庫,跨表的問題 分庫分表,讀寫分離使用了分布式,分布式為了保證強一致性,必然帶來延遲,導致效能降低,系統的複雜度變高。 常用的解決方案:

對於不同的方式之間沒有嚴格的界限,特點不同,側重點不同。需要根據實際情況,結合每種方式的特點來進行處理。

選用第三方的資料庫中介軟體(Atlas,Mycat,TDDL,DRDS),同時業務系統需要配合資料存放區的升級。 七、資料存放區的演化 單庫單表

單庫單表是最常見的資料庫設計,例如,有一張使用者(user)表放在資料庫db中,所有的使用者都可以在db庫中的user表中查到。 單庫多表

隨著使用者數量的增加,user表的資料量會越來越大,當資料量達到一定程度的時候對user表的查詢會漸漸的變慢,從而影響整個DB的效能。如果使用mysql, 還有一個更嚴重的問題是,當需要添加一列的時候,mysql會鎖表,期間所有的讀寫操作只能等待。

可以通過某種方式將user進行水平的切分,產生兩個表結構完全一樣的user_0000,user_0001等表,user_0000 + user_0001 + …的資料剛好是一份完整的資料。 多庫多表

隨著資料量增加也許單台DB的儲存空間不夠,隨著查詢量的增加單台資料庫伺服器已經沒辦法支撐。這個時候可以再對資料庫進行水平分割。 八、總結

總的來說,優先考慮分區。當分區不能滿足需求時,開始考慮分表,合理的分表對效率的提升會優於分區。







聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.