參考:
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 基本思想之為什麼要分庫分表?資料庫中的資料量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的資料量也會越來越大,相...
資料庫分庫 分表
分庫的優點是 實現簡單,庫與庫之間界限分明,便於維護,缺點是不利於頻繁跨庫操作,單錶資料量大的問題解決不了。分表的優點是 能解決分庫的不足點,但是缺點卻恰恰是分庫的優點,分表實現起來比較複雜,特別是分表規則的劃分,程式的編寫,以及後期的 資料庫拆分移植維護。實際應用中,一般網際網路企業的路線都是先分...
資料庫分庫分表
簡單了解資料庫分庫分表,以及資料庫的分片 什麼是分庫分表 原本儲存於乙個庫的資料分塊儲存到多個庫上,把原本儲存於乙個表的資料分塊儲存在到多個表上 為什麼分庫分表 當一張表的資料達到幾千萬時,你查詢一次所花的時間會變多,如果有聯合查詢的花,我想啃根會死在那。分表的目的就在於此,減少資料庫的負擔,縮短查...