时态数据库
- 格式:doc
- 大小:446.00 KB
- 文档页数:5
时态数据库时态数据库是一种设计用于存储和管理时间相关数据的数据库系统。
它具有能够跟踪数据变化历史记录的能力,因此可以在不同时间点上检索和分析数据。
时态数据库在许多领域都有广泛的应用,包括金融、医疗、交通等行业。
时态数据库的主要特点之一是能够存储和查询数据的历史变化。
它通常会记录每个数据项的有效时间范围,即数据项在何时开始有效,在何时结束有效。
这使得用户可以在不同时间点上访问数据,并了解其历史变化。
例如,在金融领域,一家银行可以使用时态数据库来跟踪客户的银行账户余额变化,这样就可以追溯用户的过去的交易记录。
另一个重要的特点是时态数据库能够处理数据的不确定性。
在现实世界中,数据常常会存在不确定性,尤其是在时间方面。
时态数据库可以处理数据的不确定性,并提供一种方法来表示和处理不确定的数据。
例如,在医疗领域,一位医生可以使用时态数据库来跟踪患者的病情变化,这样就可以处理由于医学诊断的不确定性而导致的数据不确定性。
除了存储和查询数据的历史变化,时态数据库还可以支持各种时间相关的数据操作。
例如,它可以支持时间窗口查询,即查询在某个时间段内的数据。
它还可以支持时间序列分析,即分析时间序列数据的趋势和模式。
这些功能使得时态数据库成为处理时间相关数据的有力工具。
时态数据库的设计和实现面临着一些挑战。
其中之一是数据访问效率的问题。
由于时态数据库需要记录数据的历史变化,因此需要额外的存储空间来存储历史记录。
此外,查询历史变化的效率也是一个挑战,因为需要在大量的历史记录中进行查询。
为了解决这些问题,时态数据库通常采用了一些优化技术,如索引和压缩算法,来提高数据访问的效率。
总之,时态数据库是一种用于存储和管理时间相关数据的数据库系统。
它具有存储和查询数据历史变化的能力,并能够处理数据的不确定性。
时态数据库在许多领域都有广泛的应用,它为用户提供了一种强大的工具来分析和理解时间相关的数据。
经典案例增量抽取、增量计算等都T-TDSQL的经典案例。
如下以增量计算为例,来分析T-TDSQL在金融中的典型应用。
增量计算基于T-TDSQL全时态数据存储的特性,们可以方便的进行增量式的数据查询、抽取和计算。
对于单表的数据增量抽取/计算[1],T-TDSQL首先通过快照差读方法,获取对应与给出快照范围的增量数据集,然后根据用户定义的计算规则,组合调用系统内置的聚集函数,如SUM,AVG,GROUP BY等,实现增量计算的功能。
上任何时间段内的的数据都可以通过增量计算的技术进行“增量抽取”。
对于多表增量计算,T-TDSQL通过“快照差连接”支持增量计算场景。
即首先得到两个快照差集合R和S,然后通过连接操作将两表合并,之后再使用聚集函数等完成计算。
本节通过在互联网金融中常用的对账来对增量计算的原理和实际应用进行介绍。
对账互联网金融行业对数据的准确性要求极高,而在互联网环境中,数据不一致或数据时有发生,因此,通过对账来降低账户余额等数据造成的风险十分重要。
在计费中,采用将账户余额表(user)和账户流水表(water)按小时/天为周期进行比对的,来发现账户余额与交易流水的不一致现象,从而及时对交易进行。
传统的对账采用按固定时间段(如分钟/小时/天)为单位进行对账。
如现对2018年4月11日的交易进行对账,首先需要得到4月11日期初账户余额表和期末账户余额表,以及当天的交易流水表;然后对账户表通过按用户ID分组,并计算每个用户的期末余额减去期初余额,记为结果A,对流水表按用户ID分组,并将交易金额分组求和,记为结果B;最后将每个用户的结果A和结果B进行比对,如果A=B,则交易没有问题,否则该用户在当天的交易存在。
对于按固定时间段对账,主要存在以下三个问题:1.时效性差:对于交易,不能立即发现并反馈,延迟了以固定时间段为单位的一段时间后才能发现。
2.对账不精准:定位交易较复杂。
例如:如果用户在一天内发生的多笔交易,其中一笔出现了,通过按天对账的不能直接定位到具体的哪条交易出现,而只能定位到用户级别,即仍然需要人工参与,将该用户的当天交易都确认一遍,才能找到具体的交易。
数据库设计开题报告1.设计(或研究)的依据与意义1基本概念时态数据库中的一些基本概念主要涉及时态信息模型、时间粒度、有效时间和事务时间等。
1.1时态信息模型随时间变化的信息称为时态信息(TemporalInformation)。
在自然界中,时间是每时每刻都存在、连续发生且一去不复的,它在时间轴上是连续存在的。
1.2时间粒度由于计算机的数字化特点,不可能将时间存贮为一个连续的实体,而必须用离散形式来表示。
时间粒度是对离散化程序的度量,当以固定时间粒度对实体状态采样时,粒度越小表示越精确,但同时所占用的内存就越大。
1.3有效时间和事务时间有效时间和事务时间是时态建模中最重要的两个概念。
有效时间(ValidTime)是指一个对像(事件)在现实世界中发生并保持的那段时间,或者该对象在现实世界中为真的时间。
由定义可知,有效时间表示了事物的有效性,即事物在现实世界中存在或发生的时间。
2时态数据库分类按时态信息的表示的方式,可以将数据库分为4个类型:快照数据库(SnapshotDatabase)、回滚数据库(RollbackDatabase)、历史数据库(HistoricalDatabase),双时态数据库(TemporalDatabase)。
2.1快照数据库快照数据库(SnapshotDatabase)顾名思义就是指在特定时刻的瞬间快照来建立模型,考虑现实世界。
快照数据库只反应了某一瞬间的情况。
所有的传统数据库都属于这一类。
之所以把这类数据库归结为时态数据库,主要是因为它支持用户自定义时间。
用户自定义时间是指用户根据自己的需求或理解定义的时间。
2.2回滚数据库回滚数据库(RollbackDatabase)只支持事务时间。
它保存过去的每一次事务操作的历史,即状态演变之前的状态。
2.3历史数据库历史数据库只支持有效时间。
在历史数据库当中,每一个关系记录了一个“历史”状态,它建模了现实世界中事物在有效时间点或现实世界状态的变化历程。
1.时态数据库的定义区别于传统的关系型数据库(RDBMS),时态数据库(Temporal Database)主要用于记录那些随着时间而变化的值的历史,而这些历史值对应用领域而言是重要的,这类应用有:金融、保险、预订系统、决策支持系统等。
目前时态数据库还没有像如Oracle、SQL Server等大型关系数据库那样的产品。
在当前时态数据库技术尚未完全成熟的现状下,DBMS提供商不会轻易把时态处理功能引入现有的DBMS中,因此,利用成熟的RDBMS数据库,建立时态数据库的中间件,在现阶段是一个较好的选择,因此就应运而生TimeDB和TempDB了。
2.时态数据库的类型时态数据库理论提出了三种基本时间:用户自定义时间、有效时间和事务时间。
同时把数据库分为四种类型:快照数据库、回滚数据库、历史数据库和双时态数据库。
1)用户自定义时间:指用户根据自己的需要或理解定义的时间。
时态数据库系统不处理用户自己定义的时间类型。
因此,用户自定义时间是和应用相关的,不在时态数据库处理的范围之内。
2)有效时间(Valid-Time):指一个对象在现实世界中发生并保持的时间,即该对象在现实世界中语义为真的时间,包含Valid-From和Valid-To两个值。
它可以指示过去、现在和未来。
例如,考虑事实‚小明从2003年到2007年是大学生‛,那么时间区间[2003, 2007]是事实‚小明是大学生‛的有效时间区间,该事实在该时间区间内为真。
有效时间可以是时间点、时间点的集合、时间区间或者时间区间的集合,或者是整个时间域。
有效时间由时态数据库系统解释并处理,在查询的过程中对用户透明。
用户也可以显式地查询和更新有效时间。
3)事务时间(Transaction-Time):指一个数据库对象发生操作的时间,是一个事实存储在数据库、或者在数据库中发生改变的时间,包含Transaction-From和Transaction-To两个值。
当用户对数据库状态进行更改时,会产生各种操作历史,事务时间真实地记录了数据库状态变更的历史。
有时也称事务时间为系统时间。
4)快照数据库:快照数据库是反映现实世界某一瞬间情况的数据模型。
它记录了特定时刻的数据库状态。
快照数据库采用这样的假设:一个存储在数据库中的元组,一定是真实世界中的有效事实。
5)历史数据库:数据库中被管理对象的生命周期是对象的有效时间,每一个元组记录了数据的一个‚历史‛状态。
历史数据库中没有约束时间的表示方法,可以是时间点的集合、时间区间或者区间集合等形式表示。
6)回滚数据库:数据库中被管理对象的生命周期是事务时间的数据库。
它保存了数据库中事务提交、状态演变的历史状态。
7)双时态数据库:数据库中元组包含一个系统支持的有效时间和一个系统支持的事务时间的数据库,称为双时态数据库。
双时态数据库具备了快照数据库、历史数据库和回滚数据库的特点,存储了现实世界和数据库系统的变更历史。
8)Now:Now的中文意思是当前时间,是一个时间变元,随着当前时间的变化而变化,记录了随时间变化的信息,它的有效值依赖于当前时间。
但在很多应用当中,now 值还能表示‚过去‛和‚未来‛时间,这就是now语义的研究课题,它对于提高时态系统查询效率具有比较重要的意义。
3.时态数据库脚本ATSQL的使用时态数据处理构件根据ATSQL2的语法引入了Now、Beginning和Forever三个变元。
Beginning和Forever分别表示时态数据处理构件所能表示的时间起点和终点。
Now表示当前时间。
每次执行操作时必须使Now绑定到一个固定的值(操作执行的当前时间),这样后继操作才能正常进行。
在下面的ATSQL2中表示的这几个单词是具有具体的含义的。
ATSQL2的数据定义语句包括以下几项功能:创建表、创建视图、删除表、删除视图。
ATSQL2语言和普通SQL语句一样,使用‚create table‛关键字创建数据库表,关键字‚as validtime‛用于指示系统创建具有有效时间支持的数据库表。
1)创建员工表Employee, 是在标准的创建表SQL结尾,加入AS VALIDTIME关键字即可。
CREATE TABLE Employee(ID VARCHAR(30) NOT NULL,NAME VARCHAR(50) NOT NULL)AS VALIDTIME;2) 插入一条记录的ATSQL, 需要通过VALIDTIME PERIOD来指定一个时间范围的,其他部分和标准SQL一样VALIDTIME PERIOD [1981-1985) Insert into Employee values ('112', 'Jack');3) 记录查询: 查询所有记录,在标准SQL前加VALIDTIME关键字即可,查询指定时间段的记录,可以通过PERIOD关键字指定时间区间:VALIDTIME SELECT*FROM Employee;VALIDTIME PERIOD [1983-1986) SELECT * FROM Employee;VALIDTIME PERIOD [1983-forever) SELECT * FROM Employee;4) 向员工表里添加人员信息插入记录前后分别如表 3-1和表 3-2所示VALIDTIME period [ date "2008-1-1" – now)Insert into Staff Values ( 132202, 'Zhang Jinning', '信息部');5) 为employee表创建一个视图,该视图包含所有1999-9-9前离职的工人信息,其中VALIDTIME(R)表示取元组R的有效时间区间:Create view employee_v asValidtime select * from employeeWhere VALIDTIME(employee) before date "1999-9-9";6) 删除员工表的ATSQL和一般的SQL语句一样,如下DROP TABLE Employee;7) 几个查询相关的概念快照查询:查询当前时刻的数据库状态。
对于非时态表(快照数据库),快照查询是一种向上兼容的查询方式,可以查询非时态数据库的数据。
对于时态表(历史数据库或回滚数据库),快照查询截取当前数据库状态,返回当前状态下的查询结果。
顺序查询:顺序查询是一种时态查询,通过关键字VALIDTIME或者TRANSACTIONTIME指示系统执行哪个时间维(有效时间维、事务时间维,或者两个维度)的时态查询。
在这种查询中系统运用时态代数操作自动处理元组的时间戳(有效时间、事务时间,或两者的结合)。
非顺序查询:执行非顺序查询时,系统不再根据时态代数操作解释时间戳,只是把有效时间和事务时间当作普通的用户定义属性对待。
非顺序查询适合特殊的查询需求,例如查询条件涉及状态的变化的查询。
时态归并:时态归并是作用于时态数据库的一种重构操作[23] 。
归并把具有相同属性值并且时间戳相邻或重叠的元组合并成一个元组,归并的过程保持时态数据库的状态不被改变。
4.时态数据的变元时态数据处理构件根据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作为一个标记被替换为语句执行的当前时间。
5.时态数据库的应用介绍(2)--时态数据库之TimeDB前面介绍了TimeDB(/Software/Software.html)是一种结合关系型数据库来实现时间数据库应用的技术,它支持时态数据库脚本:ATSQL2 [SBJS96a,SBJS96b,SBJS98]。
它可以认为是关系数据库的一个前端,把时态数据库语句转换为关系型数据库的脚本进行执行,它的运用场景如下所示。
TimeDB是传统的数据库管理系统的前端软件,应用程序中使用的时态ATSQL语句,通过TimeDB转换后形成标准的SQL语言和操作,这些标准SQL语句和操作传入到后台数据库中操作实际的数据。
TimeDB支持ATSQL2语言和时态模型,实现了时态查询、时态更新、时态视图和部分的时态完整性约束等基本的时态功能。
TimeDB 2.0版本使用Java语言开发,具有平台无关的有点;基于JDBC访问数据库,目前仅支持Oracle、Sybase和IBM的Cloudscape’s JBMS三种数据库,下一版本可能支持Microsoft's Access、SQL Server 7.0、Informix等数据库;具有较友好的用户界面;优化了辅助表的创建过程;具有可以供Java应用程序调用的接口TDBCI,可供Java应用程序调用以执行ATSQL2语句。
TimeDB2.0的程序运行界面如下:TDBCI提供的接口函数如下所示//设置访问参数public boolean setPrefs(String Path, int DBMS, String JDBCDriver, String URL);//初始化/清除执行ATSQL语句所需的表public boolean createDB();public boolean clearDB();//打开或者关闭数据库public boolean openDB(String Login, String Password);public void closeDB();//执行 ATSQL语句public ResultSet execute(String stmt);其中setPrefs是用来设置TimeDB的相关访问参数的,如下所示if (t.setPrefs("C:\\TimeDB 2.2\\", // Path to TimeDB2.0 directory1, // Using Oracle DBMS"oracle.jdbc.driver.OracleDriver", // Oracle's JDBC driver"jdbc:oracle:thin:1521:ORCL")) // URLcreateDB是用来创建一些基础表,以便支持执行ATSQL的,而clearDB则是清除这些表,对数据库而言,只需要开始的时候调用createDB一次即可。