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

业务数据库的日志管理方法、装置、系统与流程

2021-11-09 21:43:00 来源:中国专利 TAG:


1.本发明涉及数据库技术领域,尤其涉及业务数据库的日志管理方法、装置、系统、电子设备、存储介质。


背景技术:

2.日志用于供业务人员查看业务变化以及供开发者理解系统行为。目前的数据库日志只记录数据库执行的sql语句,缺少对sql行为的解析,无法根据数据库日志知晓执行sql语句前后数据库的数据变化情况,业务系统如需要查看数据库的数据变化情况,例如订单金额从10元更新为20元,需要进行业务代码的侵入开发,提高了开发成本和后续的维护成本。


技术实现要素:

3.本发明要解决的技术问题是为了克服现有技术中数据库日志无法记录数据库执行的sql语句的sql行为的缺陷,提供一种业务数据库的日志管理方法、装置、系统、电子设备、存储介质。
4.本发明是通过下述技术方案来解决上述技术问题:
5.第一方面,提供一种业务数据库的日志管理方法,包括:
6.获取针对业务数据库的sql语句,并对所述sql语句进行语义分析,得到语义分析结果;
7.在数据跟踪数据库执行所述sql语句,以使所述数据跟踪数据库与所述业务数据库的数据同步,并确定所述数据跟踪数据库的数据变化信息,其中,所述数据跟踪数据库与所述业务数据库的数据库结构信息相同;
8.根据所述语义分析结果和所述数据变化信息,生成所述业务数据库的sql执行日志。
9.可选地,所述sql语句包括语义单元和sql参数;
10.对所述sql语句进行语义分析,包括:
11.将所述sql语句解析成抽象语法树,所述抽象语法树的各个树节点对应于一个语义单元或者sql参数;
12.根据所述各个树节点生成所述语义分析结果。
13.可选地,根据所述各个树节点生成所述语义分析结果,包括:
14.遍历所述抽象语法树,根据语义单元与语义描述的映射关系,确定对应于所述sql语句的语义单元的语义描述信息,以及根据sql参数与参数描述的映射关系,确定对应于所述sql语句的sql参数的参数描述信息;
15.根据所述语义描述信息和所述参数描述信息生成所述语义分析结果。
16.可选地,执行所述sql语句,包括:
17.将所述sql语句解析成抽象语法树,并根据所述抽象语法树的层级结构递归调用
虚拟机或者解释器,以执行所述sql语句。
18.可选地,确定所述数据跟踪数据库的数据变化信息,包括:
19.在所述数据跟踪数据库执行所述sql语句之前,获取所述数据跟踪数据库的第一快照;
20.在执行所述sql语句之后,获取所述数据跟踪数据库的第二快照;
21.根据所述第一快照与所述第二快照确定所述数据跟踪数据库的数据变化信息。
22.第二方面,提供一种业务数据库的日志管理装置,包括:
23.获取模块,用于获取针对业务数据库的sql语句,并对所述sql语句进行语义分析,得到语义分析结果;
24.执行模块,用于在数据跟踪数据库执行所述sql语句,以使所述数据跟踪数据库与所述业务数据库的数据同步,并确定所述数据跟踪数据库的数据变化信息,其中,所述数据跟踪数据库与所述业务数据库的数据库结构信息相同;
25.生成模块,用于根据所述语义分析结果和所述数据变化信息,生成所述业务数据库的sql执行日志。
26.可选地,所述sql语句包括语义单元和sql参数;
27.所述获取模块包括:
28.解析单元,用于将所述sql语句解析成抽象语法树,所述抽象语法树的各个树节点对应于一个语义单元或者sql参数;
29.生成单元,用于根据所述各个树节点生成所述语义分析结果。
30.可选地,所述生成单元用于:
31.遍历所述抽象语法树,根据语义单元与语义描述的映射关系,确定对应于所述sql语句的语义单元的语义描述信息,以及根据sql参数与参数描述的映射关系,确定对应于所述sql语句的sql参数的参数描述信息;
32.根据所述语义描述信息和所述参数描述信息生成所述语义分析结果。
33.可选地,在执行所述sql语句时,所述执行模块用于:
34.将所述sql语句解析成抽象语法树,并根据所述抽象语法树的层级结构递归调用虚拟机或者解释器,以执行所述sql语句。
35.可选地,在确定所述数据跟踪数据库的数据变化信息时,所述执行模块用于:
36.在所述数据跟踪数据库执行所述sql语句之前,获取所述数据跟踪数据库的第一快照;
37.在执行所述sql语句之后,获取所述数据跟踪数据库的第二快照;
38.根据所述第一快照与所述第二快照确定所述数据跟踪数据库的数据变化信息。
39.本发明的积极进步效果在于:
40.本发明实施例,无需侵入业务数据库,既能生成知晓业务数据库执行sql语句前后的数据变化情况,能够感知sql语句的行为,生成sql执行日志,供运维人员、业务人员查阅,且sql执行日志易于理解。
附图说明
41.图1是本发明一实例性实施例提供的一种业务数据库的日志管理方法的流程图;
42.图2a为本发明一实例性实施例提供的一种业务数据库的日志管理过程中生成的抽象语法树的示意图;
43.图2b为本发明一实例性实施例提供的一种用于展示业务数据库的日志管理方法的sql执行日志的用户界面的示意图;
44.图3是本发明一实例性实施例提供的一种业务数据库的日志管理装置的模块示意图;
45.图4是本发明一实例性实施例提供的一种业务数据库的日志管理系统的模块示意图;
46.图5是本发明一示例实施例示出的一种电子设备的结构示意图。
具体实施方式
47.下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。
48.图1是本发明一实例性实施例提供的一种业务数据库的日志管理方法的流程图,该日志管理方法可以对一个业务数据库的日志进行管理,也可以对多个业务数据库的日志进行管理,参见图1,该日志管理方法包括以下步骤:
49.步骤101、获取针对业务数据库的sql语句,并对sql语句进行语义分析,得到语义分析结果。
50.该sql语句用于指示对业务数据库进行操作。对业务数据库的操作可以但不限于包括:对数据库对象(库、表、列、索引)的操作;对数据库记录的操作等。业务数据库存储有多个sql语句,基于用户对业务应用程序的业务操作请求,业务数据库会确定与业务操作请求对应的sql语句,并执行该sql语句,以完成与业务操作请求相对应的操作,例如,更改数据表中某个字段的数值。
51.本发明实施例中,在业务数据库执行sql语句的情况下,获取该sql语句,并对sql语句进行语义分析,得到的语义分析结果用于生成业务数据库的sql执行日志。
52.在一个实施例中,可以但不限于通过mybatis(拦截器)插件获取针对业务数据库的sql语句。
53.在一个实施例中,在下述数据跟踪数据库存储多个sql语句以及sql语句与操作请求的映射关系,获取业务数据库接收到的业务操作请求,并根据sql语句与操作请求的映射关系,确定对应于业务操作请求的sql语句。
54.通常一条sql语句包括多个语义单元和至少一个sql参数。语义单元包括sql语句中的“select”、“from”、“where”、“orderby”等关键字、运算符或数据库字段、数据库表等满足语义规则的字词。
55.在一个实施例中,通过抽象语法树(ast)对sql语句进行语义分析,抽象语法树是sql语句结构的树形表示,有利于理解sql语句的语法结构层次,一条sql语句对应一个抽象语法树。
56.举例来说,假设步骤101获取的sql语句如下:
57.update order
58.set status=?,version=version 1
59.where code=?and company=?
60.将上述sql语句进行解析,生成的抽象语法树参见图2a所示,图中包括19个树节点,每个树节点对应sql语句的一个语义单元或者sql参数,分别为:update、order、set、tatus、=、version、1、where、code、and、company;参数1节点对应set status=?中的“?”sql参数,参数2节点对应where code=?中的“?”sql参数,参数3节点对应company=?中的“?”sql参数。
61.语义分析结果用于生成业务数据库的sql执行日志,为了便于用户理解sql执行日志,使用通俗易懂的语言描述语义分析结果。
62.在一个实施例中,预先定义语义单元与语义描述的映射关系,以及sql参数与参数描述的映射关系,语义描述与参数描述均采用通俗易懂的方式描述。语义单元与语义描述的映射关系,以及sql参数与参数描述的映射关系,可根据实际需求自行设置。语义描述可以但不限于包括对语义单元解释说明、对字段配置的数据处理规则描述、各字段之间的关联关系。
63.下表实例性示出了语义单元与语义描述的映射关系:
64.数据库字段语义单元语义描述so订单表ordercoder订单编码orderstatus订单状态orderamount订单金额goodreceiveraddress详细地址
65.根据上表可以知道“so”数据库字段语义单元的语义描述为订单表,“orderamount”数据库字段语义单元的语义描述为订单金额。
66.映射关系还可以表示如下:
67.字符串或数值字面量:直接返回对应的java基本对象;
68.加、减、乘、除运算符:对所有子节点递归调用解释器,然后对所有子节点解析获得的值进行加、减、乘、除操作;
69.小括号(...):小括号内表示更先执行的运算,例如(a b)*c先执行a与b的加法;
70.问号?:表示取对应顺位的sql参数,该节点直接返回;
71.列名:在update语句中,取当前处理快照的该列值;
72.函数:支持now、ifnull、concat等常用函数,以及insert语句使用的values函数;
73.比较运算符(等于、不等于、大于、小于、大于等于、小于等于):本实现仅支持左侧为列名,右侧为表达式的比较运算,例如age>=14。对右子节点递归调用解释器,然后返回生成的查询条件(criteria);
74.逻辑运算符(and与or):对所有子节点递归调用解释器,然后对所有子节点解析获得查询条件组合为逻辑组合后的查询条件并返回(criteria);
75.set子句:update的set子句中每个赋值表达式左节点是列名,右节点为表达式。对右节点递归调用解释器,整理出每个列名更新后的值;
76.where子句:update的where子句只有一个子节点,对该子节点递归调用解释器,获得用于匹配快照记录的查询条件;
77.其中,语义单元与语义描述的映射关系,以及sql参数与参数描述的映射关系可以通过列表的形式表征,也可以通过yaml(一种用来表达数据序列化的格式)配置文件表征,本发明对映射关系的表征方式不作特别限定。
78.在生成语义分析结果时,遍历抽象语法树,根据语义单元与语义描述的映射关系,确定对应于sql语句的语义单元的语义描述信息,以及根据sql参数与参数描述的映射关系,确定对应于sql语句的sql参数的参数描述信息;根据语义描述信息和参数描述信息生成语义分析结果。
79.其中,sql参数的取值根据步骤102中sql语句的执行结果而确定。
80.步骤102、在数据跟踪数据库执行sql语句,确定数据跟踪数据库的数据变化信息。
81.其中,数据跟踪数据库可以但不限于采用mongodb数据库。数据跟踪数据库与业务数据库的数据库结构信息相同,数据库结构信息包括数据库名、数据表名和数据表中的字段。
82.通过在数据跟踪数据库执行sql语句,可以实现数据跟踪数据库与业务数据库的数据同步。
83.由于无法获取业务数据库中sql的执行情况,也即无法获取执行sql语句前后业务数据库的数据变化信息,本发明实施例中,设置一个数据跟踪数据库,若业务数据库中执行sql语句,数据跟踪数据库也执行相同的sql语句,从而实现两个数据库的数据同步,通过分析数据跟踪数据库的数据变化情况,即可得知业务数据库的数据变化情况。
84.在一个实施例中,基于虚拟机或者解释器执行sql语句。在虚拟机或者解释器无法直接执行原始sql语句的情况下,将sql语句解析成抽象语法树,根据抽象语法树的层级结构递归调用虚拟机或者解释器,实现sql语句执行。举例来说,以sql解释器where子句解析的查询条件匹配数据跟踪数据库的快照记录,并根据抽象语法树确定的列名和更新值关系更新快照,实现sql语句执行。
85.下面以insert语句为例,介绍sql虚拟机或解释器对ast执行的过程:
86.1.遍历ast中values子句的每个表达式;
87.2.解析表达式获得对应的结果;
88.3.匹配结果和ast中的列名(字段)并整理输出。
89.下面以update语句为例,介绍sql虚拟机或解释器对ast执行的过程:
90.1.对ast中的where子句解析,匹配数据跟踪数据库的数据快照;
91.2.获得的数据快照作为上下文;
92.3.在上下文中遍历set子句中的每个赋值表达式;
93.4.解析赋值表达式获得对应列赋值的结果;
94.5.更新数据跟踪数据库的快照,并整理更新前和更新后的值并输出。
95.在一个实施例中,数据跟踪数据库用于保存和更新数据记录的快照。在数据跟踪数据库执行sql语句之前,获取数据跟踪数据库的第一快照,在执行sql语句之后,获取数据跟踪数据库的第二快照,根据第一快照与第二快照确定数据跟踪数据库的数据变化信息。
96.其中,数据变化信息包括数据跟踪数据库更新前数据、更新后数据、数据变更说明,数据变化信息表征sql语句的行为。
97.步骤103、根据语义分析结果和数据变化信息,生成业务数据库的sql执行日志。
98.在一个实施例中,生成sql执行日志的过程中,确定sql语句涉及的字段是否配置了值转换器,若设置了值转换器,则对字段数值进行转换并替代,例如,若为so(订单)表的orderstatus(订单状态)字段配置了1010

