基于大数据的数据一致性方法、装置、设备和存储介质与流程

文档序号:19284388发布日期:2019-11-29 23:21阅读:294来源:国知局
基于大数据的数据一致性方法、装置、设备和存储介质与流程

本发明涉及大数据技术领域,尤其涉及一种基于大数据的数据一致性方法、装置、设备和存储介质。



背景技术:

当前互联网为提高数据查询效率,通常采用冗余数据来保证不同维度查询数据。也就是同一份数据为应对不同查询场景,冗余两份数据,即同一数据存两份。为保证两份数据的一致性,一般方法都是通过定时扫描两份数据库,发现不一致及时纠正。但是对于数据量特别大的互联网应用,现有的进行数据一致性检查纠正的方法,在检查数据是否一致时需要一定时间,造成同步数据时的效率很低。而且在进行一致性工作的这段时间窗口时间里,也会出现数据查询不一致的情况,无法保证两份数据的一致性。



技术实现要素:

有鉴于此,有必要针对无法保证两份数据库中的数据一致性的问题,提供一种基于大数据的数据一致性方法、装置、设备和存储介质。

一种基于大数据的数据一致性方法,包括:

在数据写入数据库后,将写入操作对应的日志数据记录在所述数据库内预设的日志文件中,所述日志数据包括数据库标识、时间、写入的数据表名称和操作内容;

根据所述时间获取两个所述数据库中的所述日志文件,对两个所述日志文件中的日志数据进行比对,若存在不一致的日志数据,则将存在不一致的所述日志数据放入存储介质中,直到遍历两个所述日志文件中的所有日志数据;

从所述存储介质中逐条提取所述日志数据,根据所述数据库标识确定未含有所述数据的数据库,根据所述数据表名称查找未含有所述数据的数据库中与所述数据表名称相同的数据表,根据所述操作内容同步所述数据表。

一种可能的设计中,所述在数据写入数据库后,将写入操作对应的日志数据记录在所述数据库内预设的日志文件中,所述日志数据包括数据库标识、时间、写入的数据表名称和操作内容,包括:

调用预设的数据写入脚本,在所述数据写入脚本中设置日志触发脚本,所述日志触发脚本为当所述数据写入所述数据库成功后触发;

若所述日志触发脚本被触发,则获取所述数据写入所述数据库的数据库名称、写入所述数据所在的数据表名称、写入数据表中的位置和更新内容、当前时间;

将所述数据库名称定义为数据库标识,将所述位置和更新内容定义为操作内容,将所述数据库标识、所述时间、所述数据表名称和所述操作内容定义为一条日志数据后,添加入所述日志文件中。

一种可能的设计中,所述根据所述时间获取两个所述数据库中的所述日志文件,包括:

通过预设的定时任务,定时读取两个所述数据库中的所述日志文件;

获取当前时间,将当前时间减去预设的周期时间,得到比对起始时间;

分别从两个所述日志文件中的所述时间为所述比对起始时间时或之后开始读取日志数据。

一种可能的设计中,所述对两个所述日志文件中的日志数据进行比对,若存在不一致的日志数据,则将存在不一致的所述日志数据放入存储介质,直到遍历两个所述日志文件中的所有日志数据,包括:

逐条比对两个所述日志文件中的日志数据,当两条所述日志数据的所述时间不一致时,定义为两条所述日志数据不一致,则将所述时间在前的所述日志数据定义为多的那条日志数据放入所述存储介质;

读取所述多的那条日志数据对应的日志文件中的下一条日志数据,若所述下一条日志数据为空时,则将另一个所述日志文件中的在进行比对的所述日志数据和时间之后的所有日志数据都放入所述存储介质;

否则将所述下一条日志数据与另一个所述日志文件中的在进行比对的所述日志数据进行比对,若时间不一致,则将时间在前的日志数据定义为多的那条日志数据放入所述存储介质,重复上一步,直到时间一致,则继续跳转所述逐条比对两个所述日志文件中的日志数据步骤。

一种可能的设计中,所述从所述存储介质中逐条提取所述日志数据,根据所述数据库标识确定未含有所述数据的数据库,根据所述数据表名称查找未含有所述数据的数据库中与所述数据表名称相同的数据表,根据所述操作内容同步所述数据表,包括:

