掌桥专利:专业的专利平台
掌桥专利
首页

数据处理方法及装置、电子设备、计算机可读存储介质

文献发布时间:2024-04-18 19:59:31


数据处理方法及装置、电子设备、计算机可读存储介质

技术领域

本公开涉及计算机技术领域,特别涉及一种数据处理方法及装置、电子设备、计算机可读存储介质。

背景技术

目前,在开发应用程序时,通常是使用文档型数据库,例如Elasticsearch(ES)数据库作为搜索引擎来实现搜索功能,为了尽可能保障该类型的数据库提供的搜索结果的实时性和准确性,通常在应用程序开发以及运行过程中,会将应用程序使用的、用于存储业务数据的业务数据库和用于作为搜索引擎的文档型数据库联合使用,而为了保障该两种数据库中数据的一致性,应用程序在运行过程中,在基于文档型数据库,例如ES数据库实现搜索功能的同时,还会将业务数据库中的数据同步至ES数据库中。

然而,相关技术中在使用文档型数据库,例如ES数据库作为搜索引擎实现搜索功能时,其提供的搜索结果,即查询结果可能存在不够准确的问题。

发明内容

本公开提供一种数据处理方法及装置、电子设备、计算机可读存储介质。

第一方面,本公开提供了一种数据处理方法,该数据处理方法包括:

接收数据请求;其中,所述数据请求用于从目标数据库中查询目标数据;

获取所述目标数据库对应的第一预设时长,其中,所述第一预设时长为所述目标数据库每执行一次数据刷新处理的间隔时长;所述数据刷新处理用于将所述目标数据库缓存的所述目标数据写入至对应的预设文件中;所述目标数据为待写入所述目标数据库的任意数据;

根据所述第一预设时长,将所述数据请求延迟发送至所述目标数据库进行查询处理,以得到与所述数据请求对应的、包含所述目标数据的查询结果。

第二方面,本公开提供了一种数据处理装置,该数据处理装置包括:

接收单元,用于接收数据请求;其中,所述数据请求用于从目标数据库中查询目标数据;

获取单元,用于获取所述目标数据库对应的第一预设时长,其中,所述第一预设时长为所述目标数据库每执行一次数据刷新处理的间隔时长;所述数据刷新处理用于将所述目标数据库缓存的所述目标数据写入至对应的预设文件中;所述目标数据为待写入所述目标数据库的任意数据;

发送单元,用于根据所述第一预设时长,将所述数据请求延迟发送至所述目标数据库进行查询处理,以得到与所述数据请求对应的、包含所述目标数据的查询结果。

第三方面,本公开提供了一种电子设备,该电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的一个或多个计算机程序,一个或多个所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的数据处理方法。

第四方面,本公开提供了一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序在被处理器执行时实现上述的数据处理方法。

本公开所提供的实施例,在接收到用于从目标数据库中查询目标数据的数据请求之后,并不直接控制目标数据库对该数据请求进行响应,而是先获取目标数据库对应的第一预设时长,即目标数据库用于执行一次数据刷新处理的间隔时长,并根据该第一预设时长对该数据请求进行延迟发送,以在目标数据库执行一次数据刷新处理之后再对该数据请求进行响应处理。由于被写入目标数据库的目标数据往往并不能立刻就被查询到,因此,若在将目标数据写入目标数据库的同时,还响应于接收到的数据请求,立刻将该数据请求发送至目标数据库进行查询处理,则往往并不能准确查询到该目标数据;为此,本公开通过在接收到数据请求之后根据目标数据库执行一次数据刷新处理的间隔时长对该数据请求进行延迟发送处理,以延缓目标数据库响应该数据请求的时间,使得目标数据库在接收到该数据请求的时刻,将该时刻处于目标数据库的缓存中的该目标数据写入至对应的预设文件中;之后,通过延时将数据请求发送至目标数据库进行查询处理,就能够得到包含该目标数据的查询结果,从而提升目标数据库响应数据请求提供的查询结果,即搜索结果的准确性。

应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

附图用来提供对本公开的进一步理解,并且构成说明书的一部分,与本公开的实施例一起用于解释本公开,并不构成对本公开的限制。通过参考附图对详细示例实施例进行描述,以上和其他特征和优点对本领域技术人员将变得更加显而易见,在附图中:

图1为相关技术中的数据处理方法的框图;

