Mysql Sharding概述

Mysql Sharding

传统解决数据库扩展性的方式是使用Scale up(纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力)方案;而当今随着互联网的发展,开源数据库领域普遍采用Scale out(横向扩展,通过加节点来实现伸缩,提升服务能力)方案提高扩展性;

分片按方向可以分为两类:
1、垂直分区:以表为单位,把不同的表分散到不同的数据库或主机上。特定是规则简单,实施方便,适合业务之间耦合度低的系统;
2、水平分区:以行为单位,将同一个表中的数据按照某种条件拆分到不同的数据库或主机上,特点是相对复杂,适合单表巨大的系统;

Sharding的应用场景:抽象处理的数据对象之间的关联数据很小,数据对象是Share nothing的。

Sharding不同于数据库分区,分片可以跨越DB,甚至跨越物理机器;常用时间、范围、面向服务等的数据划分方法。Sharding策略和业务结合的更为紧密。

数据拆分后引入的问题:
1、只能通过sharding key来读写操作;
2、集群扩容的时候重做数据的成本;

当前分片的方案:
1、使用Configure DB
2、使用Proxy
如:
Mysql Proxy、HSCALE、Spock Proxy、Atlas;
Amoeba:它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求;
Mysql Fabric:用来管理mysql服务,提供扩展性和容易的使用系统管理mysql分片和高可用部署;

3、使用Data Engine
如:
淘宝的TDDL

参考:
1、"开源数据库 Sharding 技术 (Share Nothing)": http://dbanotes.net/database/database_sharding-2.html
2、"MYSQL分库分表总结": http://wentao365.iteye.com/blog/1740874
3、"MySQL在大型网站的应用架构演变": http://www.csdn.net/article/2014-06-10/2820160



来自为知笔记(Wiz)


你可能感兴趣的:(Mysql Sharding概述)