从所述存储介质中提取一条所述日志数据,通过日志数据构建命令,获取所述日志数据中的数据库标识、数据表名称、操作内容;

根据所述数据库标识确定需要写入的数据库名称,连接所述数据库名称对应的数据库,查找所述数据库中与所述数据表名称相同的数据表;

调用预设的数据写入脚本,通过所述数据写入脚本将所述操作内容写入所述数据表中,以完成数据的同步。

一种可能的设计中,所述从所述存储介质中逐条提取所述日志数据前,还包括:

判断所述存储介质中的所述日志数据的数量,若所述日志数据的数量大于预设的数量阈值,则将每条所述日志数据定义为队列中的任务,将所有的任务都放入所述队列中;

开启多条线程,多条所述线程并发执行所述队列中的任务,通过所述线程提取所述日志数据,根据所述日志数据同步所述数据表。

一种可能的设计中,所述从所述存储介质中逐条提取所述日志数据前,还包括:

对两个所述数据库进行读写锁控制,若接收到数据写入数据库请求时,将所述数据写入缓存中,等待同步所述数据表完成后,将所述缓存中的所述数据写入对应数据库的数据表中。

一种基于大数据的数据一致性装置,包括:记录日志数据模块,用于在数据写入数据库后,将写入操作对应的日志数据记录在所述数据库内预设的日志文件中,所述日志数据包括数据库标识、时间、写入的数据表名称和操作内容;

比对模块,用于根据所述时间获取两个所述数据库中的所述日志文件,对两个所述日志文件中的日志数据进行比对,若存在不一致的日志数据,则将存在不一致的所述日志数据放入存储介质中,直到遍历两个所述日志文件中的所有日志数据;

同步模块,用于从所述存储介质中逐条提取所述日志数据,根据所述数据库标识确定未含有所述数据的数据库,根据所述数据表名称查找未含有所述数据的数据库中与所述数据表名称相同的数据表,根据所述操作内容同步所述数据表。

一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述基于大数据的数据一致性方法的步骤。

一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述基于大数据的数据一致性方法的步骤。

上述基于大数据的数据一致性方法、装置、设备和存储介质,包括在数据写入数据库后,将写入操作对应的日志数据记录在所述数据库内预设的日志文件中,所述日志数据包括数据库标识、时间、写入的数据表名称和操作内容;根据所述时间获取两个所述数据库中的所述日志文件,对两个所述日志文件中的日志数据进行比对,若存在不一致的日志数据,则将存在不一致的所述日志数据放入存储介质中,直到遍历两个所述日志文件中的所有日志数据;从所述存储介质中逐条提取所述日志数据,根据所述数据库标识确定未含有所述数据的数据库,根据所述数据表名称查找未含有所述数据的数据库中与所述数据表名称相同的数据表,根据所述操作内容同步所述数据表。本发明在数据写入数据库成功后,将成功写入的数据对应生成日志数据,在对两个数据库中的数据进行比对时,通日志数据进行比对,通过只比对数据的增量部分,节省了全表扫描时间,极大提高了扫描和同步效率,缩短数据不一致时间窗口。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。

图1为本发明一个实施例中的基于大数据的数据一致性方法的流程图;

图2为本发明一个实施例中步骤s2的流程图;

图3为本发明一个实施例中基于大数据的数据一致性装置的结构图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。

图1为本发明一个实施例中的基于大数据的数据一致性方法的流程图,如图1所示,一种基于大数据的数据一致性方法,包括以下步骤:

步骤s1,记录日志数据:在数据写入数据库后,将写入操作对应的日志数据记录在数据库内预设的日志文件中,日志数据包括数据库标识、时间、写入的数据表名称和操作内容。

本步骤在数据成功写入数据库中后,通过建立日志数据进行后续的数据比对工作,比对的只有增量的数据,而无需将整个数据库中的数据表都进行比对。

在一个实施例中,步骤s1,包括:

步骤s101,设置日志触发脚本:调用预设的数据写入脚本,在数据写入脚本中设置日志触发脚本,日志触发脚本为当数据写入所述数据库成功后触发。

