数据库高可用:SQL Server横向扩展:设计,实现与维护(2)- 分布式分区视图(上)

SQL Server横向扩展:设计,实现与维护(2)- 分布式分区视图(上)

之前我们已经发布了一些与数据库扩展相关的文章,很多朋友表示非常的感兴趣,而且也说到了大家的痛处,在大家的呼声下,我们团队再次整理和撰写本系列文章。


在本篇文章中,我们将会讲述分布式分区视图如何设计和实现,也会讲述如何在实际中使用分布式分区视图,最后会讲述分布式分区视图使用的一些场景和优缺点。

为了使得朋友们对分布式分区视图有个概念,也为了方便后面的内容展开,我们先看看下面一个图:


 

讲述分布式分区视图之前,很有必要将之与我们常常熟悉的分区表和索引进行区别。


首先,分布式分区视图是一个横向扩展的方案(Scale out),而分区表却是一个纵向扩展的方案(Scale up)。通过使用分布式分区视图,我们可以把数据放在多个数据库实例(或者服务器)上面;使用分区表,我们可以把数据库中的数据放在同一服务器上的不同的物理文件上。分区表中的分区都在同一个数据库中,而且里面的分区不能跨数据库或者跨服务器。


分区表被分区分割成多个文件组,而这些文件组可以存在于同一个物理磁盘,或者在不同的磁盘上面。另外,分区表中的索引也可以根据分区进行分布。当查询优化器评估一个数据请求,而且这个请求中涉及到使用分区表,那么优化器可以优化这个请求只去合适的分区上面寻找合适的数据。(更多有关分区表的知识,大家可以参考我们站点发布的“深入浅出分区表”系列文章

 

虽然说,我们本篇讲述分布式分区视图,其实在SQL Server 2005(以及后续版本),也是支持“本地分区视图”,这里是一个相对的概念。因为在SQL Server2005以后已经有了分区表的引入,所以,很多时候,“本地分区视图”仅仅只是用来与之前的数据库版本兼容。现在我们直接采用分区表来替代“本地分区视图”。


当我们用分区的时候,主要有两个目的:

1.把历史的当前数据分开

2.用它来把数据划分为不同范围,如把某个大型的Customer表中的数据按照用户名字的字母顺序分开,如A-F,G-N,O-Z,分为三个区。

其实当我们在横向扩展方案中拆分数据的时候,也会进行一些类似分区的操作,但是,使用分区的时候,情况就没有在一个数据库上面使用分区划分数据那么的简单了,因为数据此时已经拆分到了不同的数据库实例中,甚至不同的服务器上面,,此时,我们就要考虑一些分布式情况,如下:



 

 

到现在为止,也说了一些分布式分区视图的一些概念,朋友可能已经有些迫不及待的要知道如何实现,那么,我这里先缓缓。我们先来看几个与它相关的重要的内容。

假设,现在分布式的视图已经建立好了,我们下一步要做的就是如何使用它。


下面,我们就谈谈实现分布式视图的实现的原理和分布式查询相关的知识。

 

 

分布式分区视图工作原理

分布式查询和分布式分区视图中使用了OLE DB提供程序来实现数据库实例之间间信息沟通。

访问远程数据库中的数据采用的是Linked Server技术(链接服务器)。一个链接服务器其实就是位于数据库实例中的一个对象。查询引擎是建立在OLE DB之上的,所以,不管是从当前本地的数据库存储引擎中检索数据,还是从远程的数据库的存储引擎中检索数据,他们的机制都是一样的。如果大家对数据库的内部结构稍微知道一点,就非常容易理解这个问题:



 


朋友们看到上面的图,查询引擎(也称之为“关系引擎”)通过存储引擎提供的OLE DB接口访问达到访问方法。在这里,OLE DB提供程序就可以访问远程的存储引擎的反问方法。

 

待续!

 

posted @ 2012-11-06 13:18  小洋(燕洋天)  阅读(3064)  评论(3编辑  收藏  举报