分布式分区视图1
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提供程序就可以访问远程的存储引擎的反问方法。
待续!
作者: 小洋,燕洋天
出处: http://yanyangtian.cnblogs.com/
SQL Server性能优化专家站点
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息