大型分布式数据库集群的研究

1、为何要设计成分布式数据库,数据为何要分区?html

当数据量很大的时候,即便服务器在没有任何压力的状况下,某些复杂的查询操做都会很是缓慢,影响了最终用户的体验。数据库

在大数据量下对数据库的装载与导出,备份与恢复,结构的调整,索引的调整等都会让数据库中止服务或者高负荷运转很长时间,影响了数据库的可用性和可管理性。缓存

这个时候靠提高服务器的硬件配置是起不到做用的,只有靠分区把数据分红更小的部分才能提升数据库的可用性和可管理性。服务器

经过分区把各部分数据放到不一样的机器中,每次查询能够由多个机器上的CPU,I/O来共同负载,经过各节点并行处理数据来提升性能。架构

分区的方法负载均衡

Moebius for SQL Server支持两种分区方式:Hash分区和线性分区。分布式

Hash分区性能

Hash分区是将表按某一字段的值均匀地分布到若干个指定的分区中。测试

优势:每一个分区内分配的数据比较平均,承载的压力也就比较平均,机器可以比较充分的利用。大数据

缺点:不容易扩展,若是扩展新的分区会涉及到数据的从新分配,所以上在设计的时候要提早的规划好。

Moebius for SQL Server支持把多个分区数据放在一个机器上而后再根据压力逐个的拆到新机器中去,这样既能够保证了分区的规划又不浪费机器,实现了线性扩展;

线性分区

线性分区也称范围分区,将表按某一字段的取值范围进行分区,好比按照时间每月的数据在一个分区中。

优势:扩展性能比较好,由于数据的增加是有必定规律的。

缺点:每一个分区内的数据或者压力不是很平均,大部分的业务可能都是越老的数据被访问的频率越低,这样老的分区的压力就比新分区承载的压力低,从而使机器的利用率不高。

Moebius for SQL Server支持把多个分区数据放在一个机器上,因此能够经过新老分区的交替使用来提升机器的利用率。

当前SQl Server上出现的一些将数据库拆分的技术

分区表

     SQL Server 2005引入的分区表技术,让用户可以把数据分散存放到不一样的物理磁盘中,提升这些磁盘的并行处理能力,达到优化查询性能的目的。可是分区表只能把数据分 散到同一机器的不一样磁盘中,也就是仍是依赖于一个机器,不能从根本上解决问题。理想的解决办法是把数据分散到不一样的机器中,经过多个机器上的 CPU,I/O的并行处理来提升性能。

分布式分区视图

     分布式分区视图容许用户将大型表中的数据分散到不一样机器的数据库上,用户不须要知道直接访问哪一个基础表而是经过视图访问数据,在开发上有必定的透明性。但 是并无简化分区数据集的管理、设计。用户使用分区视图时,必须单首创建、管理每一个基础表(在其中定义视图的表),并且必须单独为每一个表管理数据完整性约 束,管理工做变得很是复杂。并且还有一些限制,好比不能使用自增列,不能有大数据对象。另外通过实际测试,对于符合分区规则的查询性能还能够,对于全局查 询并不像咱们预期的那样,是并行计算,有时还不如不分区的响应快。

库表散列

     一些大公司也在本身开发基于库表散列的数据库架构,好比My Space通过数次数据库升级,最终采用按照用户进行的库表散列,微软为MSN/Hotmail和纳斯达克开发的数据依赖型路由(Data-Dependent Routing,DDR)。可是这些都是基于本身业务逻辑进行的,没有一个通用的实现。客户在实际应用中要投入很大的研发成本,面临很大的风险。

Moebius for SQL Server分布式网格集群

Moebius for SQL Server 在结构上分为数据层数据库和访问层数据库两部分。

从图中能够看出,下面的像网格同样的机器叫数据层,数据层中每一个机器上存储着数据全集的一个分区,每一横行组成一个数据全集,每一纵列是某个分区的多份相同的数据。目的是达到查询时负载均衡的效果,同时也是高可用性的保障:某个列的机器出现问题后其余的机器会负载访问。

大型分布式数据库集群的研究 - dreamman - dreamman

这 样一个查询要查询几个机器才能获得结果,一个插入语句可能要同时影响几个机器上的数据。为了避免让这样一个复杂的结构暴露给应用程序和开发人员,在数据层上 面又放了一层机器叫中间层也叫访问层,访问层机器负责维护各个机器关系的配置信息,处理SQL语句,根据SQL语句的类型和条件来决定由哪些机器来提供服 务,缓存数据等工做。

 

 

Moebius for SQL Server分布式网格集群工做原理

如下从DML语法的角度介绍一下中间件的工做方式

INSERT

当中间层接到一个INSERT语句后,经过分析SQL语句获得要插入的表, 这个表的分区列,再根据分区列的值决定应该这条数据插入到第几个分区的数据中去,再从配置信息中获得这个分区列中有多少可用的机器,而后插入数据。

SELECT

当 中间层接受到一个查询语句后,首先分析该语句要查找的表,根据要查找的表和语句的WHERE条件计算出要从某一个分区中取数据仍是几个分区列中去取数据, 取完数据后在中间层合并后再返回给应用程序。要说的是每一个分区列能够有多份相同的数据,每一个查询从每列可用的机器上随机找出一个数据库进行查找。从而达到 查询的负载均衡,即提升了查询的性能,又保障了整个系统的可靠性。如图所示,全局查询和局部查询。

url:http://bbs.yesky.com/thread-15757864-1-1.html

相关文章
相关标签/搜索