时态数据库的应用介绍(1)

简介:
+关注继续查看
随着信息技术的发展,传统的关系数据库(如关系型数据库)功能已不能满足当今信息系统中对时态信息处理能力的需求。而时态数据库理论的完善和发展为解决时态信息处理问题提供了一个很好的解决方案。
什么是时态数据库?
区别于传统的关系型数据库(RDBMS),时态数据库(Temporal Database)主要用于记录那些随着时间而变化的值的历史,而这些历史值对应用领域而言又是重要的,这类应用有:金融、保险、预订系统、决策支持系统等。
目前时态数据库还没有像如Oracle、SQL Server等大型关系数据库那样的产品。在当前时态数据库技术尚未完全成熟的现状下,DBMS提供商不会轻易把时态处理功能引入现有的DBMS中,因此,利用成熟的RDBMS数据库,建立时态数据库的中间件,在现阶段是一个较好的选择,因此就应运而生TimeDB和TempDB了。
国外的TimeDB(
http://www.timeconsult.com/Software/Software.html)是一种结合关系型数据库来实现时间数据库应用的技术,它支持时态数据库脚本:ATSQL2 [SBJS96a,SBJS96b,SBJS98]。它可以认为是关系数据库的一个前端,把时态数据库语句转换为关系型数据库的脚本进行执行,它的运用场景如下所示。
TimeDBArchiture.jpg
国内的TempDB也是一种类似的技术应用,支持ATSQL2,和TimeDB类似,都是基于目前非常成熟的关系型数据库基础上的应用。
时态数据库中间件不改变现有商业DBMS的结构和功能,而是作为一个上层构件添加到商业DBMS之上,应用程序之下,形成一个中间层结构。这个中间层结构能处理时态结构化查询语言(ATSQL2),把它转换成下层DBMS能理解的标准SQL语言(如P-SQL)并在商业DBMS中执行。

时态数据库理论的基本概念
时态数据库理论提出了三种基本时间:用户自定义时间、有效时间和事务时间。同时把数据库分为四种类型:快照数据库、回滚数据库、历史数据库和双时态数据库。
时态数据库理论提出了三种基本时间:用户自定义时间、有效时间和事务时间。同时把数据库分为四种类型:快照数据库、回滚数据库、历史数据库和双时态数据库。
 用户自定义时间:指用户根据自己的需要或理解定义的时间。时态数据库系统不处理用户自己定义的时间类型。因此,用户自定义时间是和应用相关的,不在时态数据库处理的范围之内。
 有效时间(Valid-Time):指一个对象在现实世界中发生并保持的时间,即该对象在现实世界中语义为真的时间,包含Valid-From和Valid-To两个值。它可以指示过去、现在和未来。例如,考虑事实“小明从2003年到2007年是大学生”,那么时间区间[2003, 2007]是事实“小明是大学生”的有效时间区间,该事实在该时间区间内为真。有效时间可以是时间点、时间点的集合、时间区间或者时间区间的集合,或者是整个时间域。有效时间由时态数据库系统解释并处理,在查询的过程中对用户透明。用户也可以显式地查询和更新有效时间。
 事务时间(Transaction-Time):指一个数据库对象发生操作的时间,是一个事实存储在数据库、或者在数据库中发生改变的时间,包含Transaction-From和Transaction-To两个值。当用户对数据库状态进行更改时,会产生各种操作历史,事务时间真实地记录了数据库状态变更的历史。有时也称事务时间为系统时间。
 快照数据库:快照数据库是反映现实世界某一瞬间情况的数据模型。它记录了特定时刻的数据库状态。快照数据库采用这样的假设:一个存储在数据库中的元组,一定是真实世界中的有效事实。
 历史数据库:数据库中被管理对象的生命周期是对象的有效时间,每一个元组记录了数据的一个“历史”状态。历史数据库中没有约束时间的表示方法,可以是时间点的集合、时间区间或者区间集合等形式表示。
 回滚数据库:数据库中被管理对象的生命周期是事务时间的数据库。它保存了数据库中事务提交、状态演变的历史状态。
 双时态数据库:数据库中元组包含一个系统支持的有效时间和一个系统支持的事务时间的数据库,称为双时态数据库。双时态数据库具备了快照数据库、历史数据库和回滚数据库的特点,存储了现实世界和数据库系统的变更历史。
 Now:Now的中文意思是当前时间,是一个时间变元,随着当前时间的变化而变化,记录了随时间变化的信息,它的有效值依赖于当前时间。

时态数据库脚本ATSQL的使用
时态数据处理构件根据ATSQL2的语法引入了Now、Beginning和Forever三个变元。Beginning和Forever分别表示时态数据处理构件所能表示的时间起点和终点。Now表示当前时间。每次执行操作时必须使Now绑定到一个固定的值(操作执行的当前时间),这样后继操作才能正常进行。在下面的ATSQL2中表示的这几个单词是具有具体的含义的。
ATSQL2的数据定义语句包括以下几项功能:创建表、创建视图、删除表、删除视图。
ATSQL2语言和普通SQL语句一样,使用“create table”关键字创建数据库表,关键字“as validtime”用于指示系统创建具有有效时间支持的数据库表。

1. 创建员工表Employee, 是在标准的创建表SQL结尾,加入AS VALIDTIME关键字即可。
None.gifCREATE TABLE Employee(
None.gifID 
VARCHAR(30NOT NULL,
None.gifNAME 
VARCHAR(50NOT NULL)
None.gif 
AS VALIDTIME;
2. 插入一条记录的ATSQL, 需要通过VALIDTIME PERIOD来指定一个时间范围的,其他部分和标准SQL一样
None.gifVALIDTIME PERIOD [1981-1985) Insert into Employee values ('112', 'Jack');
None.gif


3. 记录查询: 查询所有记录,在标准SQL前加VALIDTIME关键字即可, 查询指定时间段的记录,可以通过PERIOD关键字指定时间区间
None.gifVALIDTIME  SELECT *  FROM   Employee;
None.gifVALIDTIME PERIOD 
[1983-1986)  SELECT * FROM Employee;
None.gifVALIDTIME PERIOD [1983-forever) SELECT * FROM Employee;
4. 向员工表里添加人员信息插入记录前后分别如表 3-1和表 3-2所示
None.gifVALIDTIME period [ date "2008-1-1" – now)
None.gifInsert into Staff Values ( 132202, 'Zhang Jinning', '信息部');
ATSQL2.JPG

5. 为employee表创建一个视图,该视图包含所有1999-9-9前离职的工人信息,其中VALIDTIME(R)表示取元组R的有效时间区间:
Create view employee_v as 
Validtime select * from employee 
Where VALIDTIME(employee) before date "1999-9-9";

6. 删除员工表的ATSQL和一般的SQL语句一样,如下
DROP TABLE Employee;

几个查询相关的概念
快照查询:查询当前时刻的数据库状态。对于非时态表(快照数据库),快照查询是一种向上兼容的查询方式,可以查询非时态数据库的数据。对于时态表(历史数据库或回滚数据库),快照查询截取当前数据库状态,返回当前状态下的查询结果。

顺序查询:顺序查询是一种时态查询,通过关键字VALIDTIME或者TRANSACTIONTIME指示系统执行哪个时间维(有效时间维、事务时间维,或者两个维度)的时态查询。在这种查询中系统运用时态代数操作自动处理元组的时间戳(有效时间、事务时间,或两者的结合)。

非顺序查询:执行非顺序查询时,系统不再根据时态代数操作解释时间戳,只是把有效时间和事务时间当作普通的用户定义属性对待。非顺序查询适合特殊的查询需求,例如查询条件涉及状态的变化的查询。
时态归并:时态归并是作用于时态数据库的一种重构操作[23] 。归并把具有相同属性值并且时间戳相邻或重叠的元组合并成一个元组,归并的过程保持时态数据库的状态不被改变。

时态数据的变元
时态数据处理构件根据ATSQL2的语法引入了Now、Beginning和Forever三个变元。Beginning和Forever分别表示时态数据处理构件所能表示的时间起点和终点。Now表示当前时间。每次执行操作时必须使Now绑定到一个固定的值(操作执行的当前时间),这样后继操作才能正常进行。
时态数据处理构件使用重写底层比较过程的方法绑定Now的语义。它把Now、Beginning和Forever分别用以下三个具体的时间值表示:
Now = ‘9999-01-01 00:00:00’;
Beginning = ‘1000-01-01 00:00:00’;
Forever = ‘9999-12-31 23:59:59’.
因为使用了特殊值表示这三个变元,一方面使得时态数据处理构件能处理的时间范围比原商业数据库能处理的时间范围小,另一方面使得原商业数据库底层对时间类型数据的比较算子有了新的意义。例如,如果当前时间是2007年12月1日,考虑“2009-1-1>Now”的意义时,应当先把Now替换为2008-07-18,比较结果为真。
在TimeDB中Now只是当前时间的别名。在时态插入语句的执行过程中,Now作为一个标记被替换为语句执行的当前时间。
注:本文部分内容引用了黄永钊的《时态数据处理构件的性能优化研究与实现》
本文转自博客园伍华聪的博客,原文链接:时态数据库的应用介绍(1),如需转载请自行联系原博主。


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
数据建模 数据库
数据库三大范式
数据库三大范式
37 0
|
2月前
|
存储 SQL BI
【数据库视频】关于数据库
【数据库视频】关于数据库
|
3月前
|
关系型数据库 数据库
数据库中的三大范式
数据库中的三大范式
|
4月前
|
SQL 存储 Kubernetes
「列式数据库」与其他数据库相比较,YugabyteDB太强了
「列式数据库」与其他数据库相比较,YugabyteDB太强了
|
11月前
|
数据库
数据库多表关联对多对关系
本文章解决数据库设计多表关联配置问题,多对多关系!
67 0
|
11月前
|
存储 算法 关系型数据库
【数据库专题】如何理解数据库的索引?
【数据库专题】如何理解数据库的索引?
|
数据库
数据库的三大范式
当你应聘后端岗位的时候,数据库的知识必不可少,今天给大家分享一下数据库三大范式的通俗理解
74 0
|
存储 关系型数据库 数据库
数据库技术-数据库范式介绍
数据库技术-数据库范式介绍
150 0
数据库技术-数据库范式介绍
|
架构师 大数据 Java
数据库“三大范式”及“事务性”详解
数据库“三大范式”及“事务性”详解
158 0
数据库“三大范式”及“事务性”详解
|
SQL 存储 数据可视化
数据库必知词汇:数据库视图
视图是从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
612 0
推荐文章
更多