图2为本公开实施例提供的数据处理方法的实施环境的示意图;

图3为本公开实施例提供的一种数据处理方法的流程图;

图4a为本公开实施例提供的一种数据处理的第一框图;

图4b为本公开实施例提供的一种数据处理的第二框图;

图5为本公开实施例提供的用于延迟发送数据请求的流程图;

图6为本公开实施例提供的一种数据处理装置的框图;

图7为本公开实施例提供的一种电子设备的框图。

具体实施方式

为使本领域的技术人员更好地理解本公开的技术方案,以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

在不冲突的情况下,本公开各实施例及实施例中的各特征可相互组合。

如本文所使用的,术语“和/或”包括一个或多个相关列举条目的任何和所有组合。

本文所使用的术语仅用于描述特定实施例,且不意欲限制本公开。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由……制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其它特征、整体、步骤、操作、元件、组件和/或其群组。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。

除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本公开的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。

相关技术在开发应用程序时,通常使用文档型数据库作为搜索引擎来实现搜索功能,该文档型数据库例如可以为Elasticsearch数据库、MongoDB以及Firebase RealtimeDatabase等数据库。以下以该文档型数据库为Elasticsearch,即ES数据库为例,对相关技术中以该类型数据库作为搜索引擎时如何响应数据请求执行数据查询处理进行说明;其中,ES数据库是一个提供了分布式多用户能力的全文搜索引擎,在开发过程中,可以基于RESTful web接口向ES数据库发送请求,以操作ES数据库,当然,也可以利用Java API或者其他编程语言中的对应API操作ES数据库;ES数据库中的基本存储单元是shard,用于定位ES数据库中的文档(document)的索引(index)分散在多个shard上,每个shard由多个段(segment)组成,ES数据库中存储的数据以document的形式存储,ES数据库每创建一个新document,会在设定时间内将该document划分至一个新的segment,同时,在删除数据时,也不会直接删除当前segment,而仅是标记为已删除状态,并在后续合适时机进行删除处理。

请参看图1,其为相关技术中的数据处理方法的框图。如图1所示,为了尽可能保障ES数据库的实时性和准确性,ES数据库在对外提供搜索功能的同时,还会从业务数据库,例如mysql数据库中同步数据,以保障两者间数据的一致性,即,在ES数据库运行过程中,还会与业务数据库之间执行数据同步处理,例如,可以按照预设时间间隔从业务数据库,例如mysql中获取增量数据,并将该增量数据写入ES数据库,该预设时间间隔可以为10分钟或者也可以根据需要进行设置。

在相关技术中,在将ES数据库作为搜索引擎提供搜索功能时,一方面会按照预设时间间隔从业务数据库中同步业务数据,同时,在任意时刻,ES数据库还会接收客户端发送的数据请求,响应于该数据请求,将该数据请求所请求查询的数据发送给客户端。

然而,如图1所示,当t11时刻ES数据库从业务数据库中同步了一条数据1,并将该数据1写入自身存储之后;当t11时刻ES数据库接收到了客户端发送的、用于查询数据1的数据请求之后,ES数据库却往往并不能查询到数据1,从而只能在晚于t11时刻的t12时刻向客户端发送结果为空的查询结果。

即,若在数据被写入ES数据库的同时,ES数据库还同时接收到了客户端针对该数据的查询请求,则虽然数据实际已被写入了ES数据库,但ES数据库却不能立刻查询到该数据,从而只能向客户端返回查询结果为空的错误查询结果。

在相关技术中,为解决该技术问题,以提升ES数据库的查询结果的准确性,一般是采取在业务空闲时刻,例如,每日0时进行ES数据库与业务数据库之间的数据同步处理,该种方法由于两种数据库之间的数据同步间隔较长,使得ES数据库提供的搜索结果存在实时性差的问题;或者,也可以由开发人员在业务应用的编码中自行加业务逻辑以处理该问题,然而,该种方法需要增加相当多的工作量,并且也不能完全避免在该种状态下的数据准确性。因此,有必要提供一种数据处理方法,以在保障业务数据库与ES数据库中数据一致性的前提下,同时保障基于ES数据库提供的查询结果,即搜索结果的准确性。

请参看图2,其为本公开实施例提供的数据处理方法的实施环境的示意图。如图2所示,该实施环境可以包括服务器101、终端设备102以及网络103。

