一. 分区、分表、分库

1. 分区

(1).含义

  就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的。

(2).常用到的指令:

alter database <数据库名> add filegroup <文件组名>
alter database <数据库名称> add file <数据标识> to filegroup <文件组名称>

详细操作参照 第十八节:SQLServer剖析表分区(分区函数、分区索引、分区方案等)

2. 分表

(1).含义

  就是把一张表按一定的规则分解成N个具有独立存储空间的实体表,系统读写时需要根据定义好的规则得到对应的表名称,然后再操作它。常见的分表方法有:求余法和路由表法。

(2).求余法:

  以其中一个字段为例,进行GetHashCode(),得到一个整数,然后“该整数 % 10”进行求余,得到“0-9”十个数,从而建立eg:userInfor0——userInfor9十张表

  该方法的局限性:只能建立10的整数倍张表

(3).路由表法:通过新增一张路由表,来配置某张业务表的分表规则,比如:通过Config表来配置order订单表的分表规则。路由表字段如下:

  tableName beginTime endTime

  order1 2015-01-01 2015-12-31

  order2 2016-01-01 2016-12-31

  order3 2017-01-01 2017-12-31

解释:比如根据订单的下单时间去Config表中匹配订单表的名称,然后向对应的订单表进行crud操作。

3. 分库

(1). 背景

  一旦分表,一个库中的表会越来越多,计算机处理性能是有限的,单机数据库的瓶颈也是显而易见的,分库后可以单独服务器集群部署,更好的提高大数据扩展能力。就目前互联网场景而言,单纯的分库已经很少见了,建议直接微服务了。

(2). 常见的分库依据

  按业务分库(最常见,订单库、日志库、产品库等)、按照时间分库、按照IP分库。

(3). 通过同义词来解决

A.分库后的不同数据库中的表访问方式可以通过【同义词】来做别名

CREATE SYNONYM --创建同义词的关键字

[dbo].[TestBTbA] --同义词名称,在select语句的from后面直接被使用

FOR [TestB].[dbo].[TbA] --当前同义词所映射的其他数据中的表

B.如果两个数据库分别存放在不同的物理机器上,那么他们之间通过普通的同义词就不能够互相访问了,这时必须要在创建同义词的时候指定 链接服务器名称

C.如何在一个数据库中建立 另外一个数据服务器的 链接服务器 ?

可以通过系统存储过程 sp_addlinkedserver 来添加其他数据库服务器的链接服务器

例如:exec sp_addlinkedserver '订单DB服务器', '', 'SQLOLEDB', '192.168.10.2',这个时候创建同义词的方式为:

CREATE SYNONYM --创建同义词的关键字

[dbo].[TestBTbA] --同义词名称,在select语句的from后面直接被使用

FOR [订单DB服务器].[TestB].[dbo].[TbA] --当前同义词所映射的其他数据中的表
View Code

分类:

技术点:

相关文章: