一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于值日志系统的数据修改历史的查询方法和系统与流程

2022-02-22 02:42:12 来源:中国专利 TAG:


1.本发明涉及值日志技术领域,尤其是一种基于值日志系统的数据修改历史的查询方法和系统。


背景技术:

2.包括传统数据库在内的各种数据处理系统提供的数据查询功能,均只支持查询用户当前可见的最新记录查询,这是由其存储方式决定的。在此类数据处理系统中,当用户发起数据修改请求,数据处理系统会将旧记录写入回滚段(如oracle)或者保留在b树(如postgresql)中,然后在b树中插入修改后的新记录。此时如果有其他的用户同时进行该数据的查询,此类数据处理系统将根据可见性判断返回合适的记录。但是,由于回滚段和b树中保存的历史数据时长是有限的(oracle会自动回收回滚段空间,postgresql会通过vacuum机制清理历史数据),回滚段或者b树中的历史版本数据一旦被回收,意味着整个系统只有最新版本的数据被保存,用户将不能查找到该数据修改前的值。


技术实现要素:

3.本发明所要解决的技术问题在于,提供一种基于值日志系统的数据修改历史的查询方法和系统,能够持久化数据的所有历史版本,可查询任意记录的所有历史版本,拓宽了数据库查询的定义,可以为用户提供直观的数据变化过程。
4.为解决上述技术问题,本发明提供一种基于值日志系统的数据修改历史的查询方法,包括如下步骤:
5.(1)基于值日志技术的数据库/kv数据处理系统中的工作线程/进程接收用户的数据查询请求;
6.(2)工作线程/进程对用户的数据查询语句进行解析;
7.(3)工作线程/进程根据数据查询语句解析的结果,确定查询数据的范围;
8.(4)工作线程/进程基于步骤(3)确定的查询数据的范围并检索索引找到符合条件的所有记录;
9.(5)工作线程/进程将数据检索的结果返回客户端。
10.优选的,步骤(3)中,确定查询数据的范围具体包括如下步骤:
11.(31)当用户的查询请求不包含查询数据修改历史的语法成分时,查询范围就确定为符合查询条件的最新的可见版本;
12.(32)当用户的查询请求包含查询数据修改历史的语法成分时,查询范围的确定典型的包括如下几种情况或者它们的组合:
13.(a)基于时间范围进行查询;
14.(b)基于lsn范围进行查询;
15.(c)基于偏移量范围进行查询。
16.优选的,步骤(a)中,基于时间范围进行查询具体为:用户在查询请求中指定起始
时间和终止时间;当不指定起始时间时,表示查询从建库开始到指定终止时间期限内的所有符合条件的数据历史记录;不指定终止时间时,表示查询从指定起始时间到现在所有可见的数据历史记录;若都没有指定,则表示查询所有可见的数据的历史记录;当要支持基于时间范围进行查询时,需要在索引记录中保留数据插入时的系统时间信息。便于快速找到符合指定时间范围的物理记录;如果对时间精度和性能要求不高,也可以考虑在只在值日志文件的块头/块尾写下系统时间值,这样就需要先基于索引找到所有的物理记录,然后根据物理记录所属数据块中写下的系统时间来判断物理记录是否在指定的时间范围内。
17.优选的,步骤(b)中,基于lsn范围进行查询具体为:包括数据库/kv系统在内的各种数据处理系统一般对每个记录都有一个lsn(日志序列号)标志,该lsn是单调递增,随着数据库上操作的增加而不断递增。和基于时间范围进行查询类似,用户指定起始lsn和终止lsn来限定要查询的数据修改历史记录;当不指定起始lsn时,表示查询从建库开始到指定终止lsn范围内的所有符合条件的数据历史记录;不指定终止lsn时,表示查询从指定起始lsn到现在所有可见的数据历史记录;若都没有指定,则表示查询所有可见的数据的历史记录。和基于时间范围进行查询类似,基于lsn范围进行查询时,也需要在索引记录中保留数据插入时的lsn值信息。
18.优选的,步骤(c)中,基于偏移量范围进行查询具体为:基于值日志技术的数据处理系统由于数据是不断追加产生,因此偏移量的大小也直接体现了数据的新旧程度。用户指定起始偏移量和终止偏移量来限定要查询的数据修改历史记录;当不指定起始偏移量时,表示查询从建库开始到指定终止偏移量范围内的所有符合条件的数据历史记录;不指定终止偏移量时,表示查询从指定起始偏移量到现在所有可见的数据历史记录;若都没有指定,则表示查询所有可见的数据的历史记录。基于偏移量范围进行查询时,要求在索引记录中保留数据追加到值日志文件时的偏移地址信息。
19.相应的,一种基于值日志系统的数据修改历史的查询系统,包括:接受请求模块:该模块用于接收用户的数据查询请求;
20.操作解析模块:该模块负责用户的数据查询语句的解析;
21.查询范围确定模块:该模块根据数据查询语句解析的结果,确定查询数据的范围;
22.数据检索模块:该模块利用索引和基于查询范围确定模块判定的范围来检索到符合条件的所有记录;
23.结果返回模块:该模块将检索到符合条件的数据返回给客户端。
24.优选的,数据查询语句解析的结果为下面两种情况:
25.(a)当用户的查询请求不包含查询数据修改历史的语法成分时,查询范围就确定为符合查询条件的最新的可见版本;
26.(b)当用户的查询请求包含查询数据修改历史的语法成分时,查询范围的确定典型的包括如下几种情况或者它们的组合:基于时间范围进行查询、基于lsn范围进行查询或基于偏移量范围进行查询。
27.优选的,基于时间范围进行查询具体为:用户可以在查询请求中指定起始时间和终止时间。当不指定起始时间时,表示查询从建库开始到指定终止时间期限内的所有符合条件的数据历史记录。不指定终止时间时,表示查询从指定起始时间到现在所有可见的数据历史记录。若都没有指定,则表示查询所有可见的数据的历史记录。需要注意的是,当要
支持基于时间范围进行查询时,需要在插入记录时,在索引记录中保留数据插入时的系统时间信息,这样便于快速找到符合指定时间范围的物理记录。(如果对时间精度和性能要求不高,也可以考虑在只在值日志文件的块头/块尾写下系统时间值,这样就需要先基于索引找到所有的物理记录,然后根据物理记录所属数据块中写下的系统时间来判断物理记录是否在指定的时间范围内)。
28.优选的,基于lsn范围进行查询具体为:包括数据库/kv系统在内的各种数据处理系统一般对每个记录都有一个lsn(日志序列号)标志,该lsn是单调递增,随着数据库上操作的增加而不断递增。和基于时间范围进行查询类似,用户可以指定起始lsn和终止lsn来限定要查询的数据修改历史记录。当不指定起始lsn时,表示查询从建库开始到指定终止lsn范围内的所有符合条件的数据历史记录。不指定终止lsn时,表示查询从指定起始lsn到现在所有可见的数据历史记录。若都没有指定,则表示查询所有可见的数据的历史记录。和基于时间范围进行查询类似,基于lsn范围进行查询时,也需要在插入记录时,在索引记录中保留数据插入时的lsn值信息。
29.优选的,基于偏移量范围进行查询具体为:基于值日志技术的数据处理系统由于数据是不断追加产生,因此偏移量的大小也直接体现了数据的新旧程度。用户可以指定起始偏移量和终止偏移量来限定要查询的数据修改历史记录。当不指定起始偏移量时,表示查询从建库开始到指定终止偏移量范围内的所有符合条件的数据历史记录。不指定终止偏移量时,表示查询从指定起始偏移量到现在所有可见的数据历史记录。若都没有指定,则表示查询所有可见的数据的历史记录。在值日志系统中,插入记录时已经在索引记录中已经存放了数据追加到值日志文件时的偏移地址信息。
30.本发明的有益效果为:在基于值日志技术的数据处理系统中,用户数据更新(包括插入、删除、修改)操作,系统都将其转化为插入操作,并写入到数据文件中,其数据写入数据文件的时间随着偏移量的递增而增加,由于每一个版本的数据都得以持久化,这为查询数据修改历史奠定了基础;本发明是在值日志系统的基础上,实现查询数据修改历史以及基于指定时间范围或者偏移量范围或者lsn范围的数据修改历史查询功能;基于值日志系统能够持久化数据的所有历史版本,可查询任意记录的所有历史版本,拓宽了数据库查询的定义,可以为用户提供直观的数据变化过程。
附图说明
31.图1为本发明的方法流程示意图。
32.图2为本发明的系统结构示意图。
具体实施方式
33.如图1所示,一种基于值日志系统的数据修改历史的查询方法,包括如下步骤:
34.(1)基于值日志技术的数据库/kv数据处理系统中的工作线程/进程接收用户的数据查询请求;
35.(2)工作线程/进程对用户的数据查询语句进行解析;
36.(3)工作线程/进程根据数据查询语句解析的结果,确定查询数据的范围;
37.(4)工作线程/进程基于步骤(3)确定的查询数据的范围并检索索引找到符合条件
的所有记录;
38.(5)工作线程/进程将数据检索的结果返回客户端。
39.如图2所示,一种基于值日志系统的数据修改历史的查询系统,包括:接受请求模块:该模块用于接收用户的数据查询请求;
40.操作解析模块:该模块负责用户的数据查询语句的解析;
41.查询范围确定模块:该模块根据数据查询语句解析的结果,确定查询数据的范围;
42.数据检索模块:该模块利用索引和基于查询范围确定模块判定的范围来检索到符合条件的所有记录;
43.结果返回模块:该模块将检索到符合条件的数据返回给客户端。
44.实施例一:
45.下述实施例假定历史数据查询的关键字为allversions(表示要查询修改历史记录)、versiontime(表示指定时间范围),用between和and限定查询的版本范围。
46.在值日志系统中存在一张表account的列信息如表1所示:
47.表1 account表的列信息
48.列名列类型列含义idvarchar(20)账户id,主键,索引中含有记录插入时的系统时间信息namevarchar(20)账户姓名balanceint账户余额
49.表account中有一条记录操作历史如表2所示:
50.表2 account表的数据操作历史
51.操作时间操作类型对应sql2021-07-01 13:00:00插入insert into account values('a001','张三',100);2021-07-15 14:00:00更新update account set balance=80;2021-07-16 17:30:00更新update account set balance=150;2021-08-16 13:30:00删除delete from account where id='a001';
52.在以上假定的前提下,该方法查询数据修改历史的具体步骤为:
53.s101:用户在客户端执行下面的查询语句:
54.select*from account with allversions
55.versiontime between'2021-07-01 10:00:00.000'and'2021-07-16 18:00:00.000'
56.where id='a001';
57.数据库/kv等数据处理系统接收到查询请求。
58.s102:工作线程/进程对用户的数据查询语句进行解析。
59.s103:工作线程/进程根据s102中数据查询语句解析的结果,确定查询数据的范围。查询语句有历史数据查询关键字allversion,表示要查询数据修改历史,且带有versiontime关键字,表示是根据时间来限定历史版本的范围,对历史版本范围要求为时间在'2021-07-01 10:00:00.000'到'2021-07-16 18:00:00.000'之间。
60.s104:工作线程/进程根据主键进行检索,查询语句符合条件的数据记录为:id='a001'且索引记录时间戳是在'2021-07-01 10:00:00.000'到'2021-07-15 18:00:00.000'
之间的记录,查询结果如表3所示:
61.表3 account表数据修改历史查询结果
62.idnamebalanceversiontime'a001''张三'1502021-07-16 17:30:00'a001''张三'802021-07-15 14:00:00'a001''张三'1002021-07-01 13:00:00
63.s105:工作线程/进程将上面步骤中检索到的数据返回给客户。
64.实施例二:
65.本实施案例也是基于案例一的假定前提下,从实现值日志系统数据修改历史查询功能流程的模块角度进行示例演示。
66.s201:用户在客户端执行下面的查询语句,接受请求模块接收查询请求:
67.select*from account with allversions where id='a001';
68.s202:操作解析模块对用户的数据查询语句进行解析。
69.s203:查询范围确定模块根据数据查询语句解析的结果,确定查询数据的范围。查询语句有历史数据查询关键字allversions,且没限定任何范围,表示查询所有的历史修改记录。
70.s204:数据检索模块根据主键进行检索,查询语句符合条件的数据记录为id='a001'的所有历史修改记录,查询结果如表4所示:(此处'-'表示记录已删除,可以用其他表现形式来标记):
71.表4 account表数据修改历史查询结果
[0072][0073][0074]
s205:结果返回模块将上面步骤中检索到的数据返回给客户端。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献