服务器101例如可以是物理服务器,例如可以为刀片服务器、机架式服务器等,服务器101也可以是虚拟服务器,例如可以是部署在云端的服务器集群,在此不做限定。在本公开实施例中,服务器101可以作为数据库服务器,其与文档型的目标数据库,例如,ES数据库连接,并用于实现本公开任意实施例的数据处理方法,以在接收到数据请求的情况下,通过基于本公开实施例提供的数据处理方法对该数据请求进行处理,以提升目标数据库响应该数据请求提供的搜索结果的准确性。

终端设备102,可以是智能手机、便携式电脑、台式计算机、平板电脑等。

网络103可以是无线网络也可以是有线网络,可以是局域网也可以是广域网。服务器101以及终端设备102相互之间可以通过网络103进行通信。

在本公开实施例中,服务器101可用于参与实现根据本公开任意实施例的数据处理方法。例如可以用于:接收终端设备102发送的数据请求,其中,数据请求用于从目标数据库中查询目标数据;获取目标数据库对应的第一预设时长,其中,第一预设时长为目标数据库每执行一次数据刷新处理的间隔时长;数据刷新处理用于将目标数据库缓存的目标数据写入至对应的预设文件中;目标数据为待写入目标数据库的任意数据;根据第一预设时长,将数据请求延迟发送至目标数据库进行查询处理,以得到与该数据请求对应的、包含该目标数据的查询结果;当然,在目标数据库进行查询处理得到与数据请求对应的、包含目标数据的查询结果之后,还可以由服务器101将该查询结果发送至终端设备102。

终端设备102,可以在响应用户操作执行数据查询、统计等操作时,向服务器101发送用于从目标数据库中查询目标数据的查询请求,以及,获取由服务器101发送的查询结果。

可以理解的是,图2所示的实施环境仅是解释性的,并且决不是为了要限制本公开、其应用或用途。例如,尽管图2仅示出一个服务器101和一个终端设备102,但不意味着限制各自的数量,该实施环境中可以包含多个服务器101以及多个终端设备102;另外,在图2中,是以数据请求由终端设备102发送至服务器101为例,该数据请求当然也可以由其他应用服务器发送至服务器101。

为解决相关技术中存在的问题,以提升基于文档型数据库,例如ES数据库作为搜索引擎时得到的查询结果,即搜索结果的准确性,本公开实施例提供一种数据处理方法,请参看图3和图4a,其分别为本公开实施例提供的一种数据处理方法的流程图,以及,本公开实施例提供的一种数据处理的第一框图。该方法可以应用于服务器中,例如可以应用于如图2所示的服务器101中;当然,在实际实施时,也可以根据需要将该方法应用于终端设备,例如,应用于边缘计算场景的边缘终端设备中,此处不做特殊限定。

如图3,本公开实施例提供的数据处理方法包括如下步骤S301-S303,以下予以详细说明。

步骤S301,接收数据请求;其中,数据请求用于从目标数据库中查询目标数据。

在本公开实施例中,该数据请求可以是客户端发送的、用于从目标数据库查询目标数据的请求;该数据请求可以是客户端,例如图2所示的终端设备102响应用户的数据查询操作或者数据统计操作发送的请求;可以理解的是,在一些实施例中,该客户端也可以是应用服务器。

在本公开实施例中,该目标数据可以为任意数据,例如可以为用于执行数据统计处理的业务数据,此处不做特殊限定。

目标数据库,是指可以作为搜索引擎的文档型数据库。在本公开实施例中,如无特殊说明,以该目标数据库为Elasticsearch,即ES数据库为例进行说明。

步骤S302,获取目标数据库对应的第一预设时长,其中,第一预设时长为目标数据库每执行一次数据刷新处理的间隔时长;数据刷新处理用于将目标数据库缓存的目标数据写入至对应的预设文件中;目标数据为待写入目标数据库的任意数据。

该数据刷新处理,即refresh处理,是目标数据库将处于缓存,即内存缓存区(index buffer)中的任一的待写入数据写入预设文件的处理,该预设文件例如可以为ES数据库中的segment。

在一些实施例中,该第一预设时长可以被设置为1秒,即,目标数据库,例如ES数据库可以每间隔1秒执行一次数据刷新处理,以将缓存的、处于内存缓存区中的数据写入新的segment中。