本步骤在需要进行数据一致性同步的数据库中均设置日志触发脚本。通过日志触发脚本,可以在数据成功写入数据库后,触发后续的日志数据写入日志文件工作。若数据未能成功写入数据库,则不会触发。在具体设置时,直接在数据写入脚本后面加入日志触发脚本即可,可以采用日志触发器实现本步骤的触发。

步骤s102,获取数据:若日志触发脚本被触发,则获取数据写入数据库的数据库名称、写入数据所在的数据表名称、写入数据表中的位置和更新内容、当前时间。

本步骤在数据成功写入数据库后触发,并在本步骤对后续比对和同步数据用的信息进行获取,生成日志数据。例如,在将数据a写入数据库1中的数据表t1的位置s处中,写入成功后,获取数据库名称为“数据库1”、数据表为“t1”、数据写入数据表中的位置为“位置s”、更新内容为“写入数据a”及当前时间。

步骤s103,添加日志数据:将数据库名称定义为数据库标识,将位置和更新内容定义为操作内容,将数据库标识、时间、数据表名称和操作内容定义为一条日志数据后,添加入日志文件中。

在预设的日志文件中添加日志数据时,采用一条日志数据占一行的方式添加。日志文件可以采用表格形式,比如写入一行日志数据的格式为:数据库标识、时间、数据表名称、位置、更新内容。写入的方式可以采用构建sql命令将日志数据写入日志文件中。例如,将数据a写入数据库1中的数据表t1中,写入成功后,将日志数据1写入日志文件log1;将数据b写入数据库2中的数据表t2中,写入成功后,将日志数据2写入日志文件log2。

本实施例通过对写入成功的数据生成日志数据添加入日志文件的方式,在一致性同步数据时,为比对数据提供精确的增量信息。

步骤s2,比对日志数据:根据时间获取两个数据库中的日志文件,对两个日志文件中的日志数据进行比对,若存在不一致的日志数据,则将存在不一致的日志数据放入存储介质中,直到遍历两个日志文件中的所有日志数据。

本步骤在对两个数据库进行一致性比对时,通过比对日志文件中的日志数据实现比对目的。在进行比对过程中,采用如下方式:

在一个实施例中,步骤s2,如图2所示,包括:

步骤s201,定时读取日志文件:通过预设的定时任务,定时读取两个数据库中的日志文件。

定时任务可以预设在两个数据库中的任一数据库中,定时任务的定时时间优选以天或小时为单位,通过定时任务定时触发,读取两个数据库中的日志文件。在读取本地数据库中的日志文件时,可以采用直接读取的方式。在读取外部数据库中的日志文件时,通过访问接口向外部数据库进行访问请求,只有具有访问权限的数据库才能访问及收到对应外部数据库返回的日志文件。

步骤s202,获得比对起始时间:获取当前时间,将当前时间减去预设的周期时间,得到比对起始时间。

在对两份日志文件逐行比对时,为了只比对周期性的新增的日志数据,比如比对当前时间往前推24小时或1小时的日志数据,本步骤还通过将当前时间减去周期时间,得到比对起始时间,以比对起始时间作为新增日志数据的开始时间。本步骤中的周期时间可以与定时任务的定时时间配合设置,以实现定时只比对新增的日志数据,且无遗漏的目的。

步骤s203,读取日志数据:分别从两个日志文件中的时间为比对起始时间时或之后开始读取日志数据。

本步骤以比对起始时间为时间点,分别在两个日志文件中查找时间与比对起始时间相同或之后的第一条日志数据,读取第一条日志数据,以第一条日志数据开始为新增的日志数据。

步骤s204,比对日志数据:逐条比对两个日志文件中的日志数据,当两条日志数据的时间不一致时,定义为两条日志数据不一致,则将时间在前的日志数据定义为多的那条日志数据放入存储介质。

本步骤中的存储介质可以为缓存,即将多的那条日志数据先放入缓存中进行暂存。本步骤通过对日志数据的时间进行比对,若日志数据的时间不同,则认为日志数据不同,以时间在前的日志数据为增量日志数据。例如,日志文件log1中含有时间为1:00、1:10、1:20、1:50、2:00、2:05等日志数据,日志文件log2中含有时间为1:00、1:15、1:50、1:55等日志数据。逐条比对两个日志文件中的日志数据,即首先比对时间为1:00的两条日志数据,时间一致,则继续比对,将日志文件log1中时间为1:10的日志数据与日志文件log2中时间为1:15的日志数据进行比对,时间不一致,则将日志文件log1中时间为1:10的日志数据作为多的那条日志数据放入缓存中。

步骤s205,判断下一条日志数据:读取多的那条日志数据对应的日志文件中的下一条日志数据,若下一条日志数据为空时,则将另一个日志文件中的在进行比对的日志数据和时间之后的所有日志数据都放入存储介质。

若下一条日志数据为空,则认为对应的日志文件已无其他日志数据需要比对,则另一个日文件中的当前在比对的日志数据及时间在之后的所以其他日志数据均为增量日志数据,均放入缓存中。例如,读取日志文件log1中的下一条日志数据为时间为1:20的日志数据,此日志数据不为空,则不进行对应操作。若多的那条日志数据为日志文件log2中时间为1:55的日志数据,则读取日志文件log2中的下一条日志数据为空,则认为日志文件log2的日志数据已读完,此时将日志文件log1中时间为2:00和2:05的日志数据作为多的那条日志数据放入缓存中,并认为已经遍历完成两个日志文件中的所有日志数据。

步骤s206,再次比对:否则将下一条日志数据与另一个日志文件中的在进行比对的日志数据进行比对,若时间不一致,则将时间在前的日志数据定义为多的那条日志数据放入所述存储介质,重复上一步,直到时间一致,则继续跳转逐条比对两个日志文件中的日志数据步骤。

若下一条日志数据不为空,则将下一条日志数据与步骤s204中另一个日志文件中在比对的日志数据继续进行比对。例如,读取日志文件log1中时间为1:20的日志数据与日志文件log2中时间为1:15的日志数据比对,时间不一致,则将日志文件log2中时间为1:15的日志数据作为多的那条日志数据放入缓存中。重复步骤s205,即读取日志文件log2中的下一条日志数据,即时间为1:50的日志数据,判断日志数据不为空,则进行本步骤再次比对,将日志文件log2中时间为1:50的日志数据与日志文件log1中时间为1:20的日志数据进行比对,时间不一致,则日志文件log1中时间为1:20的日志数据作为多的那条日志数据放入缓存中。继续重复步骤s205,读取日志文件log1中时间为1:50的日志数据与日志文件log2中时间为1:50的日志数据比较,时间一致,则跳转到步骤s204,比对日志文件log1中时间为2:00的日志数据与日志文件log2中时间为1:55的日志数据。遍历两个日志文件中的所有日志数据后,日志文件log1和日志文件log2存在六条不一致的日志数据。

本实施例通过逐条比对两个日志文件中的日志数据,将增量日志数据筛选出来放入存储介质中。由于只需要对比增量日志数据即可确定增量数据,无需进行全表甚至全数据库的比对,因此筛选增量数据的速度快、效率高。

步骤s3,同步数据:从存储介质中逐条提取日志数据,根据数据库标识确定未含有数据的数据库,根据数据表名称查找未含有数据的数据库中与数据表名称相同的数据表,根据操作内容同步数据表。

在确定了增量日志数据后,从存储介质中逐条对增量日志数据进行处理。根据日志数据将对应的数据写入另一个数据库的对应数据表中,以完成数据的同步工作。

在一个实施例中,步骤s3,包括:

步骤s301,获取增量信息:从存储介质中提取一条日志数据,通过日志数据构建命令,获取日志数据中的数据库标识、数据表名称、操作内容。

由于日志数据按预设的写入格式写入,因此本步骤可以通过日志数据构建命令,如sql命令,读取日志数据中的增量信息,包括数据库标识、数据表名称、操作内容,操作内容即为位置和更新内容。

步骤s302,查找数据表:根据数据库标识确定需要写入的数据库名称,连接数据库名称对应的数据库,查找数据库中与数据表名称相同的数据表。

在确定所要写入的数据库时,由于只对两个数据库进行比对,通过数据库标识的排除法确定,比如数据库标识为数据库1,则需要写入的数据库名称即为数据库2。而数据表在两个数据库中名称都相同,因此通过数据表名称即可查找到需要写入的数据库中的数据表。例如,将数据a写入数据库1中的数据表t1中,写入成功后,将日志数据1写入日志文件log1。当日志数据1为增量日志数据时,本步骤查找到需要写入的数据表名称为t1的数据库2中的数据表。

步骤s303,查找数据表:调用预设的数据写入脚本,通过数据写入脚本将操作内容写入数据表中,以完成数据的同步。

在对增量数据写入数据表中时,也采用数据写入脚本,保证数据采用相同的写入方式写入数据表,进一步保证了数据的高度同步。例如,当日志数据1为增量日志数据时,本步骤通过数据写入脚本,将数据a写入数据库2中的数据表t1中相同的位置处。

数据写入脚本也可以采用sql命令,例如:

update数据表set更新内容where位置;

本实施例通过对增量日志数据的逐条解析和化处理,将两个不同数据库中的数据进行一致性同步,同步方式效率高。

在一个实施例中,步骤s301,从存储介质中逐条提取日志数据前,还包括:

步骤s30101,判断日志数据的数量:判断存储介质中的日志数据的数量,若日志数据的数量大于预设的数量阈值,则将每条日志数据定义为队列中的任务,将所有的任务都放入队列中。

当增量日志数据较为庞大,若采用单线程的方式逐个解析和处理日志数据,则可能延长数据不一致时间窗口时间,为了缩短数据不一致时间窗口时间,本步骤将所有的日志数据定义为任务加入预设的队列中,以加快对增量日志数据的处理。在将任务放入队列中前,还可以将任务以时间的先后依次放入队列中。

步骤s30102,多线程处理:开启多条线程,多条线程并发执行队列中的任务,通过线程提取日志数据,根据日志数据同步数据表。

在将所有日志数据作为任务加入队列中后,开启的多条线程即可逐个读取队列中的日志数据,对日志数据进行同步数据表工作。

本实施例通过多线程并发处理日志数据的方式,进一步较快同步效率。

在一个实施例中,步骤s301,从存储介质中逐条提取日志数据前,还包括:

对两个数据库进行读写锁控制,若接收到数据写入数据库请求时,将数据写入缓存中,等待同步数据表完成后,将缓存中的数据写入对应数据库的数据表中。

本实施例在进行读写锁控制时,采用cephmds锁机制方式实现rdlock(读)、wrlock(写)、xlock(互斥)三类锁。在对数据库进行一致性同步过程前,先将数据库通过读写锁控制,避免用户进行修改操作。

本实施例基于大数据的数据一致性方法,在两个需要冗余的数据库在进行数据成功写入后,将写入操作记录成日志数据,通过比对日志数据,将增量日志数据进行一致性同步,由于只比对增量日志数据,节省了全表比对时间,极大提高了比对和同步效率,缩短数据不一致时间窗口。

在一个实施例中,提出了一种基于大数据的数据一致性装置,如图3所示,包括如下模块:

记录日志数据模块,用于在数据写入数据库后,将写入操作对应的日志数据记录在数据库内预设的日志文件中,日志数据包括数据库标识、时间、写入的数据表名称和操作内容;

比对模块,用于根据时间获取两个数据库中的日志文件,对两个日志文件中的日志数据进行比对,若存在不一致的日志数据,则将存在不一致的日志数据放入存储介质中,直到遍历两个日志文件中的所有日志数据;

同步模块,用于从存储介质中逐条提取日志数据,根据数据库标识确定未含有数据的数据库,根据数据表名称查找未含有数据的数据库中与数据表名称相同的数据表,根据操作内容同步数据表。

在一个实施例中,提出了一种计算机设备,包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行计算机可读指令时实现上述各实施例的基于大数据的数据一致性方法中的步骤。

在一个实施例中,提出了一种存储有计算机可读指令的存储介质,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述各实施例的基于大数据的数据一致性方法中的步骤。其中,存储介质可以为非易失性存储介质。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁盘或光盘等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明一些示例性实施例,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1