惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
腾讯CDC
D
Docker
G
Google Developers Blog
D
DataBreaches.Net
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
The Cloudflare Blog
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
量子位
美团技术团队
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - edobnet

phonegap 开发初探 .net C# ADC接口中DES加密算法 阿里软件接口开发基础(淘宝网) C# SQL 2005自动备份文件删除 短信猫与中国移动CMPP2。0收发短信实例 通过OSQL命令执行SQL SERVER批SQL 针对sql 2005优化的高性能分页存储过程 .net framework 2.0以上修改config配制更容易 - edobnet LinQ操作汇总(From CSharpSamples) 远程注册表读取,与多线程池的应用. 使用JAVASCRIPT控制,IFAME的内容,从而使用投票点击等功能 ADSL自动断拨号类 类拟EXCEL表格锁定的功能的实现! - edobnet - 博客园 线程,线程数控制! 利用.Net 线程池提高应用程序性能. google 中国编程大赛测试题,及自己的解答 触发器在增量同步数据的运用. 进程服务编写,与启动停止控制 js异步XMLhttpPost,并带有,等待显示,防正,XMLhttpPost请求时间过来,而使浏览器死掉! - edobnet - 博客园
sql Server 2000 分区视图的运用
edobnet · 2005-12-23 · via 博客园 - edobnet

 分区视图的联系机从书,介绍:

分区视图在一个或多个服务器间水平连接一组成员表中的分区数据,使数据看起来就象来自一个表。Microsoft® SQL Server™ 2000 区分本地分区视图和分布式分区视图。在本地分区视图中,所有的参与表和视图驻留在同一个 SQL Server 实例上。在分布式分区视图中,至少有一个参与表驻留在不同的(远程)服务器上。此外,SQL Server 2000 还区分可更新的分区视图和作为基础表只读复本的视图。

分布式分区视图可用于实现数据库服务器联合体。联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制使您能够扩大一组服务器,以支持大型的多层 Web 站点的处理需要。有关更多信息,请参见设计联合数据库服务器

在实现分区视图之前,必须先水平分区表。原始表被分成若干个较小的成员表。每个成员表包含与原始表相同数量的列,并且每一列具有与原始表中的相应列同样的特性(如数据类型、大小、排序规则)。如果正在创建分布式分区视图,则每个成员表分别位于不同的成员服务器上。为了获得最大程度的位置透明度,各个成员服务器上的成员数据库的名称应当是相同的,但不要求非这样。例如:Server1.CustomerDBServer2.CustomerDBServer3.CustomerDB

成员表设计好后,每个表基于键值的范围存储原始表的一块水平区域。键值范围基于分区列中的数据值。每一成员表中的值范围通过分区列上的 CHECK 约束强制,并且范围之间不能重叠。例如,不能使一个表的值范围从 1 到 200000,而另一个表的值范围从 150000 到 300000,因为这样将不清楚哪个表包含 150000 与 200000 之间的值。

例如,正在将一个 Customer 表分区成三个表。这些表的 CHECK 约束为:

-- On Server1:
CREATE TABLE Customer_33
  (CustomerID   INTEGER PRIMARY KEY
                CHECK (CustomerID BETWEEN 1 AND 32999),
  ... -- Additional column definitions)

-- On Server2:
CREATE TABLE Customer_66
  (CustomerID   INTEGER PRIMARY KEY
                CHECK (CustomerID BETWEEN 33000 AND 65999),
  ... -- Additional column definitions)

-- On Server3:
CREATE TABLE Customer_99
  (CustomerID   INTEGER PRIMARY KEY
                CHECK (CustomerID BETWEEN 66000 AND 99999),
  ... -- Additional column definitions)

主要功能是为了提高大数据量性能,通过把数据放到不同表,或不能同服务器的不同数据库实例上。来提高数据性能。

下面看一个实际,转自WEB CAST
在服务器A创建表CUSTOMERS


