初入資料庫分庫分表

2021-08-19 23:15:39 字數 2069 閱讀 6193

參考:

1,   分區分表分庫

2,   切分方案

3,    分表的實現+集群

1,分割槽、分表、分庫

分區分表

分庫直接含義

將一張表的資料分成n多塊區域

將一張表分為n多小表

將儲存在乙個庫的資料分塊儲存在多個庫上

實現方式

(每張完整的表包含.myd資料檔案、.myi索引檔案、.frm表結構檔案)

user#p#p1.myd

user#p#p1.myi

user#p#p2.myd

user#p#p2.myi

user.frm

user.par

alluser.mrg

alluser.frm

user1.myd

user1.myi

user1.frm

user2.myd

user2.myi

user2.frm

(alluser總表,分為user1和user2)

在物理實現上分成多個伺服器,不同的分庫在不同的伺服器上

資料處理

將存放資料的檔案分成多個小塊;表還是一張表

資料存放在分表中,總表只是外殼

提高效能

1,突破磁碟i/o瓶頸(多核cpu同時對磁碟進行操作)

1,提高單錶併發(分成多個小表,鎖表物件縮小)

2,磁碟i/o效能提高(分成多個索引檔案,索引檔案縮小)

實現難度

建立分割槽表,對開發者透明;和平常建表沒區別

多種,並且需要修改**

解決的問題

提示查詢效率

單次查詢時間縮短

讀寫鎖影響的資料量變小

插入資料庫需要重新建立的索引的資料減少

2, 切分方案

垂直切分

水平切分

直接含義

將表按照功能模組,關係密切程度切分出來,部署到不同的庫上

當乙個表中的資料量過大時,可以按照某種規則,將表進行劃分,然後儲存到多個結構相同的表和不同庫上

簡要案例

例如建立定義資料庫workdb、商品資料庫paydb、使用者資料庫userdb、日誌資料庫logdb;分別用於儲存專案資料定義表、商品定義表、使用者資料表、日誌資料表等

例如:userdb中可以按照userid雜湊、性別、省份等進行劃分

優點拆分後業務清晰,拆分規則明確

系統之間整合或擴充套件容易

資料維護簡單

單錶資料減少,增加高併發的效能瓶頸

應用端改造較少,提高系統的穩定性和負載能力

缺點事務處理複雜

部分業務表無法join

分片事務一致性難以解決

資料多次擴充套件難度跟維護量大

跨庫join效能

切分原則

1) 能不切分盡量不要切分

2) 如果必須切分,選擇合適的切分規則,並提前規劃好

3) 資料切分盡量通過資料冗餘或分組,降低跨庫join的可能

4) 由於資料庫中介軟體對資料join實現的優劣難以把握,而且實現高效能難度極大,業務讀取盡量少使用多表join

3, 分表分庫帶來的問題

1) 事務問題

在執行分庫分表後,由於資料儲存到了不同的庫上,資料庫事務管理垂涎了困難。如果依賴資料庫本身的分布式事務管理功能去執行事務,將付出高昂的效能代價;如果由應用程式去協助控制,形成打的程式邏輯上的事務,會造成程式設計上的負擔

2) 跨庫跨表的join問題

在執行分庫分表後,難以避免會將原本邏輯關聯性很強的資料劃分到不同打的表、不同的庫上,這時表的關聯操作將會受到限制,無法join位於不同分庫的表,也無法join分表粒度不同的表,結果原本一次查詢就能完成的業務,可能需要多次查詢才能完成

3) 額外的資料管理負擔和資料運算壓力

額外的資料管理負擔,類似資料的定位問題、資料的增刪改查的重複執行問題,都可以通過應用程式解決,但必然引起額外的邏輯運算。例如:需要查詢前100名,在分表之前只需要乙個order by語句就能完成;分表後,需要n個order by語句,然後再對這些資料進行合併計算。

4,附錄

1) join

根據兩個或多個表中的列之間的關係,從這些表中查詢資料

資料庫分庫分表

1 基本思想之什麼是分庫分表?從字面上簡單理解,就是把原本儲存於乙個庫的資料分塊儲存到多個庫上,把原本儲存於乙個表的資料分塊儲存到多個表上。2 基本思想之為什麼要分庫分表?資料庫中的資料量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的資料量也會越來越大,相...

資料庫分庫 分表

分庫的優點是 實現簡單,庫與庫之間界限分明,便於維護,缺點是不利於頻繁跨庫操作,單錶資料量大的問題解決不了。分表的優點是 能解決分庫的不足點,但是缺點卻恰恰是分庫的優點,分表實現起來比較複雜,特別是分表規則的劃分,程式的編寫,以及後期的 資料庫拆分移植維護。實際應用中,一般網際網路企業的路線都是先分...

資料庫分庫分表

簡單了解資料庫分庫分表,以及資料庫的分片 什麼是分庫分表 原本儲存於乙個庫的資料分塊儲存到多個庫上,把原本儲存於乙個表的資料分塊儲存在到多個表上 為什麼分庫分表 當一張表的資料達到幾千萬時,你查詢一次所花的時間會變多,如果有聯合查詢的花,我想啃根會死在那。分表的目的就在於此,減少資料庫的負擔,縮短查...