具体来讲,在实现本公开的过程中,针对相关技术中存在的问题,发明人发现,目标数据库,例如ES数据库在进行数据写入处理时,针对接收到的一条数据,其通常是先将数据作为一个document写入其内存缓存区,即index buffer中,以及同步将该操作记录记录到自身的操作日志,即translog中。

另外,发明人还发现,ES数据库在运行过程中,会根据预设时长1将内存缓存区的数据refresh至预设文件,即写入作为文件系统缓存区,即filesystem cache的一个新的segment中;同时,ES数据库还会在在运行过程中根据预设时长2将文件系统缓存区中的所有document写入,即flush到磁盘存储中,并同步清除translog中与flush到磁盘中的document对应的操作记录。

更进一步地,发明人还发现,ES数据库在进行数据查询时,若待查询的数据处于ES数据库内部的文件系统缓存区的某一个segment中,或者,是处于磁盘存储中,则ES数据库往往是能准确查询到该数据的,而如果待查询的数据处于ES数据库的内存缓存区,即indexbuffer中,则ES数据库往往是不能查询到该数据的,从而可能向客户端返回结果为空的错误查询结果。

即,如图4a所示,在t41时刻和与t41时刻间隔第一预设时长的t42时刻,目标数据是处于ES数据库的缓存,即内存缓存区中的,在t41与t42之间的任意t43时刻,ES数据库往往是不能查询到目标数据的,只有在t42时刻ES数据库执行一次数据刷新处理,即refresh处理之后,目标数据才能够被ES数据查询到。

因此,如图4a所示,若在t43时刻,用于执行本公开实施例的数据处理方法的服务器接收到了客户端发送的用于查询目标数据的数据请求,若该服务器响应于该数据请求,直接将该数据请求发送至ES数据库进行查询处理,并在大于t43且小于t42的t44(图中未示出)时刻将查询得到的查询结果发送给客户端,则ES数据库往往并不能响应于该数据请求查询到目标数据,从而服务器只能将结果不够准确的查询结果返回给客户端。

例如,客户端发送的数据请求用于查询的目标数据是用户标识为“user01”的所有订单数据,若t41时刻被写入ES数据库的数据与该目标数据对应,即包含“user01”在距t41时刻的最近时刻新产生的订单数据,则由于在小于t42的任意t43时刻,最新被写入ES数据库的“user01”对应的该部分订单数据是不能被查询到的,因此,在t44时刻,服务器发送给客户端的查询结果是不会包含处于ES数据库的内存缓存区的该部分最新的订单数据的,即,其提供给客户端的查询结果是不够准确,存在误差的。

在相关技术中,往往是忽略该误差,即,忽略查询结果存在的该种误差;或者,是额外耗费工作量在业务编码中添加针对该种误差的额外处理,以针对不能查询到ES数据库的内存缓存区中数据的情况进行处理,存在费时费力的问题;又或者,为了提升ES数据库提供的查询结果的准确性,以牺牲数据的实时性为前提,将ES数据库中数据与业务数据库中数据的同步处理的间隔拉长,例如,每一天执行一次数据同步处理,该种方法虽然相对提升了准确性,但普适性太差。

而在本公开实施例中,在服务器接收到数据请求之后,并不是直接执行该数据请求,而是先获取目标数据库对应的第一预设时长,之后,执行以下步骤S303。

步骤S303,根据第一预设时长,将数据请求延迟发送至目标数据库进行查询处理,以得到与数据请求对应的、包含目标数据的查询结果。

即,在经过上述步骤S302之后,为了保障目标数据库,例如ES数据库响应数据请求进行查询处理得到的查询结果的准确性,如图4a所示,服务器可以在接收到数据请求之后,根据目标数据库每执行一次数据刷新处理的间隔时长,即第一预设时长,将该数据请求延迟发送至目标数据库进行查询处理,例如,可以在大于或等于t42的t45时刻将该数据请求发送至目标数据库,由于在将数据请求至少延迟该第一预设时长后再发送给目标数据库进行查询处理,则在目标数据库在t45时刻接收到该数据请求时,处于目标数据库的缓存的目标数据已被写入预设文件,即写入了一个新的segment,从而不再处于目标数据库的内存缓存区中,因此,目标数据库可以响应于该数据请求,在大于t45时刻的任意t46时刻将与该数据请求对应的查询结果提供给服务器,再由该服务器在t47时刻将该查询结果发送至客户端,由于该数据请求是在被至少延迟第一预设时长后发送至目标数据库的,因此,即使在客户端发送数据请求的时刻,目标数据是处于目标数据库的缓存区的,但因为该数据请求被至少延迟了第一预设时长才发送给目标数据库,因此,目标数据库可以在该延迟时长内,将其缓存的该目标数据至少写入预设文件中,从而可以在延时接收到该数据请求的时刻,查询得到该目标数据,提升查询结果的准确性,避免出现误差。另外,本公开实施例提供的方法可以不需要对目标数据库和业务数据库之间的同步处理做额外处理,也不需要开发人员在业务编码中添加额外处理,从而可以在保障目标数据库与业务数据库之间数据一致性以及不需要额外耗费大量时间的前提下,提升目标数据库的查询结果的准确性。

需要说明的是,在图4a中,仅对目标数据库缓存数据以及执行的数据刷新处理进行了示意性说明,可以理解的是,该目标数据库在接收到目标数据之后,也可以将该目标数据对应的操作记录写入translog,以及,在间隔预设时长,例如30分钟后也可以将文件系统缓存区中的所有document写入磁盘存储中。

在一些实施例中,步骤S303中所述的根据第一预设时长,将数据请求延迟发送至目标数据库进行查询处理,可以是在接收到该数据请求之后,将用于处理该数据请求的线程休眠该第一预设时长,例如,sleep(第一预设时长),该种方法虽然会损失一部分性能,但是可以在保障目标数据库中数据与业务数据库中数据一致性的同时,还提升查询结果的准确性。当然,此处仅为举例说明,在实际实施时,也可以根据其他方式将该数据请求延迟发送至目标数据库进行查询处理,此处不做特殊限定。

可见,基于本公开实施例提供的数据处理方法,在服务器在接收到用于从目标数据库中查询目标数据的数据请求之后,并不直接控制目标数据库对该数据请求进行响应,而是先获取目标数据库对应的第一预设时长,即目标数据库用于执行一次数据刷新处理的间隔时长,并根据该第一预设时长对该数据请求进行延迟发送,以在目标数据库执行一次数据刷新处理之后再对该数据请求进行响应处理。由于被写入目标数据库的目标数据往往并不能立刻就被查询到,因此,若在将目标数据写入目标数据库的同时,还响应于接收到的数据请求,立刻将该数据请求发送至目标数据库进行查询处理,则往往并不能准确查询到该目标数据;为此,本公开通过在接收到数据请求之后根据目标数据库执行一次数据刷新处理的间隔时长对该数据请求进行延迟发送处理,以延缓目标数据库响应该数据请求的时间,使得目标数据库在接收到该数据请求的时刻,将该时刻处于目标数据库的缓存中的该目标数据写入至对应的预设文件中;之后,通过延时将数据请求发送至目标数据库进行查询处理,就能够得到包含该目标数据的查询结果,从而提升目标数据库响应数据请求提供的查询结果,即搜索结果的准确性。

请参看图4b和图5,其分别为本公开实施例提供的一种数据处理的第二框图,以及,本公开实施例提供的用于延迟发送数据请求的流程图。如图5所示,在一些实施例中,上述步骤S303中的根据第一预设时长,将数据请求延迟发送至目标数据库进行查询处理,包括:

步骤S501,根据第一预设时长和数据请求,生成目标延迟消息;以及,步骤S502,将目标延迟消息写入目标延迟队列,其中,目标延迟队列用于缓存待延迟发送的数据请求。

目标延迟消息,可以是用于对数据请求至少延时第一预设时长的任务消息,即在生成该目标延迟消息时,针对该数据请求设置的延时时长可以为该第一预设时长,也可以大于该第一预设时长,此处不做特殊限定。例如,在第一预设时长为1秒的情况下,对该数据请求设置的延时时长可以为1秒,也可以为2秒或者其他任意大于1秒的时长。

目标延迟队列,是用于存储延迟消息的队列;其中,在该目标延迟队列中,任一待延迟发送的延迟消息,是指设置有延迟时长的任务消息,即,该队列中的任一任务消息只有在达到被设置的延时时长的情况下,才能够被外部应用读取到。

例如,针对目标延迟队列中的延迟消息1,若该延迟消息1被设置的延时时长为10分钟,则在该延迟消息1被写入该目标延迟队列之后;在该目标延迟队列之中,响应于接收到的该延迟消息1,会先将该延迟消息1对应的日志记录写入用于异常恢复的commitlog中,同时,根据其被设置的延迟时长,将该延迟消息1放入目标延迟队列内部与该延迟时长对应的计划队列,即SCHEDULE_TOPIC中进行延迟等待处理;在延迟等待时长内,外部应用在从目标延迟队列中读取待处理的消息时,并不能获取到处于该SCHEDULE_TOPIC中进行延迟等待处理的延迟消息,即并不能读取到该延迟消息1;只有在延迟消息1达到设置的延时时长,即10分钟之后,该延迟消息1才会被写入可被外部应用读取到的DELAY_TOPIC中,在该延迟消息1被从对应的SCHEDULE_TOPIC写入DELAY_TOPIC后,当目标延迟队列接收到外部应用发送的消息去读请求之后,该延迟消息1才能够被成功读取。当然,在延迟消息1被外部应用成功读取之后,目标延迟队列会从commitlog中删除该延迟消息1对应的日志记录。可以理解的是,在延迟消息1被写入目标延迟队列并被成功读取之前,若目标延迟队列发生了异常,则可以在目标延迟队列重新启动时基于commitlog中与该延迟消息1对应的日志记录对其进行数据恢复处理,其详细处理过程此处不再赘述。

该目标延迟队列可以由用户自定义实现,或者,也可以为基于RocketMQ或者RabbitMQ等消息中间件实现的队列,此处不做特殊限定。

步骤S503,按照第一预设读取机制对目标延迟队列执行消息读取操作,并在读取到目标延迟消息的情况下,将目标延迟消息中的数据请求发送至目标数据库进行查询处理;其中,第一预设读取机制用于从目标延迟消息队列中读取被延迟的时长大于或等于第一预设时长的延迟消息。

即,在经过步骤S501和步骤S502将与接收到的数据请求对应的目标延迟消息写入目标延迟队列之后,服务器可以通过从该目标延迟队列中读取消息的方式,来对达到延迟时间的延迟消息进行响应处理,例如,可以在目标延迟消息被延时第一预设时长之后,从目标延迟队列中读取该目标延迟消息,并从该目标延迟消息中读取该数据请求,以及将该数据请求发送至目标数据库进行查询处理。

相较于相关技术中在提升目标数据库的查询结果的准确性时,所使用的延长目标数据库与业务数据库的数据同步间隔,或者牺牲数据一致性的方法,基于本公开实施例提供的该数据处理方法,可以在保障目标数据库与业务数据库中数据一致性的同时,还提升目标数据库提供的查询结果的准确性;另外,相较于在服务器接收到客户端发送的数据请求之后,将处理该数据请求的线程休眠第一预设时长后再唤醒该线程继续处理该数据请求的方法,基于本公开实施例提供的该方法可以在不损失处理性能的情况下,高效且准确的得到数据请求对应的查询结果。

在一些实施例中,如图4b所示,上述步骤S502中的将目标延迟消息写入目标延迟队列,包括:基于第一线程将目标延迟消息写入目标延迟队列;相对应的,上述步骤S503中的按照第一预设读取机制对目标延迟队列执行消息读取操作,包括:基于第二线程按照第一预设读取机制对目标延迟队列执行消息读取操作,其中,第一线程和第二线程为并行执行的不同线程。

即,在本公开实施例中,用于向目标延迟队列中写延迟消息,即用于生产延迟消息的第一线程可以与用于从目标延迟队列中读取延迟消息,即消费延迟消息的第二线程可以为不同的线程(thread),从而将接收数据请求进行延迟处理的处理和从目标延迟队列中读取延迟消息的处理从同步操作该为异步操作,以进一步提升服务器的数据处理能力。

在一些实施例中,上述步骤S301中的接收数据请求,包括:在对目标数据库执行数据同步处理的过程中,接收数据请求;其中,数据同步处理用于将被实时写入业务数据库中的业务数据同步至目标数据库,业务数据包括目标数据。

在本公开实施例中,业务数据库例如可以为mysql数据库。

即,在本公开实施例中,为了保障目标数据库与业务数据库中数据的一致性,以使得目标数据库提供的查询结果中包括业务数据库中实时生成的业务数据。可以如图4b所示的,在任意时刻均对目标数据库和业务数据库执行数据同步处理,因此,上述步骤S301中接收数据请求的处理可以是服务器在对目标数据库执行数据同步处理的过程中,同步接收到的数据请求。

