摘自:http://www.open-china.net/blog/10953.html
1. 什么是數據切分
將存放在同一個數據庫中為同一個應用程序服務的數據分散存放到多個數據庫上面,以達到分散單臺設備負載的效果,并提高可用性。
2. 垂直切分
按照系統的模塊和功能切分。需要盡早作出切分
優點:
缺點:
- 模塊間的數據表會有關聯。
- 數據量大的表仍有性能問題。
- 表關聯無法在數據庫級別完成,要在程序中完成。
- 事務處理復雜。
- 不能過度切分(粒度適宜)
3. 水平切分
對大數據量的表按照某種規則進行散列拆分。根據社區模塊、用戶類型、特定字段類別等。
優點:
- 表關聯基本能夠在數據庫端全部完成。
- 不會存在數據過量問題
- 應用程序端整體改動小
- 事務處理簡單
- 擴展性限制小
缺點:
- 切分規則復雜,很難有一個全面的切分規則
- 后期數據的維護難度復雜,手工定位數據難
- 應用系統各模塊耦合度高,可能會對后面數據拆分造成困難
4. 聯合切分
通常先垂直切分,再對大表進行水平切分。
交替進行切分。
優點:
缺點:
兩種解決方案:
a )每個應用程序模塊中配置管理自己需要的一個或多個數據庫,直接訪問各個數據庫,在模塊內整合數據。
b) 通過中間代理層來統一管理數據源,后端數據庫集群對前端應用程序透明
實現類別:
a) 自行開發代理層
b) 使用數據庫 Proxy
如 MySQL 的 Proxy 。實現連接路由、 Query 分析、 Query 過濾和修改,負載均衡,以及基本的 HA 機制。
c) 其他開源中間件
6. 可能的問題
a. 分布式事務問題。
——使用小事務,提高應用程序的健壯性。
b. 跨節點 Join 問題
——使用數據庫 Federated ( DB Link 等)
——使用應用程序來處理(使用緩存等)
c. 跨節點合并排序分頁問題
——使用數據庫 Federated
——應用程序
當 b 和 c 同時出現時,比較難處理。
posted on 2011-06-23 16:14
zhangxl 閱讀(206)
評論(0) 編輯 收藏 所屬分類:
DB