>待付款,1020

>已付款转换器,则生成sql执行日志时需进行数值转换和替代,也即当字段orderstatus的取值为1010时,将sql执行日志中的描述替换为“待付款”;当字段orderstatus的取值为1020时,将sql执行日志中的描述替换为“已付款”。结合语义分析结果,sql执行日志记录的sql行为描述例如可以是“订单状态设置为待付款”。
99.值转换器的配置方式有以下几种:
100.直接配置映射,例如1010

>待付款;1020

>已付款;
101.调用软件应用中的转换方法;
102.指向数据库等持久化容器中的映射关系配置。
103.在一个实施例中,生成sql执行日志时,可以借助预先配置的日志模板,分别将语义分析结果和数据变化信息填入模板相应的位置处,以生成sql执行日志。根据不同的场景使用不同的模板。
104.举例来说,如果该字段的数据存在变更,则根据字段在配置中的名称、更新前数据、更新后数据,套用模板例如可以是:字段<字段名>由<更新前数据>变为<更新后数据>,生成的sql执行日志包括“字段“订单金额”由10.00变为5.00”这样的描述。
105.如果该字段是第一次写入,即更新前数据为空,只存在更新后数据,则套用模板字段<字段名>设置为<更新后数据>,生成的sql执行日志包括
““
订单标签”字段设置为vip”这样的描述。
106.由于数据跟踪数据实现了与业务数据库的数据同步,在一个实施例中,若业务数据库出现故障,可以借助跟踪数据库对业务数据库进行数据复原。
107.在一个实施例中,sql执行日志可以与全链路日志相结合。具体的,判断当前业务数据库是否有全链路信息,如果有的话,将sql执行日志与全链路信息进行整合,得到全链路日志。还可以建立sql执行日志与全链路日志的关联关系,例如通过链接或者日志id建立两者的关联关系,以方便互相查询,全链路信息、数据库的数据变化情况。
108.在一个实施例中,还提供显示界面,参见图2b,可以但不限于使用springmvc开发,封装出查询“面向业务人员的sql执行日志”的接口,用户可以将“操作时间”、“操作人”作为查询条件,查询对应的sql执行日志(图中的操作日志)。
109.本发明实施例,无需侵入业务数据库,既能生成知晓业务数据库执行sql语句前后的数据变化情况,能够感知sql语句的行为,生成sql执行日志,供运维人员、业务人员查阅,且sql执行日志易于理解。
110.与前述业务数据库的日志管理方法实施例相对应,本发明还提供了业务数据库的日志管理装置的实施例。
111.图3是本发明一实例性实施例提供的一种业务数据库的日志管理装置的模块示意图,该日志管理装置包括:
112.获取模块31,用于获取针对业务数据库的sql语句,并对所述sql语句进行语义分析,得到语义分析结果;
113.执行模块32,用于在数据跟踪数据库执行所述sql语句,以使所述数据跟踪数据库
与所述业务数据库的数据同步,并确定所述数据跟踪数据库的数据变化信息,其中,所述数据跟踪数据库与所述业务数据库的数据库结构信息相同;
114.生成模块33,用于根据所述语义分析结果和所述数据变化信息,生成所述业务数据库的sql执行日志。
115.可选地,所述sql语句包括语义单元和sql参数;
116.所述获取模块包括:
117.解析单元,用于将所述sql语句解析成抽象语法树,所述抽象语法树的各个树节点对应于一个语义单元或者sql参数;
118.生成单元,用于根据所述各个树节点生成所述语义分析结果。
119.可选地,所述生成单元用于:
120.遍历所述抽象语法树,根据语义单元与语义描述的映射关系,确定对应于所述sql语句的语义单元的语义描述信息,以及根据sql参数与参数描述的映射关系,确定对应于所述sql语句的sql参数的参数描述信息;
121.根据所述语义描述信息和所述参数描述信息生成所述语义分析结果。
122.可选地,在执行所述sql语句时,所述执行模块用于:
123.将所述sql语句解析成抽象语法树,并根据所述抽象语法树的层级结构递归调用虚拟机或者解释器,以执行所述sql语句。
124.可选地,在确定所述数据跟踪数据库的数据变化信息时,所述执行模块用于:
125.在所述数据跟踪数据库执行所述sql语句之前,获取所述数据跟踪数据库的第一快照;
126.在执行所述sql语句之后,获取所述数据跟踪数据库的第二快照;
127.根据所述第一快照与所述第二快照确定所述数据跟踪数据库的数据变化信息。
128.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
129.图4是本发明一实例性实施例提供的一种业务数据库的日志管理系统的模块示意图,该日志管理系统包括数据跟踪数据库和上述任一项提供的日志管理装置。数据跟踪数据库可以但不限于采用mongodb数据库,日志管理装置的相关之处参见上述实施例的部分说明,此处不再赘述。需要说明的是,日志管理装置可以部署于独立的服务器上,也可以与数据跟踪数据库部署于同一台服务器上。
130.图5是本发明一示例实施例示出的一种电子设备的结构示意图,示出了适于用来实现本发明实施方式的示例性电子设备50的框图。图5显示的电子设备50仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
131.如图5所示,电子设备50可以以通用计算设备的形式表现,例如其可以为服务器设备。电子设备50的组件可以包括但不限于:上述至少一个处理器51、上述至少一个存储器52、连接不同系统组件(包括存储器52和处理器51)的总线53。
132.总线53包括数据总线、地址总线和控制总线。
133.存储器52可以包括易失性存储器,例如随机存取存储器(ram)521和/或高速缓存存储器522,还可以进一步包括只读存储器(rom)523。
134.存储器52还可以包括具有一组(至少一个)程序模块524的程序工具525(或实用工具),这样的程序模块524包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
135.处理器51通过运行存储在存储器52中的计算机程序,从而执行各种功能应用以及数据处理,例如上述任一实施例所提供的方法。
136.电子设备50也可以与一个或多个外部设备54(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(i/o)接口55进行。并且,模型生成的电子设备50还可以通过网络适配器56与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器56通过总线53与模型生成的电子设备50的其它模块通信。应当明白,尽管图中未示出,可以结合模型生成的电子设备50使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、raid(磁盘阵列)系统、磁带驱动器以及数据备份存储系统等。
137.应当注意,尽管在上文详细描述中提及了电子设备的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
138.本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一实施例所提供的方法。
139.虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
再多了解一些

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

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

相关文献