CN111752804A - 一种基于数据库日志扫描的数据库缓存系统 - Google Patents
一种基于数据库日志扫描的数据库缓存系统 Download PDFInfo
- Publication number
- CN111752804A CN111752804A CN202010607228.2A CN202010607228A CN111752804A CN 111752804 A CN111752804 A CN 111752804A CN 202010607228 A CN202010607228 A CN 202010607228A CN 111752804 A CN111752804 A CN 111752804A
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- queue
- database
- access
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3072—Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种基于数据库日志扫描的数据库缓存系统,包括数据库日志扫描子系统、表数据抓取子系统、表关联分析子系统、缓存因子分析子系统、缓存失效分析子系统、sql引擎子系统和数据访问接口;本发明的能够有效的降低应用对数据库的访问,大部分的查询操作都可以从缓存中直接返回,既提高了数据访问性能,同时也降低了数据库的负载。
Description
技术领域
本发明涉及关系型数据库技术领域,尤其涉及一种基于数据库日志扫描的数据库缓存系统。
背景技术
随着互联网的飞速发展,数据变得越来越重要,关系型数据库作为传统的数据存储载体正在得到广泛的应用,几乎各行各业都会将行业数据存储到数据库中。应用规模不断扩大,访问用户数量一直在增加,存储的数据越来越多,数据访问越发频繁,对数据库性能的要求越来越大,在一些大规模的数据应用中,数据库成为了性能瓶颈,无法支撑应用访问。为了解决这个问题,出现了众多的性能解决方案,基本的思路是采用数据集群和负载均衡方式分担应用访问压力,但是这种方式有着如下的缺点:
(1)集群方式构建复杂,对业务人员要求较高,不同的数据库厂商支持的集群方式各不相同,导致业务人员维护成本增加。
(2)硬件和软件成本增加,直接导致系统的研发和维护成本增加。。
(3)据统计,业务应用的数据访问中,超过9成都是数据查询访问,因此数据库访问压力集中体现在数据查询访问的压力。每当进行一个数据库查询时关系型数据库系统都需要去访问磁盘从磁盘中获取数据返回给应用。磁盘访问速度相对较慢,大量数据访问同时到来时磁盘IO就会成为瓶颈。所以如果能够将访问频繁的数据缓存到内存中就可以有效的解决这个问题,避免了采用数据集群方式。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种基于数据库日志扫描的数据库缓存系统,该系统将频繁访问的数据缓存到内存中,并且通过数据库日志扫描捕捉数据库变化,及时更新缓存。数据应用查询数据时就将缓存的数据返回给应用,既加速了数据访问效率,同时也降低了数据库负载。
为了实现上述目的,本发明提供一种基于数据库日志扫描的数据缓存系统,包括数据库日志扫描子系统、表数据抓取子系统、表关联分析子系统、缓存因子分析子系统、缓存失效分析子系统、sql引擎子系统和数据访问接口;
所述系统缓存的是数据库中的每一张表的数据,简称为数据表;
其中,数据库日志扫描子系统、表数据抓取子系统、表关联分析子系统、缓存因子分析子系统、缓存失效分析子系统、sql引擎子系统构成了数据库缓存系统的服务端,数据访问接口构成了数据库缓存系统的客户端;
所述数据库日志扫描子系统用于,扫描数据库重做日志,从数据库重做日志中捕捉数据变化,将数据变化通知给表数据抓取子系统;
所述缓存因子分析子系统用于,分析表访问的关联关系,根据每张表的访问频率、和其他表被访问的关联关系,以及表数据内容,计算表的缓存因子;缓存因子值越大,表被缓存的可能性越高。
所述表数据抓取子系统用于,根据表的缓存因子从后台数据库抓取数据,将数据缓存到内存中,每张表以表名字为索引,表的所有记录值为内容存放;
所述表关联分析子系统用于,对数据表的访问情况进行统计分析,分析表之间访问顺序以及访问的关联关系,形成数据表之间的关联因子;
所述缓存失效分析子系统用于,针对缓存未命中的情况对缓存因子进行调整,提升缓存命中效率;
所述sql引擎子系统用于,对应用的sql访问请求进行解析,解析出sql语句的操作以及操作对应的对象,然后根据解析结果进行相应的处理,并将处理结果返回给应用;
所述数据访问接口用于业务应用访问数据库,当业务应用调用数据访问接口时,数据访问接口将访问请求发送给所述系统的服务端,并且将服务端返回的接口返回给业务应用。
所述数据库日志扫描子系统执行如下步骤:
步骤a1,建立修改缓存队列ModifyCacheQueue,修改缓存队列中的每一个数据修改项代表了一条数据的修改;
步骤a2,扫描数据库重做日志,从中捕捉出数据变化的sql语句,并且对sql语句进行sql语义解析,分析出sql语句的操作(insert/update/delete)、sql语句操作的数据表、sql语句操作的字段、每个字段的内容;数据库重做日志包含的数据变化以sql语句形式存在,例如insert into test(id)values(1).对sql语句进行解析,解析出表名为test,操作为insert,列名为id,列值是1;
步骤a3,将解析后的变化数据存放到ModifyCacheQueue中;
步骤a4,将变化数据通知数据抓取子系统。
步骤a1中,修改缓存队列ModifyCacheQueue包含的变更数据元素具体包括:数据库实例名、数据库会话id、会话执行程序名、会话所在机器地址、变更表的表名、变更操作、变更记录的字段名列表、变更记录的变更前字段值、变更记录的变更后字段值、数据库事务ID、数据变更时间。
所述表关联分析子系统执行如下步骤:
步骤b1,建立一个数据表访问顺序队列TabAccessQueue,数据表访问顺序队列TabAccessQueue是一个先进先出队列,按照业务应用访问数据表的顺序将访问的表的信息增加到业务表访问顺序队列TabAccessQueue中;当业务应用访问一张数据表T时,将在TabAccessQueue的末尾增加一个元素,元素的内容包含了表T的名称以及访问时间;如果超出了业务表访问顺序队列TabAccessQueue的最大数量限制,则将业务表访问顺序队列TabAccessQueue的首元素移出队列;一般队列元素最多保持2000个;
步骤b2,建立一个哈希表TabRelation,哈希表的key是每张数据表的表名,value就是数据表对应的关联因子值;
步骤b3,扫描数据表访问顺序队列TabAccessQueue,设定TabAccessQueue中一共有C张表,数据表T和另一张数据表F的关联因子的计算方式如下,表T和表F的关联因子为RT-F,访问表T和访问表F之间间隔了X张表,因此RT-F就是1/X;表T的总体关联因子就是(∑RT-F*fF)/C,将计算结果放入到哈希表TabRelation中;其中,fF是表T的缓存因子值,将在下文介绍;
步骤b4,根据配置,间隔一定时间(间隔时间可配置,缺省为1秒)对数据表访问顺序队列TabAccessQueue进行扫描,计算表T和其它表的关联因子;
步骤b1中,数据表访问顺序队列TabAccessQueue中每个元素的格式为:数据表的表名,访问时间;
步骤b2中,哈希表TabRelation的key是每张数据表的表名,value就是数据表对应的关联因子值。
所述缓存因子分析子系统执行如下步骤:
步骤c1,建立一个数据表元信息缓存队列TabMetaQueue,数据表元信息缓存队列TabMetaQueue中包含了所有业务应用访问的数据表的元信息;
步骤c2,扫描数据表元信息缓存队列TabMetaQueue,获得每张数据表的查询频率、更新频率和表的行数,设定表T的查询频率为QT,更新频率为UT,表T的行数为NORT;
步骤c3,扫描哈希表TabRelation,获得队列TabMetaQueue中每张表和其它表的关联因子值;
步骤c4,计算每张表的缓存因子,将缓存因子值更新到数据表元信息缓存队列TabMetaQueue相应的元素中。
步骤c1中,数据表元信息缓存队列TabMetaQueue中的元信息包括:表名、表最新一次访问时间、表的缓存命中位、表的查询频率,表的更新频率、表的缓存因子值、表缓存失效位、表数据缓存内容地址;
步骤c4中,缓存因子的计算方式如下,数据表T的缓存因子为fT,因子fT和如下的参数有关:表T的数据行数NORT,表T的查询频率QT,表T的更新频率UT,业务表一共有C张,表T和表F的关联关系RT-F,fT计算公式如下:
fT=100*QT+100/UT+100/NORT+(∑RT-F*fF)/C。
所述表数据抓取子系统执行如下步骤:
步骤d1,根据表的缓存因子对TabMetaQueue队列进行排列,按照缓存因子从大到小排列;
步骤d2,按照缓存的顺序,根据当前内存总量,依次抓取表的数据,每张表的数据存储成为二维数组,二维数组中一行代表了一个数据库记录的值,一列代表了数据库中一个字段的值;
步骤d3,以每张缓存表的表名的哈希码作为索引,每张缓存表缓存的数据内容作为值建立缓存哈希表;
步骤d4,读取数据库日志扫描子系统发送的数据变化信息,将变化信息更新到缓存中,同时将相应的元信息的缓存失效位置更新为0;
步骤d2中,表数据抓取子系统存储数据的二维数组的特征为:第一维代表了一行,第二维代表了一列,每行的格式是:4字节行数据长度,2字节列个数;每列的内容格式为1字节内容类型,2字节内容长度,后面跟着字段内容;内容类型包括字符串、数字、日期、二进制数据、大容量文本数据和大容量二进制数据;
步骤d3中,表数据的索引子系统特征为:表的每一列都有一个对应的哈希表,给每一列的内容计算SHA-1哈希,哈希值作为哈希表的索引,哈希表的内容就是所在行缓冲数据的首地址。
所述缓存失效分析子系统执行如下步骤:
步骤e1,扫描数据表元信息缓存队列TabMetaQueue,对于每张表T,如果T的缓存命中位为0,则增加表T的缓存因子,增加方式为将fT更新为fT+10;
步骤e2,扫描数据表元信息缓存队列TabMetaQueue,对于每张表T,获得T最近一次访问时间,如果T在X1(一般取值为30)分钟内没有被应用访问时,减少表T的缓存因子,减少方式为将fT更新为fT-10*Int,其中,Int是未被访问的空闲时间间隔/缓存系统运行总时间。
所述sql引擎子系统执行如下步骤:
步骤f1,解析业务应用访问数据库的sql语句,获得访问的表的表名、数据库访问操作;
步骤f2,在数据表访问顺序队列TabAccessQueue中增加一条记录,更新数据表元信息缓存队列TabMetaQueue中表最近一次访问时间;
步骤f3,对于查询操作,首先更新表的查询频率QT,然后查看数据表元信息缓存队列TabMetaQueue中是否有对应的缓存;如果有,则将缓存的数据返回给应用;如果缓存未命中,则从数据库中查询数据返回给应用,同时将数据表元信息缓存队列TabMetaQueue中表的缓存命中位置为0;
步骤f4,对于更新操作,更新表的更新频率UT,将数据表元信息缓存队列TabMetaQueue中对应元素的缓存失效位置更新为1,同时将sql语句交给数据库执行。所述数据访问接口是一个客户端接口,它对业务的数据库访问进行了封装,将数据库访问发给所述系统,同时接收所述系统发送的访问应答,并且将应答返回给业务应用。
本发明的有益效果为:本发明的缓存系统通过对数据表的关联关系以及访问频率的分析,将访问频繁的表的数据缓存到内存中。当业务应用访问数据库时,先从缓存中查找,如果缓存中没有数据则再访问数据库。本系统有着较高的缓存命中率,能够有效的减少数据库负载,并且提升数据访问性能。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是数据缓存系统总体结构示意图。
图2是数据库日志扫描子系统结构示意图。
图3是数据抓取子系统结构示意图。
图4是表关联分析子系统流程示意图。
图5是表缓存因子分析子系统流程示意图。
图6是表缓存失效分析子系统流程示意图。
图7是sql引擎子系统流程示意图。
具体实施方式
如图1所示,本发明公开了一种基于数据库日志扫描的缓存系统,包括如下的子系统:
数据库日志扫描子系统。日志扫描子系统扫描后台数据库重做日志,从数据库重做日志中捕捉数据变化,将数据变化通知给数据抓取子系统;
表数据抓取子系统,根据表的缓存因子对表数据进行缓存,缓存了频繁访问的数据库表的数据,每张表以表名字为索引,表的所有记录值为内容存放;
表关联分析子系统,对数据表的访问情况进行统计分析,分析表之间访问顺序以及访问的关联关系,形成表之间的关联因子。
缓存因子分析子系统,根据每张表的访问频率、和其他表被访问的关联关系以及表数据内容计算表的缓存因子;缓存因子值越大,表示表访问的越频繁,越需要被缓存。
缓存失效分析子系统,当业务应用访问的数据不在缓存中时,对缓存因子进行调整,提升缓存命中效率;
sql引擎子系统,对应用的sql访问请求进行解析,解析出sql语句的操作以及操作对应的对象,然后根据解析结果进行相应的处理,然后将处理结果返回给应用。
数据访问接口,业务应用通过数据访问接口进行数据库访问。当业务应用调用数据访问接口时,数据访问接口将访问请求发送给缓存系统的服务端,并且将服务端返回的接口返回给业务应用。
如图2所示,为实现数据库日志扫描子系统,需要实现两个模块,变更数据扫描模块和变更数据发送模块,同时建立一个变更数据缓存队列ModifyCacheQueue。
ModifyCacheQueue保存了扫描到的变更数据,队列中每个元素包含了如下的内容:数据库实例名、数据库会话id、会话执行程序名、会话所在机器地址、变更表的表名、变更操作、变更记录的字段名列表、变更记录的变更前字段值、变更记录的变更后字段值、数据库事务ID、数据库scn、数据变更时间。初始状态下,ModifyCacheQueue为空。
变更数据扫描模块对数据库进行扫描,扫描出变化数据,将数据存放到ModifyCacheQueue中。模块初始启动时记录下当前数据库变化位置scn1,然后睡眠并且进入变化数据扫描循环。在每一轮迭代中,都先读取当前数据库变化位置scn2,然后扫描scn1到scn2之间的变化数据,将扫描到的变化数据构建成ModifyCacheQueue中的一个元素,然后放入到ModifyCacheQueue中。接着将scn2的值赋给scn1并且睡眠进行下一轮迭代。在循环中,不断扫描出数据库的变化并且加入到ModifyCacheQueue中。
变更数据发送模块监视着ModifyCacheQueue的变化,一旦发现有新元素的加入就将其取出,并且发送给数据抓取模块。然后读取数据抓取模块发送的应答。如果长时间未收到应答就重发数据。
为了实现表数据抓取子系统,需要包含2个模块,数据抓取模块和缓存更新模块,同时建立一个表元数据队列TabMetaQueue,里面包含了所有业务应用访问的表的元信息,如图3所示。数据抓取子模块根据表的缓存因子从大到小对数据表元信息进行排列。对于每一个队列TabMetaQueue的元素,先查看其数据缓存是否存在,如果存在继续获取下一个元素,否则开始进行数据缓存过程。对每张数据表,根据当前内存总量,获取表的数据,每张表的数据存储成为二维数组,一行代表了一个数据库记录的值,一列代表了数据库中一个字段的值。缓存更新模块读取变更数据扫描模块发送的数据变化信息,然后查看队列TabMetaQueue,如果表的数据没有缓存,则丢弃变化信息,否则将变化信息更新到缓存中,同时将相应的元信息的缓存失效位标示为0。
表关联分析子系统包含关联因子计算模块,同时需要建立一个队列TabAccessQueue和一个哈希表TabRelation。队列TabAccessQueue按照顺序存储了业务应用对数据表的访问,哈希表TabRelation存储了每张表的关联因子值。当业务应用访问表T时,在访问顺序队列TabAccessQueue的末尾增加一个元素,元素的内容包含了表T的名称以及访问时间。关联因子计算模块的流程如图4所示。它定期对TabAccessQueue进行扫描,计算表T和其它表的关联因子。如果超出了队列的最大数量限制,则将队列首元素移出队列。计算完毕之后,将表T的关联因子记录到哈希表TabRelation中。
为了实现缓存因子分析子系统,需要包含缓存因子扫描模块。如图5所示,缓存因子扫描模块的工作流程为:先扫描TabMetaQueue,获得每张表的查询频率QT和更新频率UT,以及表T的行数NORT。然后扫描TabRelation,获得队列中每张表和其它表的关联因子值,最后计算每张表的缓存因子,将缓存因子值更新到TabMetaQueue相应的元素中。
为了实现缓存失效分析子系统,需要实现缓存失效分析模块,如图6所示,缓存失效分析模块的工作流程为首先扫描TabMetaQueue,对于每张表T,如果T的缓存命中位为0,则增加表T的缓存因子,否则缓存因子不做变化。然后扫描TabMetaQueue,对于每张表T,获得T最近一次访问时间,如果T长时间没有被应用访问时,减少表T的缓存因子。
为了实现sql引擎子系统,需要实现sql解析模块和请求处理模块,如图7所示。sql解析模块实现了对sql语句进行解析,它的输入为sql语句,输出为一个sql结构体,包含了表名、操作、字段名以及字段内容。请求处理模块对用户的数据库访问进行处理,它会针对每个访问请求建立一个处理线程,请求处理完毕后线程就会结束。处理线程首先调用sql解析模块获得sql结构体,如果解析失败则返回错误给应用程序。否则在TabAccessQueue中增加一条记录。如果是查询操作,查看TabMetaQueue,是否有对应的缓存。如果有缓存,则将缓存的数据返回给应用。否则从数据库中查询数据返回给应用,同时将TabMetaQueue中表的缓存命中位置为0。如果是增加/修改/删除操作,将TabMetaQueue中对应元素的缓存失效位置更新为1,同时将sql语句交给数据库执行,然后将执行结果返回给客户端。
数据访问接口是一个客户端接口,业务应用调用数据访问接口,数据访问接口获得了访问内容,将请求封装成报文发送到服务端,然后读取服务端发送的应答,将应答返回给业务应用。
本发明系统执行如下步骤:扫描数据库重做日志,捕捉数据库变化数据,将变化数据发送到数据缓存系统中。
数据缓存系统为每一张后端数据库系统的表保存有一个数据缓存因子,缓存因子的值决定了数据缓存的重要性,缓存因子值越大表示表数据的访问越频繁,越需要被缓存。每张表对应的缓存因子都有一个计算公式,缓存因子的值和表数据的访问频率、变化频率和访问模式密切相关,缓存因子会随着数据访问而不断发生变化,因此数据缓存系统缓存的数据内容也在不断的发生变化,从而不断地适应应用的数据访问。数据缓存系统包含一个数据缓存刷新机制,它会根据当前每张表的缓存因子对需要进行数据缓存的表进行排队,将队列中前面的表的数据从数据库中取出,存放到缓存中。排在队里后部的数据表从缓存中清除。当应用进行数据访问时,首先对应用的sql语句进行初步解析,解析出应用需要访问的数据库表。对于查询访问,首先查找数据缓存,如果数据在缓存中表示缓存命中,直接将缓存中的数据返回给数据应用,同时对缓存因子进行更新。否则表示缓存未命中,从数据库中取出数据交给应用。对于缓存未命中的情况,讲表的访问信息发送给后台的数据分析系统,对未命中情形进行分析,对因子的计算方式进行调整。对于数据的增删改访问,则直接交给数据库执行,同时对缓存中相应的表进行锁定,等到后台的捕获模块将相应的数据变化捕捉到并且更新到缓存中才会释放锁定。锁定中的表的缓存数据无效。
本发明提供了一种基于数据库日志扫描的数据库缓存系统,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (9)
1.一种基于数据库日志扫描的数据库缓存系统,其特征在于,包括数据库日志扫描子系统、表数据抓取子系统、表关联分析子系统、缓存因子分析子系统、缓存失效分析子系统、sql引擎子系统和数据访问接口;
其中,数据库日志扫描子系统、表数据抓取子系统、表关联分析子系统、缓存因子分析子系统、缓存失效分析子系统、sql引擎子系统构成了数据库缓存系统的服务端,数据访问接口构成了数据库缓存系统的客户端;
所述数据库日志扫描子系统用于,扫描数据库重做日志,从数据库重做日志中捕捉数据变化,将数据变化通知给表数据抓取子系统;
所述缓存因子分析子系统用于,分析表访问的关联关系,根据每张表的访问频率、和其他表被访问的关联关系,以及表数据内容,计算数据表的缓存因子;
所述表数据抓取子系统用于,根据表的缓存因子从后台数据库抓取数据,将数据缓存到内存中,每张表以表名字为索引,表的所有记录值为内容存放;
所述表关联分析子系统用于,对数据表的访问情况进行统计分析,分析表之间访问顺序以及访问的关联关系,形成数据表之间的关联因子;
所述缓存失效分析子系统用于,针对缓存未命中的情况对缓存因子进行调整,提升缓存命中效率;
所述sql引擎子系统用于,对应用的sql访问请求进行解析,解析出sql语句的操作以及操作对应的对象,然后根据解析结果进行相应的处理,并将处理结果返回给应用;
所述数据访问接口用于业务应用访问数据库,当业务应用调用数据访问接口时,数据访问接口将访问请求发送给所述系统的服务端,并且将服务端返回的接口返回给业务应用。
2.如权利要求1所述的系统,其特征在于,所述数据库日志扫描子系统执行如下步骤:
步骤a1,建立修改缓存队列ModifyCacheQueue,修改缓存队列中的每一个数据修改项代表了一条数据的修改;
步骤a2,扫描数据库重做日志,从中捕捉出数据变化的sql语句,并且对sql语句进行sql语义解析,分析出sql语句的操作(insert/update/delete)、sql语句操作的数据表、sql语句操作的字段、每个字段的内容;
步骤a3,将解析后的变化数据存放到ModifyCacheQueue中;
步骤a4,将变化数据通知数据抓取子系统。
3.如权利要求2所述的系统,其特征在于,步骤a1中,修改缓存队列ModifyCacheQueue包含的变更数据元素具体包括:数据库实例名、数据库会话id、会话执行程序名、会话所在机器地址、变更表的表名、变更操作、变更记录的字段名列表、变更记录的变更前字段值、变更记录的变更后字段值、数据库事务ID、数据变更时间。
4.如权利要求3所述的系统,其特征在于,所述表关联分析子系统执行如下步骤:
步骤b1,建立一个数据表访问顺序队列TabAccessQueue,数据表访问顺序队列TabAccessQueue是一个先进先出队列,按照业务应用访问数据表的顺序将访问的表的信息增加到业务表访问顺序队列TabAccessQueue中;当业务应用访问一张数据表T时,将在TabAccessQueue的末尾增加一个元素,元素的内容包含了表T的名称以及访问时间;如果超出了业务表访问顺序队列TabAccessQueue的最大数量限制,则将业务表访问顺序队列TabAccessQueue的首元素移出队列;
步骤b2,建立一个哈希表TabRelation,哈希表的key是每张数据表的表名,value就是数据表对应的关联因子值;
步骤b3,扫描数据表访问顺序队列TabAccessQueue,设定TabAccessQueue中一共有C张表,数据表T和另一张数据表F的关联因子的计算方式如下,表T和表F的关联因子为RT-F,访问表T和访问表F之间间隔了X张表,因此RT-F就是1/X;表T的总体关联因子就是(∑RT-F*fF)/C,将计算结果放入到哈希表TabRelation中,fF是表T的缓存因子值;
步骤b4,根据配置,间隔一定时间对数据表访问顺序队列TabAccessQueue进行扫描,计算表T和其它表的关联因子;
步骤b1中,数据表访问顺序队列TabAccessQueue中每个元素的格式为:数据表的表名,访问时间;
步骤b2中,哈希表TabRelation的key是每张数据表的表名,value就是数据表对应的关联因子值。
5.如权利要求4所述的系统,其特征在于,所述缓存因子分析子系统执行如下步骤:
步骤c1,建立一个数据表元信息缓存队列TabMetaQueue,数据表元信息缓存队列TabMetaQueue中包含了所有业务应用访问的数据表的元信息;
步骤c2,扫描数据表元信息缓存队列TabMetaQueue,获得每张数据表的查询频率、更新频率和表的行数,设定表T的查询频率为QT,更新频率为UT,表T的行数为NORT;
步骤c3,扫描哈希表TabRelation,获得队列TabMetaQueue中每张表和其它表的关联因子值;
步骤c4,计算每张表的缓存因子,将缓存因子值更新到数据表元信息缓存队列TabMetaQueue相应的元素中;
步骤c1中,数据表元信息缓存队列TabMetaQueue中的元信息包括:表名、表最新一次访问时间、表的缓存命中位、表的查询频率,表的更新频率、表的缓存因子值、表缓存失效位、表数据缓存内容地址;
步骤c4中,缓存因子的计算方式如下,数据表T的缓存因子为fT,因子fT和如下的参数有关:表T的数据行数NORT,表T的查询频率QT,表T的更新频率UT,业务表一共有C张,表T和表F的关联关系RT-F,fT计算公式如下:
fT=100*QT+100/UT+100/NORT+(∑RT-F*fF)/C。
6.如权利要求5所述的系统,其特征在于,所述表数据抓取子系统执行如下步骤:
步骤d1,根据表的缓存因子对TabMetaQueue队列进行排列,按照缓存因子从大到小排列;
步骤d2,按照缓存的顺序,根据当前内存总量,依次抓取表的数据,每张表的数据存储成为二维数组,二维数组中一行代表了一个数据库记录的值,一列代表了数据库中一个字段的值;
步骤d3,以每张缓存表的表名的哈希码作为索引,每张缓存表缓存的数据内容作为值建立缓存哈希表;
步骤d4,读取数据库日志扫描子系统发送的数据变化信息,将变化信息更新到缓存中,同时将相应的元信息的缓存失效位置更新为0;
步骤d2中,表数据抓取子系统存储数据的二维数组的特征为:第一维代表了一行,第二维代表了一列,每行的格式是:4字节行数据长度,2字节列个数;每列的内容格式为1字节内容类型,2字节内容长度,后面跟着字段内容;内容类型包括字符串、数字、日期、二进制数据、大容量文本数据和大容量二进制数据;
步骤d3中,表数据的索引子系统特征为:表的每一列都有一个对应的哈希表,给每一列的内容计算SHA-1哈希,哈希值作为哈希表的索引,哈希表的内容就是所在行缓冲数据的首地址。
7.如权利要求6所述的系统,其特征在于,所述缓存失效分析子系统执行如下步骤:
步骤e1,扫描数据表元信息缓存队列TabMetaQueue,对于每张表T,如果T的缓存命中位为0,则增加表T的缓存因子,增加方式为将fT更新为fT+10;
步骤e2,扫描数据表元信息缓存队列TabMetaQueue,对于每张表T,获得T最近一次访问时间,如果T在X1分钟内没有被应用访问时,减少表T的缓存因子,减少方式为将fT更新为fT-10*Int,其中,Int是未被访问的空闲时间间隔/缓存系统运行总时间。
8.如权利要求7所述的系统,其特征在于,所述sql引擎子系统执行如下步骤:
步骤f1,解析业务应用访问数据库的sql语句,获得访问的表的表名、数据库访问操作;
步骤f2,在数据表访问顺序队列TabAccessQueue中增加一条记录,更新数据表元信息缓存队列TabMetaQueue中表最近一次访问时间;
步骤f3,对于查询操作,首先更新表的查询频率QT,然后查看数据表元信息缓存队列TabMetaQueue中是否有对应的缓存;如果有,则将缓存的数据返回给应用;如果缓存未命中,则从数据库中查询数据返回给应用,同时将数据表元信息缓存队列TabMetaQueue中表的缓存命中位置为0;
步骤f4,对于更新操作,更新表的更新频率UT,将数据表元信息缓存队列TabMetaQueue中对应元素的缓存失效位置更新为1,同时将sql语句交给数据库执行。
9.如权利要求8所述的系统,其特征在于,所述数据访问接口是一个客户端接口,它对业务的数据库访问进行了封装,将数据库访问发给所述系统,同时接收所述系统发送的访问应答,并且将应答返回给业务应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010607228.2A CN111752804B (zh) | 2020-06-29 | 2020-06-29 | 一种基于数据库日志扫描的数据库缓存系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010607228.2A CN111752804B (zh) | 2020-06-29 | 2020-06-29 | 一种基于数据库日志扫描的数据库缓存系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111752804A true CN111752804A (zh) | 2020-10-09 |
CN111752804B CN111752804B (zh) | 2022-09-09 |
Family
ID=72678116
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010607228.2A Active CN111752804B (zh) | 2020-06-29 | 2020-06-29 | 一种基于数据库日志扫描的数据库缓存系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111752804B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112765180A (zh) * | 2021-01-27 | 2021-05-07 | 上海英方软件股份有限公司 | 一种对db2数据库建表日志列名解析的方法及装置 |
CN113641690A (zh) * | 2021-08-10 | 2021-11-12 | 南威软件股份有限公司 | 一种跨应用缓存更新方法 |
CN113949750A (zh) * | 2020-12-09 | 2022-01-18 | 中国信息通信研究院 | 句柄标识解析缓存方法、查询方法及句柄标识解析系统 |
CN117708094A (zh) * | 2023-12-26 | 2024-03-15 | 行吟信息科技(武汉)有限公司 | 数据处理方法、装置、电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6349310B1 (en) * | 1999-07-06 | 2002-02-19 | Compaq Computer Corporation | Database management system and method for accessing rows in a partitioned table |
WO2017096939A1 (zh) * | 2015-12-10 | 2017-06-15 | 深圳市华讯方舟软件技术有限公司 | 一种在基于HDFS的spark-sql大数据处理系统上建立索引的方法 |
CN107357848A (zh) * | 2017-06-27 | 2017-11-17 | 中国电子科技集团公司第二十八研究所 | 基于驱动封装的数据库同步方法 |
CN111125334A (zh) * | 2019-12-20 | 2020-05-08 | 神思电子技术股份有限公司 | 一种基于预训练的搜索问答系统 |
-
2020
- 2020-06-29 CN CN202010607228.2A patent/CN111752804B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6349310B1 (en) * | 1999-07-06 | 2002-02-19 | Compaq Computer Corporation | Database management system and method for accessing rows in a partitioned table |
WO2017096939A1 (zh) * | 2015-12-10 | 2017-06-15 | 深圳市华讯方舟软件技术有限公司 | 一种在基于HDFS的spark-sql大数据处理系统上建立索引的方法 |
CN107357848A (zh) * | 2017-06-27 | 2017-11-17 | 中国电子科技集团公司第二十八研究所 | 基于驱动封装的数据库同步方法 |
CN111125334A (zh) * | 2019-12-20 | 2020-05-08 | 神思电子技术股份有限公司 | 一种基于预训练的搜索问答系统 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113949750A (zh) * | 2020-12-09 | 2022-01-18 | 中国信息通信研究院 | 句柄标识解析缓存方法、查询方法及句柄标识解析系统 |
CN113949750B (zh) * | 2020-12-09 | 2023-09-19 | 中国信息通信研究院 | 句柄标识解析缓存方法、查询方法及句柄标识解析系统 |
CN112765180A (zh) * | 2021-01-27 | 2021-05-07 | 上海英方软件股份有限公司 | 一种对db2数据库建表日志列名解析的方法及装置 |
CN112765180B (zh) * | 2021-01-27 | 2023-01-17 | 上海英方软件股份有限公司 | 一种对db2数据库建表日志列名解析的方法及装置 |
CN113641690A (zh) * | 2021-08-10 | 2021-11-12 | 南威软件股份有限公司 | 一种跨应用缓存更新方法 |
CN113641690B (zh) * | 2021-08-10 | 2023-10-27 | 南威软件股份有限公司 | 一种跨应用缓存更新方法 |
CN117708094A (zh) * | 2023-12-26 | 2024-03-15 | 行吟信息科技(武汉)有限公司 | 数据处理方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111752804B (zh) | 2022-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111752804B (zh) | 一种基于数据库日志扫描的数据库缓存系统 | |
US11947513B2 (en) | Search phrase processing | |
KR100745883B1 (ko) | 투명한 네트워크 에지의 데이터 캐시 | |
JP5922716B2 (ja) | 個別にアクセス可能なデータユニットの記憶の取り扱い方法 | |
US6009271A (en) | Method of retrieving data from a relational database | |
US6754799B2 (en) | System and method for indexing and retrieving cached objects | |
US8250044B2 (en) | Byte-code representations of actual data to reduce network traffic in database transactions | |
US7117222B2 (en) | Pre-formatted column-level caching to improve client performance | |
EP2790113B1 (en) | Aggregate query-caching in databases architectures with a differential buffer and a main store | |
EP2467791B1 (en) | Method for performing transactions on data and a transactional database | |
CN109213756B (zh) | 数据存储、检索方法、装置、服务器和存储介质 | |
US8560500B2 (en) | Method and system for removing rows from directory tables | |
US20110289112A1 (en) | Database system, database management method, database structure, and storage medium | |
US20070083498A1 (en) | Distributed search services for electronic data archive systems | |
CN114003660B (zh) | 基于flink的高效同步实时数据到ClickHouse的方法及装置 | |
CN115455031B (zh) | 一种Doris的数据查询方法、装置、存储介质及设备 | |
Anadiotis et al. | Scalable Analytics on Multi-Streams Dynamic Graphs | |
Mikami et al. | Lazy view maintenance for social networking applications | |
CN117951112A (zh) | 一种业务系统架构的基础数据处理方法 | |
CN115203183A (zh) | 一种基于数据湖的全生命周期数据销毁方法 | |
CN117762998A (zh) | 数据预读取方法、数据查询方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 210000 No.1, Lingshan South Road, Qixia District, Nanjing City, Jiangsu Province Applicant after: THE 28TH RESEARCH INSTITUTE OF CHINA ELECTRONICS TECHNOLOGY Group Corp. Address before: 210007 No. 1 East Street, alfalfa garden, Jiangsu, Nanjing Applicant before: THE 28TH RESEARCH INSTITUTE OF CHINA ELECTRONICS TECHNOLOGY Group Corp. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |