資料庫分片技術

2021-09-01 09:51:56 字數 1761 閱讀 8718

假如您有乙個應用程式,隨著業務越來越有起色,系統所牽涉到的資料量也就越來越大,此時您要涉及到對系統進行伸縮(scale)的問題了。

一種典型的擴充套件方法叫做「向上伸縮(scale up)」,它的意思是通過使用更好的硬體來提高系統的效能引數。而另一種方法則叫做「向外伸縮(scale out)」,它是指通過增加額外的硬體(如伺服器

)來達到相同的效果。

從「硬體成本」還是「系統極限」的角度來說,「向外伸縮」一般都會優於「向上伸縮」,因此大部分上規模的系統都會在一定程度上考慮「向外」的方式。由於許多系統的瓶頸都處在資料儲存上,因此一種叫做「資料分片(database sharding)」的資料架構方式應運而生,本文便會討論這種資料架構方式的一種比較典型的實現方式。

簡介資料分片,自然便是將整體資料分攤在多個儲存裝置(下文統稱為「資料分割槽」或「分割槽」)上,這樣每個儲存裝置的資料量相對就會小很多,以此滿足系統的效能需求。值得注意的是,系統分片的策略有很多,例如常見的有以下幾種:

根據id特徵:例如對記錄的id取模,得到的結果是幾,那麼這條記錄就放在編號為幾的資料分割槽上。

根據時間範圍:例如前100萬個使用者資料在第1個分割槽中,第二個100萬使用者資料放在第2個分割槽中。

基於檢索表:根據id先去乙個表內找到它所在的分割槽,然後再去目標分割槽進行查詢。

在這些資料分片策略之中沒有哪個有絕對的優勢,選擇哪種策略完全是根據系統的業務或是資料特徵來確定的。值得強調的是:資料分片不是銀彈,它對系統的效能和伸縮性(scalability)帶來一定好處的同時,也會對系統開發帶來許多複雜度。

例如,有兩條記錄分別處在不同的伺服器上,那麼如果有乙個業務是為它們建立乙個「關聯」,那麼很可能表示「關聯」的記錄就必須在兩個分區內各放一條。另外,如果您重視資料的完整性,那麼跨資料分割槽的事務又立即變成了效能殺手。最後,如果有一些需要進行全域性查詢的業務,光有資料分片策略也很難對系統效能帶來什麼優勢。

資料分片

在oracle 中,全域性關係是乙個檢視,而資料分片是通過關係資料的基本運算實現的,這一點在全域性檢視的定義中體現。

資料分片主要有兩種方式:

(1) 水平分片

按一定條件將全域性關係的所有元組劃分成若干個相交的子集,每個子集為關係的乙個片段。

例如,乙個公司下屬兩個子公司,每個子公司建有自己的資料庫,並存放本公司的職員資訊。在總公司的資料庫上建立乙個全域性關係,可以看到全公司的全體職員資訊。建立全域性關係emp(檢視)的語句如下:

crearte view emp as

(select* from emp1@ d1)

union

(select *from emp2@ d2);

這樣,全域性關係emp中的元組實際上是分布在另外兩個不同的資料庫上。

(2) 垂直分片

把全域性關係的屬性集分成若干子集,形成幾個垂直片段。

例如,全域性關係emp中,有關職工的人事資訊在資料庫d1上,而職工的業務資訊在資料庫d2上。當然,有些屬性(如職工號這樣的關鍵字屬性)應出現在每個垂直片中。建立全域性關係emp(檢視)的語句如下:

creatte view emp as

selecrt emp1.eno, emp1.ename, emp2.sal,…

from emp1@d1, emp2@d2

where emp1.eno=emp2.eno;

全域性關係實際上是將分布在不同資料庫中的乙個職工記錄的各部分重新連線起來,然後投影出所要的屬性。

實際上,我們可以通過檢視的定義,實現全域性關係資料的多種分布要求,全域性關係遮蔽了資料的物理分布,提供了資料分布的又乙個透明性。

資料庫分片技術

垂直切?存放在同一目錄 資料中的的資料分散存放到多個資料庫 1.一種是按照不同的表 或者schema 來切分到不同的資料庫 主機 之上,這種切可以稱之為資料的垂直 縱向 切分 另外一種則是根據表中的資料的邏輯關係,將同乙個表中的資料按照某種條件拆分到多台資料庫 主機 上面,這種切分稱之為資料的水平 ...

MySQL資料庫分片技術調研

將這段時間了解的mysql分片技術和主從複製只是整理清楚畫了思維導圖記錄一下,希望能給需要的人一些幫助 1 海量資料的操作超出單錶 單庫的最大限制 2 訪問壓力超出資料庫系統限制,效能下降 3 資料庫複製 容災等問題 一 採用資料分表分庫提高資料庫的效能限制 1 可選sharding策略 2 sha...

資料庫分片

隨著網際網路的發展,資料的量級也是指數的增長,從 gb 到tb到 pb。對資料的各種操作也是愈加的困難,傳統的關係性資料庫已經無法滿足快速查詢與插入資料的需求。這個時候 nosql 的出現暫時解決了這一危機。它通過降低資料的安全性,減少對事務的支援,減少對複雜查詢的支援,來獲取效能上的提公升。但是,...