零基础学Java项目开发
上QQ阅读APP看书,第一时间看更新

1.3 系统架构中的数据分布式设计

系统架构中的数据分布式设计是支持分布式处理的软件设计,即在通信网络互连的多处体系结构上执行任务的系统设计。在分布式设计中,分布式操作系统、分布式程序设计语言及其编译系统、分布式文件系统、分布式数据库系统等,这些都是分布式的关键技术。下面将介绍数据分布式设计的相关内容。

1.独立Schema式模式设计

独立Schema,简单来说,就是一个大系统由相关的多个小系统组成,且不同小系统具有互不相同的数据库Schema定义。独立模式可管理性高,通信开销小。

我们在学习数据库SQL的过程中,会遇到一个模糊的Schema概念。Schema就是数据库对象的集合,这个集合包含各种对象,如表、视图、存储过程、索引等。为了区分不同的集合,就需要为不同的集合命名。默认情况下,一个用户对应一个集合,用户的Schema名同于用户名,所以Schema集合看上去像用户名。

如果把DataBase看作是一个仓库,该仓库内有很多房间(Schema),一个Schema代表一个房间,那么Table可以被看作是每个房间中的储物柜,User是每个Schema的用户并有操作数据库中每个房间的权利。也就是说,每个数据库映射的User有每个Schema(房间)的钥匙。访问一个表时,如果没有指明该表属于哪一个Schema中,系统就会自动在表上添加默认的Schema名。在数据库中,一个对象的完整名称为schema.object,而不是user.object。

在MySQL中创建一个Schema和创建一个DataBase的效果是一样的,但是在SQL Server和Oracle数据库中效果是不同的。

在SQL Server 2005中,为了向后兼容,当使用存储过程创建一个用户的时候,SQL Server 2005同时也创建了一个与用户名相同的Schema。当使用CREATE USER命令创建数据库用户时,可以用该用户指定一个已经存在的Schema作为默认的Schema;如果不指定,则该用户所默认的Schema即为DBO Schema。我们将DBO房间(Schema)比作一个大的公共房间,在当前登录用户没有默认Schema的前提下,如果在大仓库中进行一些操作(如创建表),但没有指定特定的房间(Schema),那么物品就会放在公共的DBO房间中。但是如果当前登录用户有默认的Schema,那么所执行的操作都是在默认的Schema上进行。

在Oracle数据库中不能直接新建一个Schema,如果要想创建一个“Schema”,只能通过创建一个用户的方法实现。在创建一个用户的同时,为这个用户创建一个与用户名同名的Schema,并作为该用户的默认Schema。此时,Schema的个数与User的个数相同,而且Schema名与User名一一对应并相同。

下面简单介绍Schema的基础知识。

1)关于Schema的表

(1)设计数据的表、索引及表与表的关系。

(2)在数据建模的基础上将关系模型转为数据库表。

(3)在满足业务模型需要的基础上,根据数据库和应用特点来优化表结构。

2)关于Schema程序功能与性能

(1)满足业务功能需求。

(2)同性能密切相关。

(3)满足周边需求(统计、迁移等)。(4)数据库扩展性。

3)关于Schema的索引

(1)正确使用索引。

(2)更新尽可能使用主键或唯一索引。

(3)主键尽可能使用自增ID字段。

(4)核心查询使用覆盖索引。

(5)建立联合索引,避免回收表数据。

2.集中式模式设计

集中式模式设计是指一个大系统必须支持来自不同地方的访问,或者该系统由多个不同的小系统组成,对数据进行集中化、统一格式存储。该模式可管理性、数据一致性都比较高。

互联网的技术架构正在经历“集中式→分布式→云平台”的发展历程。这3种技术架构的产生过程是一个迭代发展过程。从技术和优势来说,这也是一个逐渐演进过程;从业务需求和架构成熟度来说,这是一个愈加递增、健壮的发展过程。

目前,集中式架构主要集中在传统IT行业,分布式和云平台技术架构主要集中在需求演变快速的互联网行业,但这并不能表明满足低并发、扩展性差的集中式架构就落后了。对于传统行业来说,在业务压力不大、并发要求和扩展性不高、公司技术人员能力迭代更新延迟的前提下,集中式三层架构依旧有其优势和价值。

3.分区式模式设计

分区主要分为水平分区与垂直分区。当系统为“地域分布广泛的用户”提供相同服务时,常常使用水平分区策略。垂直分区为字段分隔,一般较少使用。采用分区方式,可伸缩性较好。

(1)分区式模式是将记录进行分类(即分片、分区或分箱),它不关心记录的顺序。

(2)分区式模式的目的是将数据中相似的数据记录成不同的、更小的数据。

(3)分区式模式的适用范围就是指必须提前知道有多少个分区,例如按年、月、日等分区。

(4)分区式模式的结构中对数据是通过分区器进行分区的,所以需要自定义分区器(partitioner)函数来确定每条记录应该被分在哪个分区。

4.复制式模式设计

复制式模式设计是指在整个分布式系统中保存多个副本,并且以某种机制保持多个数据副本之间的数据一致性。复制式可有效提升数据的可靠性。

5.子集式模式设计

子集式模式设计是指某节点因功能或非功能考虑而保持全体数据的一个相对固定的子集。子集式是复制式的特殊方式。

6.重组式模式设计

重组式模式设计是指不同数据节点因要支持的功能不同,而以不同的Schema保存数据,但本质上数据是同源的,并以“重新组织”的格式进行传递和保存。