1.需求:
海量数据的存储和访问成为了系统设计的瓶颈问题。
2.实际环境:
对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。
3.解决方案:
通过 数据切分来提高网站性能,横向扩展数据层实现了分布式数据访问层(DDAL) 已经成为架构研发人员首选的方式。
水平切分数据库 可以降低单台机器的负载,同时最大限度的降低了了宕机造成的损失。
负载均衡策略 有效的降低了单台机器的访问负载,降低了宕机的可能性;
集群方案 解决了数据库宕机带来的单点数据库不能访问的问题;
读写分离策略 最大限度了提高了应用中读取(Read)数据的速度和并发量。
4.分布式数据访问层(DDAL) - JDBC层 和 ORM层
ORM - 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。如:Hibernate,ibatis
5.什么(what)是数据切分
通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由 或者 table路由规则找到需要查询的具体的DB或者table,以进行Query操作。
6.为什么(why)数据切分
●oracle 支持海量数据查询与存储,但价格昂贵。mysql免费,通过对mysql实现sharding(碎片)理念,来支持海量数据的查询与存储。
●只通过Replication机制来提高读写的吞吐和性能存在一定缺陷:它的有效很依赖于读操作的比例,Master往往会成为瓶颈所在,写操作需要顺序排队来执行,过载的话Master首先扛不住,Slaves的数据同步的延迟也可能比较大,而且会大大耗费CPU的计算能力,因为write操作在Master上执行以后还是需要在每台slave机器上都跑一次。
●Sharding可以轻松的将计算,存储,I/O并行分发到多台机器上,这样可以充分利用多台机器各种处理能力,同时可以避免单点失败,提供系统的可用性,进行很好的错误隔离。
综合以上因素,数据切分是很有必要的
7.怎么(how)数据切分
数据切分可以是物理 上的,对数据通过一系列的切分规则将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。
对数据通过一系列的切分规则,将数据分布到一个数据库的不同表中,比如将article分为article_001,article_002等子表,若干个子表水平拼合有组成了逻辑上一个完整的article表,这样做的目的其实也是很简单的。提高了数据操作的效率,尤其是Write操作的效率。
8.分布式数据方案提供功能
(1)提供分库规则和路由规则(RouteRule简称RR),将上面的说明中提到的三中切分规则直接内嵌入本系统,具体的嵌入方式在接下来的内容中进行详细的说明和论述;
(2)引入集群(Group)的概念,保证数据的高可用性;
(3)引入负载均衡策略(LoadBalancePolicy简称LB);
(4)引入集群节点可用性探测机制,对单点机器的可用性进行定时的侦测,以保证LB策略的正确实施,以确保系统的高度稳定性;
(5)引入读/写分离,提高数据的查询速度;
来自: http://www.jb51.net/article/23345.htm
Replication: http://www.cnblogs.com/hustcat/archive/2009/12/19/1627525.html