數據庫的分區、分表、分庫、分片的簡介


分區的概念

        數據分區是一種物理數據庫的設計技術,它的目的是為了在特定的SQL操作中減少數據讀寫的總量以縮減響應時間。

分區並不是生成新的數據表,而是將表的數據均衡分攤到不同的硬盤,系統或是不同服務器存儲介子中,實際上還是一張表。另外,分區可以做到將表的數據均衡到不同的地方,提高數據檢索的效率,降低數據庫的頻繁IO壓力值,分區的優點如下:

1、相對於單個文件系統或是硬盤,分區可以存儲更多的數據;

2、數據管理比較方便,比如要清理或廢棄某年的數據,就可以直接刪除該日期的分區數據即可;

3、精准定位分區查詢數據,不需要全表掃描查詢,大大提高數據檢索效率;

4、可跨多個分區磁盤查詢,來提高查詢的吞吐量;

5、在涉及聚合函數查詢時,可以很容易進行數據的合並;

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

分區

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

1、水平分區

這種形式分區是對表的行進行分區,通過這樣的方式不同分組里面的物理列分割的數據集得以組合,從而進行個體分割(單分區)或集體分割(1個或多個分區)。所有在表中定義的列在每個數據集中都能找到,所以表的特性依然得以保持。

2、垂直分區

這種分區方式一般來說是通過對表的垂直划分來減少目標表的寬度,使某些特定的列被划分到特定的分區,每個分區都包含了其中的列所對應的行。
舉個簡單例子:一個包含了大text和BLOB列的表,這些text和BLOB列又不經常被訪問,這時候就要把這些不經常使用的text和BLOB了划分到另一個分區,在保證它們數據相關性的同時還能提高訪問速度。
在數據庫供應商開始在他們的數據庫引擎中建立分區(主要是水平分區)時,DBA和建模者必須設計好表的物理分區結構,不要保存冗余的數據(不同表中同時都包含父表中的數據)或相互聯結成一個邏輯父對象(通常是視圖)。這種做法會使水平分區的大部分功能失效,有時候也會對垂直分區產生影響。

 

分表

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

分庫

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

什么時候考慮使用分區?

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

    • sql經過優化

    • 數據量大

    • 表中的數據是分段的
    • 對數據的操作往往只涉及一部分數據,而不是所有的數據

    •  

      分區解決的問題

      主要可以提升查詢效率

    • 什么時候考慮分表?

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

      • sql經過優化

      • 數據量大
      • 當頻繁插入或者聯合查詢時,速度變慢

      分表解決的問題

      分表后,單表的並發能力提高了,磁盤I/O性能也提高了,寫操作效率提高了

      • 查詢一次的時間短了
      • 數據分布在不同的文件,磁盤I/O性能提高
      • 讀寫鎖影響的數據量變小
      • 插入數據庫需要重新建立索引的數據減少
        • 什么是分片


          簡單來說,就是指通過某種特定的條件,將我們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面,以達到分散單台設備負載的效果。 
          數據的切分(Sharding)根據其切分規則的類型,可以分為兩種切分模式。

          (1)一種是按照不同的表(或者Schema)來切分到不同的數據庫(主機)之上,這種切分可以稱之為數據的垂直(縱向)切分


          (2)另外一種則是根據表中的數據的邏輯關系,將同一個表中的數據按照某種條件拆分到多台數據庫(主機)上面,這種切分稱之為數據的水平(橫向)切分。


免責聲明!

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



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