摘自: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 阅读(197)
评论(0) 编辑 收藏 所属分类:
DB