请继续参看图4b,在一些实施例中,所述对目标数据库执行的数据同步处理,包括:获取与业务数据库对应的数据变更信息,其中,数据变更信息用于记录业务数据库中业务数据的变更信息;将与数据变更信息对应的业务数据写入至目标数据库。

数据变更消息,可以是表征业务数据库中业务数据的变更情况的信息,其中,在本公开实施例中,业务数据的变更,可以是指在业务数据库中新生成(即insert)一条业务数据,也可以是对业务数据库中的既有业务数据进行更新(即update)一条业务数据,或者是从业务数据库中删除(即delete)一条业务数据。

如图4b所示,区别于相关技术中在进行数据同步处理时,按照预设时间间隔,例如,每间隔10分钟或者60分钟从业务数据库中批量拉取增量的业务数据的处理;在本公开实施例中,为了尽可能提升目标数据库和业务数据库中数据的一致性,可以是通过获取业务数据库对应的数据变更消息的方式,将该数据变更信息对应的业务数据写入目标数据库。

例如,若业务数据库中新生成了一条业务数据1,则可以通过获取该业务数据1对应的数据变更信息,并根据该数据变更信息,将该业务数据1同步写入目标数据库。

请继续参看图4b,在一些实施例中,所述获取与业务数据库对应的数据变更信息,包括:按照第二预设读取机制对预设消息队列执行消息读取操作,得到待处理的数据变更消息;其中,预设消息队列用于存储与业务数据库对应的数据变更消息;第二预设读取机制用于从预设消息队列中读取待处理的数据变更消息;从待处理的数据变更消息中,得到数据变更信息。

该预设消息队列可以为任意用于存储待处理的数据变更消息的队列,此处不做特殊限定。

该第二预设读取机制可以为按照预设时间间隔从预设消息队列中读取待处理的数据变更消息,此处不做特殊限定。

其中,如图4b所示,在该种实施方式中,该预设消息对列中的数据变更消息可以通过以下处理得到:检测业务数据库对应的预设日志文件的变更信息,得到数据变更信息;根据数据变更信息,生成数据变更消息,并将数据变更消息写入至预设消息队列。

在业务数据库为mysql数据库的情况下,该预设日志文件可以为binlog,即以事件形式记录对业务数据执行更改的所有操作的日志文件。

以业务数据库为mysql为例,在实际实施时,可以先开通mysql的binlog,即修改mysql的my.ini文件并添加配置“log_bin=mysql-bin”;之后,可以基于mysql的主从复制原理,在mysql执行数据变更操作,并将该数据变更操作记录到binlog之后,通过同步检测该binlog的变更信息,得到该数据变更信息,并根据该数据变更信息生成数据变更消息,以及将该数据变更消息存储至预设消息队列,以使得用于执行本公开实施例所述方法的服务器通过从该预设消息队列中读取数据变更消息,得到该数据变更信息,并将该数据变更信息对应的业务数据写入目标数据库,例如ES数据库中。可以理解的是,在检测binlog的变更信息时,可以是在得到mysql的主数据库,即master的授权后进行该检测处理。

需要说明的是,本公开实施例是以业务数据库为mysql为例,说明如何实时检测其数据变更信息,并基于该数据变更信息实现业务数据库和目标数据库中数据的一致性;在实际实施时,也可以基于其他方法实现该数据同步处理;或者,在业务数据库为其他数据库的情况下,也可以基于类似原理实现该数据同步处理,此处不做特殊限定。

可见,在本公开实施例提供的数据处理方法中,在对目标数据库执行数据同步处理时,通过检测业务数据库的预设日志文件中的变更信息,生成对应数据变更信息;以及通过生成该数据变更信息对应的数据变更消息,以及由服务器按照第二预设读取机制从用于存储该数据变更消息的预设消息队列中读取该消息的方式进行数据同步处理,可以实现低时延的数据同步处理,并且采用预设消息队列缓存待处理的数据变更消息,还可以避免因数据量突增而造成系统崩溃的问题。

可以理解,本公开提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本公开不再赘述。本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。

此外,本公开还提供了数据处理装置、电子设备、计算机可读存储介质,上述均可用来实现本公开提供的任一种数据处理方法,相应技术方案和描述和参见方法部分的相应记载,不再赘述。

图6为本公开实施例提供的一种数据处理装置的框图。

参照图6,本公开实施例提供了一种数据处理装置,该数据处理装置600包括:接收单元601、获取单元602和发送单元603。

该接收单元601,用于接收数据请求;其中,数据请求用于从目标数据库中查询目标数据。

该获取单元602,用于获取目标数据库对应的第一预设时长,其中,第一预设时长为目标数据库每执行一次数据刷新处理的间隔时长;数据刷新处理用于将目标数据库缓存的目标数据写入至对应的预设文件中;目标数据为待写入目标数据库的任意数据。

该发送单元603,用于根据第一预设时长,将数据请求延迟发送至目标数据库进行查询处理,以得到与数据请求对应的、包含目标数据的查询结果。

在一些实施例中,该发送单元603在根据第一预设时长,将数据请求延迟发送至目标数据库进行查询处理时,可以用于:根据第一预设时长和数据请求,生成目标延迟消息;将目标延迟消息写入目标延迟队列,其中,目标延迟队列用于缓存待延迟发送的数据请求;按照第一预设读取机制对目标延迟队列执行消息读取操作,并在读取到目标延迟消息的情况下,将目标延迟消息中的数据请求发送至目标数据库进行查询处理;其中,第一预设读取机制用于从目标延迟消息队列中读取被延迟的时长大于或等于第一预设时长的延迟消息。

在一些实施例中,该发送单元603在将目标延迟消息写入目标延迟队列时,可以用于:基于第一线程将目标延迟消息写入目标延迟队列;在该种实施方式中,该发送单元603在按照第一预设读取机制对目标延迟队列执行消息读取操作时,可以用于:基于第二线程按照第一预设读取机制对目标延迟队列执行消息读取操作,其中,第一线程和第二线程为并行执行的不同线程。

在一些实施例中,该接收单元601在接收数据请求时,可以用于:在对目标数据库执行数据同步处理的过程中,接收数据请求;其中,数据同步处理用于将被实时写入业务数据库中的业务数据同步至目标数据库,业务数据包括目标数据。

在一些实施例中,该装置600还包括同步单元,该同步单元在执行数据同步处理时,可以用于:获取与业务数据库对应的数据变更信息,其中,数据变更信息用于记录业务数据库中业务数据的变更信息;将与数据变更信息对应的业务数据写入至目标数据库。

在一些实施例中,该同步单元在获取与业务数据库对应的数据变更信息时,可以用于:按照第二预设读取机制对预设消息队列执行消息读取操作,得到待处理的数据变更消息;其中,预设消息队列用于存储与业务数据库对应的数据变更消息;第二预设读取机制用于从预设消息队列中读取待处理的数据变更消息;从待处理的数据变更消息中,得到数据变更信息。

在一些实施例中,该装置还包括检测单元,用于:检测业务数据库对应的预设日志文件的变更信息,得到数据变更信息;根据数据变更信息,生成数据变更消息,并将数据变更消息写入至预设消息队列。

图7为本公开实施例提供的一种电子设备的框图。

参照图7,本公开实施例提供了一种电子设备,该电子设备700包括:至少一个处理器701;至少一个存储器702,以及一个或多个I/O接口703,连接在处理器701与存储器702之间;其中,存储器702存储有可被至少一个处理器701执行的一个或多个计算机程序,一个或多个计算机程序被至少一个处理器701执行,以使至少一个处理器701能够执行上述的数据处理方法。

本公开实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序在被处理器执行时实现上述的数据处理方法。计算机可读存储介质可以是易失性或非易失性计算机可读存储介质。

本公开实施例还提供了一种计算机程序产品,包括计算机可读代码,或者承载有计算机可读代码的非易失性计算机可读存储介质,当所述计算机可读代码在电子设备的处理器中运行时,所述电子设备中的处理器执行上述数据处理方法。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读存储介质上,计算机可读存储介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。

如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读程序指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM)、静态随机存取存储器(SRAM)、闪存或其他存储器技术、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读程序指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

这里所描述的计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。

这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本文已经公开了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其他实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本公开的范围的情况下,可进行各种形式和细节上的改变。

相关技术
  • 用于数据程序化操作的电源供应器及其电源供应方法
  • 用于灯串的电源供应线以及电源供应装置
  • 用于灯串的电源供应线以及电源供应装置
技术分类

06120116518188