//ServerA
Use pubs
go
Create table customers (
  Customerid  
varchar(5not null,
  CompanyName 
varchar(50not null,
  ContactName  
varchar(30null,

CONSTRAINT PK_customers PRIMARY KEY CLUSTERED  (Customerid), 
CONSTRAINT   CK_customerid   CHECK (Customerid  between 'AAAAA'  and  'LZZZZ')
)


在服务器B也创建另一张表,表的结果,类型完全一样,注意表的CHECK不同。(表名可以不同,但最好一样)

//Server B 
use pubs
go
Create table customers (
  Customerid  
varchar(5not null,
  CompanyName 
varchar(50not null,
  ContactName  
varchar(30null,
CONSTRAINT PK_customers PRIMARY KEY CLUSTERED  (Customerid), 
CONSTRAINT   CK_customerid   CHECK (Customerid  between 'M'  and  'ZZZZZ')
)
go

在A服务器上创建B服务器的链接服务器,已使A服务器能访问B服务器,

//ServerA
exec  sp_addlinkedserver    
       
@server='DPVSERVER1'@srvproduct='',
       
@provider='SQLOLEDB'@datasrc='ServerB'
go
exec  sp_addlinkedsrvlogin 
 
@rmtsrvname =  'DPVSERVER1'
     , 
@useself =  'false' 
     , 
@rmtuser =  'sa' 
     , 
@rmtpassword = 'password' 
go

同样,B服务器,创建A服务器的链接服务器,

//ServerB
exec  sp_addlinkedserver    
       
@server='DPVSERVER2'@srvproduct='',
       
@provider='SQLOLEDB'@datasrc='ServerA'
exec  sp_addlinkedsrvlogin 
 
@rmtsrvname =  'DPVSERVER2'
     , 
@useself =  'false' 
     , 
@rmtuser =  'sa' 
     , 
@rmtpassword = 'password' 
go


在A服务器上设置,属性,

//ServerA
Exec sp_serveroption 'DPVSERVER1''lazy schema validation''true'


B服务器上,设置属性,

//Sever B
Exec sp_serveroption 'DPVSERVER2''lazy schema validation''true'


A服务器上创建分区视图:

//Server A:
  
Create view DPV_Customers  As
   
Select *  from Customers 
   
Union all
   
Select *  from  DPVSERVER1.Pubs.dbo.Customers


B服务器也创建分区视图:(注意视图,UNION ALL的顺序)

   Create view DPV_Customers  As
   
Select *  from  DPVSERVER2.Pubs.dbo.Customers
   
UNION ALL
   
Select *  from Customers


下面使用DPV_CUSTOMERS,和实际物理表一样
执行的时候打开查询分析器的执行计划,可以看到,实际,会优化,实际应该读那一张,写那一样表。

set xact_abort on
INSERT INTO DPV_CUSTOMERS VALUES('AAMAY','FUZHOU COMPANY','MARRY')
INSERT INTO DPV_CUSTOMERS VALUES('CJOHN','XIMEN COMPANY','MARRY')
INSERT INTO DPV_CUSTOMERS VALUES('SMITH','SHANGHAI COMPANY','TOM')
INSERT INTO DPV_CUSTOMERS VALUES('YOUNG','FUJIAN COMPANY','JANE')
INSERT INTO DPV_CUSTOMERS VALUES('GTOPP','BEJING COMPANY','TOM')
INSERT INTO DPV_CUSTOMERS VALUES('QUILH','BEJING COMPANY','TOM')


//SELECT  *  FROM  DPV_Customers  order  by  customerid

//SELECT  *  FROM  DPV_Customers  WHERE  CustomerID= 'QUILH'

这个功能很不错,不过也会有一些问题,

1,表不能有DEFAULT 约束
2,INSERT 要一次性查询所有列的值,没有值的用NULL
3,各个表个CHECK集合不能有重复,也不充许找不一个满足要求的表。
还在研究中。。。。。。。。。。。。。。。