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

分區的概念

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

分區並非生成新的數據表,而是將表的數據均衡分攤到不一樣的硬盤,系統或是不一樣服務器存儲介子中,實際上仍是一張表。另外,分區能夠作到將表的數據均衡到不一樣的地方,提升數據檢索的效率,下降數據庫的頻繁IO壓力值,分區的優勢以下:數據庫

一、相對於單個文件系統或是硬盤,分區能夠存儲更多的數據;服務器

二、數據管理比較方便,好比要清理或廢棄某年的數據,就能夠直接刪除該日期的分區數據便可;併發

三、精準定位分區查詢數據,不須要全表掃描查詢,大大提升數據檢索效率;函數

四、可跨多個分區磁盤查詢,來提升查詢的吞吐量;性能

五、在涉及聚合函數查詢時,能夠很容易進行數據的合併;優化

1、什麼是分區、分表、分庫

分區

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

一、水平分區

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

二、垂直分區

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

 

分表

就是把一張表按必定的規則分解成N個具備獨立存儲空間的實體表。系統讀寫時須要根據定義好的規則獲得對應的字代表,而後操做它。對象

分庫

一旦分表,一個庫中的表會愈來愈多索引

何時考慮使用分區?

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

  • sql通過優化

  • 數據量大

  • 表中的數據是分段的
  • 對數據的操做每每只涉及一部分數據,而不是全部的數據

  •  

    分區解決的問題

    主要能夠提高查詢效率

  • 何時考慮分表?

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

    • sql通過優化

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

    分表解決的問題

    分表後,單表的併發能力提升了,磁盤I/O性能也提升了,寫操做效率提升了

    • 查詢一次的時間短了
    • 數據分佈在不一樣的文件,磁盤I/O性能提升
    • 讀寫鎖影響的數據量變小
    • 插入數據庫須要從新創建索引的數據減小
      • 什麼是分片


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

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

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

相關文章
相關標籤/搜索