1.分布式数据库
1.1 基础知识
分布式数据库系统是数据库系统和计算机网络相结合的产物。
- 由于计算机功能增强,成本下降,几乎每个办公室、实验室,个人用户都可以拥有自己的计算机,从而增加了数据分散处理的需求。
- 由于通信技术的迅速发展,出现了各种计算机网络,降低了数据传输费用,而计算机局部网络的广泛应用,则为分布式数据库系统的出现提供了实现的可能性。
分布式数据库系统将广泛用于:各企事业单位的人事、财务和库存控制等管理信息系统,百货公司销售点的经营销售信息处理系统,电子银行等的在线处理系统,国家政府部门的经济信息系统,大规模数据资源如人口普查、气象预报、环境污染、地震监测等数据库系统,军事指挥控制系统,具有多数据处理中心的企业报告生产系统,医院的病历药品管理以及辅助诊断、病人监护系统,工业控制和管理的集散型系统,计算机综合自动化制造系统以及各种办公自动化系统等。
分布式数据库系统(Distributed Database System, DDBS)是面向地理上分散,而管理上又需要不同程度集中管理的需求而提出的一种数据管理信息系统
。一般的分布式数据库系统的组成如下:
分布式数据库系统首先是由多个不同节点或场地的数据库系统通过网络连接而成的,每个节点都有各自的数据库管理系统(Local Database Management System, LDBMS),同时还有全局数据库管理系统(Global Database Management System, GDBMS)。
完全分布式数据库系统需要满足的条件:
- 分布性:即数据存储在多个不同的节点上。
- 逻辑相关性:即数据库系统内的数据在逻辑上具有相互关联的特性。
- 场地透明性:即使用分布式数据库中的数据时不需指明数据所在的位置。
- 场地自治性:即每一个单独的节点能够执行局部的应用请求。
分布式数据库的特点
:
- 数据的集中控制性。能够对信息资源提供集中控制。
- 数据独立性。是指数据的组成对应用程序来说是透明的。
- 数据冗余可控性。保持数据唯一,将数据组织在数据库中可以方便地实现数据的共享,要尽量减少数据冗余,这不仅使存储代价降低,还可提高查询效率,便于数据一致性维护。
- 场地自治性。局部应用独立于全局应用的特性,对每个场地来说就有两种数据,一种是参与全局数据库的局部数据,而另一种则是不参与全局数据库的数据。
- 存取的有效性。分布式数据库系统中全局查询的执行计划分解成多个子查询执行计划加以执行,它是根据系统的全局优化策略产生的,而子查询计划又是在各场地上分布执行的。因而,分布式数据库系统中查询优化有全局优化和局部优化两个级别。
1.2 体系结构
1)模式结构
分布式数据库抽象为四层的模式结构如下:
这种四层模式划分为:全局外层、全局概念层、局部概念层和局部内层。在各层间还有相应的层间映射。四层模式的划分不仅适用于完全透明的分布式数据库系统,而且也适合各种透明性要求的分布式数据库系统。无论是对同构型分布式数据库系统,还是异构型分布式数据库系统都能适用。
- 全局外层。全局视图由多个用户视图组成,用户视图是针对分布式数据库特定的全局用户的,是对分布式数据库的最高层的抽象。
- 全局概念层。是分布式数据库的整体抽象,包含了系统中全部数据的特性和逻辑结构。全局概念层具有三种模式描述信息:
- 全局概念模式:描述分布式数据库全局数据的逻辑结构。
- 分片模式:描述全局数据逻辑划分的视图,它是全局数据的逻辑结构根据某种条件的划分,每一个逻辑划分即一个片段,或称为分片。
- 分配模式:描述局部逻辑的局部物理结构,是划分后的片段(或分片)的物理分配视图。
全局概念模式到分片模式的映射是一对多的,即一个全局概念模式有若干个分片模式与之相对应,而一个分片模式只能对应一个全局概念模式。分片模式到分配模式映射可以是一对多的或者一对一的,这是由数据分布的冗余策略所决定的。当采用一对多时,表明分片数据有多个副本存储在不同的场地上,且同一场地一般情况下不允许有相同的副本存在;当采用一对一时,则表明数据是非冗余的,即分片数据只有一个副本。
从全局概念层观察分布式数据库,它定义了全局数据的逻辑结构、逻辑分布性和物理分布性,但并不涉及全局数据在每个局部场地上的物理存储细节。
- 局部概念层。由局部概念模式描述,它是全局概念模式的子集,全局概念模式经逻辑划分后被分配在各局部场地上。
- 局部内层。是分布式数据库中关于物理数据库的描述。
分布式数据库四层结构及其模式定义之间的相互映射关系,体现了分布式数据库是一组用网络联结的局部数据库的逻辑集合,特点如下:
- 全局数据库与局部数据库分离。全局数据库是虚拟的,全局DBA的视图由全局概念层定义,完全独立于各个场地的局部数据库;局部概念层和局部内层可看作是局部数据库,它是全局数据库的内层。
- 数据库的数据独立性。
- 透明性。分片透明即用户完全只对全局关系操作,而不管关系如何在逻辑上划分成片段关系,分配透明,是较低级的透明,要求用户在片段上操作,不是在全局关系上的操作,但不必考虑片段的存放位置。
- 数据冗余控制。冗余只在分配时才涉及,并且分布式系统提供了重复副本透明性。
2)数据分布和数据分片
数据分布是指在分布式环境中通过合理分布数据,提高数据操作自然并行度,以达到最好的执行效率的目的。解决数据分布的策略有集中式、分割式、复制式和混合式
。
数据分片也称数据分割,全局数据库是由各个局部数据库逻辑组合而成,各个局部数据库则是全局数据库的某种逻辑分割而得。数据分片有三种基本方法:水平分片、垂直分片、水平和垂直结合的分片。
水平分片:按特定条件把全局关系的所有元组,分划成若干个互不相交的子集,每一子集为全局关系的一个逻辑片段。
- 垂直分片:把全局关系的属性分成若干子集,对全局关系作投影运算得到这些子集。
- 水平和垂直结合的分片:可以先水平分片再垂直分片,或先垂直分片再水平分片。
采用何种数据分片,都要遵守如下规则:
- 完备性条件:必须把全局关系的所有数据映射到各个片段中,绝不允许有属于全局关系却不属于任何一个片段的数据存在。
- 可重构条件:必须保证能够由同一个全局关系的各个片段来重新构造该全局关系。对于水平分片可用并操作重构全局关系;对于垂直分片可用连接操作重构全局关系。
- 不相交条件:要求一个全局关系被分割后所得的各数据片段互不重叠或只包含关键字重叠。
3)分布透明性
分布透明性,也称分布独立性。数据分布独立性是指用户或用户程序使用分布式数据库如同使用集中式数据库那样,不必关心全局数据的分布情况,即用户不必关心全局数据的逻辑分片情况、逻辑片段的场地位置分配情况以及各场地上数据库的数据模型等。
- 分片透明性。用户编写的应用程序只对全局关系进行操作,而不必考虑数据的逻辑分片,当分片模式改变时,只要改变全局概念模式到分片模式之间的映像,从而不会影响应用程序,实现了数据分片透明性。
- 分配透明性。一种是各片段被复制的情况,即每一片段是否被复制、复制了几个副本;另一种是片段及其各副本的场地的位置分配情况。
- 局部数据模型透明性。
4)分布式数据库管理系统
分布式数据库管理系统(Distributed Database Management System, DDBMS),主要分两大类:
综合型体系结构:是指在分布式数据库建立之前,还没有建立独立的集中式数据库管理系统,设计人员根据用户的需求,设计出一个全新的完整的数据库管理系统。
联合型体系结构:是指每个节点的数据库管理系统已经存在,在此基础上建立的分布式数据库系统。联合型体系结构又分为同构系统和异构系统。同构系统是指每个节点的局部数据库管理系统支持同一种数据模式、命令语言及查询语言;而异构系统是指各个节点上的数据库管理系统有不同的数据模式、命令语言及查询语言。
分布式数据库系统的标准定义,12条准则如下:
- 本地自治性。
- 不依赖于中间站点。
- 可连续操作性。
- 位置透明性和独立性。
- 数据分片独立性。
- 数据复制独立性。
- 分布式查询处理。
- 分布式事务处理。
- 硬件独立性。
- 操作系统独立性。
- 网络独立性。
- DBMS独立性。
如果一个分布式数据库管理系统能满足12条准则,则称为完全的分布式管理系统。
分布式数据库管理系统由四部分组成:
LDBMS,局部场地上的数据库管理系统,其功能是建立和管理局部数据库,提供场地自治能力,执行局部应用及全局查询的子查询。
GDBMS,全局数据库管理系统,主要功能是提供分布透明性,协调全局事务的执行,协调各局部数据库管理系统以完成全局应用,保证数据库的全局一致性,执行并发控制,实现更新同步,提供全局恢复功能等。
GDD,全局数据字典(Global Data Directory),用来存放全局概念模式、分片模式分配模式的定义以及各模式之间映像的定义,存放用户存取权限的定义,以保证全部用户的合法权限和数据库的安全性,还存放数据完整性约束条件的定义,其功能与集中式数据库的数据字典类似。
CM,通信管理(Communication Management),通信管理系统在分布数据库各场地之间传送消息和数据,完成通信功能。
5)分布式查询处理和优化
查询优化的主要任务是控制和加快查询执行与数据传输过程。优化通常包括针对查询执行代价的优化和针对查询响应时间的优化
两类。
执行代价是指查询所需要的系统资源,使查询执行所使用的系统资源的总和尽量地少,从而降低系统开销,整个系统的开销可以从各单个系统资源的开销表达式中推出。
查询响应时间是指查询开始提交到获得第一个结果之间的时间,尽量减少查询的响应时间,而不计较系统资源的耗费。可以形象地说,执行代价优化的目标是“最便宜”,而响应时间优化的目标是“最快”。
6)分布式事务管理
一个事务是访问数据库的一个逻辑工作单位,它是一个操作序列
分布式事务和集中式数据库中的事务共同具有如下特性:
- 原子性。事务的操作要么全部执行,要么全部不执行。
可串行性或一致性。并发执行的几个事务,其操作的结果应与以某种顺序串行执行这几个事务所得出的结果相同
隔离性。一个没执行完的事务不能在其提交之前把自己的中间结果提供给其他的事务使用。
持久性。当一个事务正常结束后,即提交后,其操作的结果将永久化,提交后发生的故障不会影响提交结果。
通常把事务的原子性(Atomicity)、可串行性(Serializability)或一致性(Consistency)、隔离性(Isolation)和持久性(Durability),称为事务的四个特性,简写为ASID或ACID。
分布式事务与集中式数据库中的事务相比,区别如下:
执行特性:由于分布式事务执行时被分解成多个子事务执行,而各子事务间的操作需要进行协调,因此每一个分布式事务必须创建一个控制进程(亦称协调进程),以协调各子事务的操作,协调数据及控制报文的收发,决定事务的提交与天折。而集中式事务的执行由并行 调度算法调度,不必产生一个控制进程,也不必分解为子事务。
操作特性:在分布式事务中,除了应用对数据的存取操作序列之外,还必须加入大量 的通信原语,负责协调进程和代理进程(负责完成子事务)之间的数据传送,以及代理进程之间的数据传送。
控制报文:分布式数据库系统中,除了数据报文外,更增加了控制报文。因为除了要对数据进行存取操作外,还要对各子事务的操作进行协调,这样就有了大量的控制报文要在网上传输。
7)分布式数据库故障
在集中式数据库系统中,故障分为事务故障、系统故障和介质故障。但在分布式数据库系统中,除了这三种,还有通信故障。
介质故障:磁带、磁盘的损坏等。
系统故障:CPU错、死循环、缓冲区满、系统崩溃等。
事务故障:计算溢出、完整性被破坏、操作员干预、输入输出错等。
通信故障:站点之间通信出现的故障称为通信故障。还可以再分为报文故障和网络分割故障。报文故障又可分为报文错、报文失序、报文丢失和长时间的延迟。
网络分割故障:系统中一部分的节点和另外一部分节点完全失去了联系,两组节点无法通信。
报文故障:收到的报文格式或数据错误、报文先后次序不正确、丢失了部分报文和长时间收不到报文。
8)故障恢复原则
- 孤立和逐步退出事务的原则。对于不影响其他事务的可排除性局部故障,例如事务操作的删除、超时、违反完整性规则、资源、限制、死锁等,应令某个事务孤立地和逐步地退出,将其所做过的修改复原,即做
UNDO
。 - 成果结束事务原则。成功结束事务所做过的修改应超越各种故障,当故障发生时,应该重做(
REDO
)事务的所有操作。
- 夭折事务的原则。若发生了非局部性的不可排除的故障,例如系统崩溃,则撤销全部事务,恢复到初态。这有两种做法:一种是利用数据库的备份实现;另一种是按反向顺序操作,复原其启动以来所做过的一切修改。
9)两阶段提交协议(2PC)
两阶段提交协议(Two Phase Commitment Protocol, 2PC)既简单又精巧,它把本地原子性提交行为的效果扩展到分布式事务,保证了分布式事务提交的原子性,并在不损坏日志的情况下,实现快速故障恢复,提高分布式数据库系统的可靠性。
2PC把事务的提交过程分为两个阶段:
第一阶段是表决阶段,目的是形成一个共同的决定。
第二阶段是执行阶段,目的是实现这个协调者的决定。根据协调者的指令,参与者或者提交事务,或者撤销事务,并给协调者发送确认消息。此时,协调者在日志中写入一条事务结束记录并终止事务。
请注意协调者做出事务的全局终止决定的方式,该决定受两条规则的支配,这两条规则称为全局提交规则:
只要有一个参与者撤销事务,协调者就必须做出全局撤销决定。
只有所有参与者都同意提交事务,协调者才能做出全局提交决定。
10)三阶段提交协议(3PC)
3PC协议的提交过程:
- 第一阶段,协调者向所有的参与者发“准备提交”报文,由每个参与者据自己的情况进行投票,只有所有的参与者回答“建议提交”才进入第二阶段。
- 第二阶段,协调者向所有的参与者发“全局预提交”报文,参与者收到该报文后若已经准备好提交,则回答“准备就绪”报文,否则进行撤销处理。
- 第三阶段,协调者收到所有的参与者“准备就绪”回答后,就向所有的参与者发“全局提交”报文,此时每个参与者都知道其他的参与者赞成提交,因此它可以收到“全局提交”报文后进行提交。
2.Web数据库
Web数据库,也叫网络数据库,是用户利用浏览器作输入接口,输入所需要的数据,浏览器将这些数据传送给网站,由网站对这些数据进行处理。
三层体系结构:
客户层。用户接口和用户请求的出发地,JDBC(Java Database Connectivity)、DHTML(Dynamic HTML)、AppLet。典型应用是网络浏览和胖客户(如Java程序)。
服务器层。典型应用式Web服务器和运行业务代码的代码的应用程序服务器CGI、SAPI、ASP、PHP、JSP、EJB、ServLet。
数据层。典型应用是关系型数据库和其他后端数据资源,如Oracle、SQL Server等。
脚本连接数据库的常用方法:ODBC(Open DatabaseConnectivity,开发式数据库连接)、DAO(Data Access Objects,服务器访问对象)、RDO(Remote Data Objects,远程数据库访问对象)、ADO(Activtex DataObjects, ActivteX数据对象)。
客户机/服务器模式(C/S)。运行性能较高。
浏览器/服务器模式(B/S)。维护简单。
3.XML与数据库
XML(Extensible Markup Language)为可扩展的标记语言。是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
XML语法规则:
必须有XML声明语句,声明是XML文档的第一句。
是否有DTD文件,DTD文件的声明语句紧跟在XML声明语句后面。
注意你的大小写,在XML文档中,大小写是有区别的。
给属性值加引号,所有属性值必须加引号(可单/双引号)。
所有的标识必须有相应的结束标识。
所有的空标识也必须被关闭。
在XML与数据库之间传输数据,需要在文档结构和数据库结构之间相互映射。
模版驱动。查询。
模型驱动。分为表格模型和特定数据对象模型。
4.面向对象数据库
数据库技术与面向对象程序设计方法相结合形成了面向对象数据库系统(Object Oriented DatabaseSystem,OODBS),它是支持将数据当作对象来模拟和创造的一种数据库管理系统。
面向对象数据库的特征:
应该具有表达和管理对象的能力。
对象可以具有任意复杂度的对象结构。
必须具有与面向对象编程语言交互的接口。
应具有表达和管理数据库变化的能力。
面向对象数据模型:
对象结构。属性集合、方法集合和消息集合。
对象类
继承与多重继承
对象标识。每个对象有一个唯一的、由系统生成的对象标识(Object Identifier, OID)。
对象嵌套。一个对象的属性可以是一个对象,形成了嵌套关系,产生了一个嵌套层次结构。
对象关系数据库系统。将对象数据模型中的特征和语言结合到关系数据模型中。迁移途径有嵌套关系、复杂类型、继承/引用类型、函数与过程。
复杂类型有关的查询:
- 路径表达式
select head->name;head->address from departments;
- 以集合为值的属性
select title from books where 'databases' in (unnest(keyword-set));
- 嵌套与解除嵌套
select name, a as author,date.day,k as keyword from doc as b,b.author-list as a,b.keyword-list as k;
5.大数据和数据仓库
大数据(Big Data)是一种具有海量的数据规模,在获取、存储、管理和分析等方面都远远超过传统数据库处理范围的数据集合。
数据仓库的数据具有四个基本特征:面向主题的、集成的、不可更新的、随时间不断变化的。
数据仓库采用的模型:
概念模型是主观与客观之间的桥梁,它是一个概念性的工具,用于设计系统、收集信息。最常用的表示方法是使用E-R图作为它的描述工具。
逻辑模型就是关系模型。关系模型概念简单、清晰,用户易懂、易用,有严格的数学基础和在此基础上发展的关系数据理论;关系模型简化了程序员的工作和数据仓库设计开发的工作,当前比较成熟的商品化数据库产品都是基于关系模型的。
物理模型就是逻辑模型在数据仓库中的实现,如物理存取方式、数据存储 结构、数据存放位置以及存储分配等等。所考虑的主要因素有:I/O存取时间、空间利用率和维护代价;在进行数据仓库的物理模型设计时,考虑到数据仓库的数据量大,但是操作单一的特点,可采取其他的一些提高数据仓库性能的技术,如合并表、建立数据序列、引入冗余、进一步细分数据、生成导出数据、建立广义索引等等。
数据仓库的基本观念之一是,当数据从业务系统或其他数据来源提取出来时,应该先经过变换或清洗,才能将它加载到数据仓库中。进行数据转移的目的应该有两个:第一,改进数据仓库中数据的质量;第二,提高数据仓库中数据的可用性。
OLAP是以数据仓库进行分析决策的基础,针对特定问题的联机数据访问和分析,OLAP能够对不同数据集合进行基于某个或是多个角度的比较,它能够从不同角度切割数据集合从而进行分析。
OLTP是操作人员和低层管理人员利用计算机网络对数据库中的数据进行查询、增加、删除、修改等操作,以完成事务处理工作。以快速事务响应和频繁的数据修改为特征,用户利用数据库快速地处理具体业务。