【數據庫】分區分表分庫、讀寫分離(一)


一、什么是分區、分表、分庫

分區

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

分表

就是把一張表按一定的規則分解成N個具有獨立存儲空間的實體表。系統讀寫時需要根據定義好的規則得到對應的字表明,然后操作它。

分庫

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

將整個數據庫比作圖書館,一張表就是一本書。當要在一本書中查找某項內容時,如果不分章節,查找的效率將會下降。而同理,在數據庫中就是分區

二、常用的單機數據庫的瓶頸

問題描述

  • 單個數據量越大,讀寫鎖,插入操作重新建立索引效率越低。
  • 單個數據量太大(一個數據庫數據量到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性能提高
  • 讀寫鎖影響的數據量變小
  • 插入數據庫需要重新建立索引的數據減少

分表的實現方式(復雜)

需要業務系統配合遷移升級,工作量較大

分區和分表的區別與聯系

  • 分區和分表的目的都是減少數據庫的負擔,提高表的增刪改查效率。

  • 分區只是一張表中的數據的存儲位置發生改變,分表是將一張表分成多張表。

  • 當訪問量大,且表數據比較大時,兩種方式可以互相配合使用。

  • 當訪問量不大,但表數據比較多時,可以只進行分區。

常見分區分表的規則策略(類似)

  1. Range(范圍)
  2. Hash(哈希)
  3. 按照時間拆分
  4. Hash之后按照分表個數取模
  5. 在認證庫中保存數據庫配置,就是建立一個DB,這個DB單獨保存user_id到DB的映射關系

12306的訂單是如何存儲的?

訂單


免責聲明!

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



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