CN118227044A - 数据处理方法、装置和电子设备 - Google Patents
数据处理方法、装置和电子设备 Download PDFInfo
- Publication number
- CN118227044A CN118227044A CN202410212066.0A CN202410212066A CN118227044A CN 118227044 A CN118227044 A CN 118227044A CN 202410212066 A CN202410212066 A CN 202410212066A CN 118227044 A CN118227044 A CN 118227044A
- Authority
- CN
- China
- Prior art keywords
- data
- storage engine
- writing
- reading
- read
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 44
- 238000000034 method Methods 0.000 claims abstract description 56
- 238000012545 processing Methods 0.000 claims abstract description 11
- 230000005012 migration Effects 0.000 abstract description 16
- 238000013508 migration Methods 0.000 abstract description 16
- 230000008569 process Effects 0.000 abstract description 13
- 238000004891 communication Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000012954 risk control Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据处理方法、装置和电子设备,该方法包括:接收数据写入指令,确定待写入的第一目标数据;将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。该方式减少了数据迁移过程中磁盘的读写次数,提高了存储引擎的数据操作效率,提升了用户的业务体验。
Description
技术领域
本发明涉及计算机网络领域,尤其是涉及一种数据处理方法、装置和电子设备。
背景技术
业务***中通常配置有存储引擎。当需要更换存储引擎时,需要考虑将旧存储引擎中的数据转移至新存储引擎,新存储引擎会产生频繁的数据操作,新存储引擎的IO接口占用率较高,容易导致业务***卡顿,对用户的业务操作响应缓慢,影响用户的业务体验。
发明内容
有鉴于此,本发明的目的在于提供一种数据处理方法、装置和电子设备,以提高业务操作响应速度,提升用户的业务体验。
第一方面,本发明实施例提供了一种数据处理方法,该方法应用于业务***;该业务***中运行有第一存储引擎和第二存储引擎,第一存储引擎中存储有业务***的历史数据;第二存储引擎在第一存储引擎之后接入业务***;第二存储引擎配置有缓存队列;该方法包括:接收数据写入指令,确定待写入的第一目标数据;将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。
第二方面,本发明实施例提供了一种数据处理装置,该装置设置于业务***;业务***中运行有第一存储引擎和第二存储引擎,第一存储引擎中存储有业务***的历史数据;第二存储引擎在第一存储引擎之后接入业务***;第二存储引擎配置有缓存队列;第一确定模块,用于接收数据写入指令,确定待写入的第一目标数据;第一设置模块,用于将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;第二确定模块,用于将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。
第三方面,本发明实施例提供了一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述数据处理方法。
第四方面,本发明实施例提供了一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述数据处理方法。
本发明实施例带来了以下有益效果:
本发明实施例提供了一种数据处理方法,该方法包括:接收数据写入指令,确定待写入的第一目标数据;将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。该方式中,接入新存储引擎的业务***,在接收到接收数据写入指令后,首先将待写入数据写入该存储引擎对应的缓存队列中,待满足指定条件后,再将缓存队列中的数据统一写入新存储引擎中,实现业务数据的稳定迁移。该方式减少了数据迁移过程中磁盘的读写次数,提高了存储引擎的数据操作效率,提升了用户的业务体验。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据处理方法的流程图;
图2为本发明实施例提供的一种存储引擎的数据写入操作的示意图;
图3为本发明实施例提供的一种业务***定时存盘脏数据的流程图;
图4为本发明实施例提供的一种接入存储引擎前后业务***的结构分布示意图;
图5为本发明实施例提供的一种存储引擎的通信架构示意图;
图6为本发明实施例提供的一种业务***中数据写入操作的流程图;
图7为本发明实施例提供的一种业务***中数据读取操作的流程图;
图8为本发明实施例提供的一种数据处理装置的示意图;
图9为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种数据处理方法进行详细介绍。
该方法应用于业务***;该业务***中运行有第一存储引擎和第二存储引擎,第一存储引擎中存储有业务***的历史数据;第二存储引擎在第一存储引擎之后接入业务***;第二存储引擎配置有缓存队列;在这里,业务***可以是游戏引擎,上述存储引擎可以是键值对存储引擎,例如LevelDB存储引擎、RocksDB存储引擎、LotusDB存储引擎和EasyFabao存储引擎等等,这些存储引擎是以键值对的形式存储数据。缓存队列可以设置在业务***的底层,缓存队列用于临时存储数据并进行高效的读写操作,示例地,缓存队列可以是LRU(Least Recently Used,最近最少使用)缓存队列。
下面对本发明实施例所公开的一种流量数据的处理方法进行详细介绍,如图1所示:
步骤S102、接收数据写入指令,确定待写入的第一目标数据;
业务***通过数据写入接口接收数据写入指令,接收到数据写入指令后,业务***通过数据写入接口调用存储引擎的引擎访问接口,实现业务***与存储引擎的通信,在这里,引擎访问接口提供了对存储擎数据库的连接、查询和写入等操作的方法和属性。
本步骤中,可以通过数据写入接口接收数据写入指令,通过数据写入指令,确定待写入的第一目标数据。
步骤S104、将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;
上述缓存队列,可以是LRU(Least Recently Used,最近最少使用)缓存队列,该缓存队列就是要保证那些最近才被用到的数据始终在缓存队列内,而将已经很久没有用的数据剔除,实现缓存队列内数据的动态维护。
在这里,将待写入的第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识,脏数据标识用于指示:该第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎。在这里,满足指定条件,可以是满足指定时间期限,例如:指定时长后,对设置有脏数据标识的数据进行合并写入第二存储引擎;满足指定条件也可以是满足其他条件,例如,缓存队列中的第一目标数据达到预设容量后,对设置有脏数据标识的数据进行合并写入第二存储引擎。
一种实现方式中,在业务***的底层,例如C/C++层,添加有LRU缓存队列和脏数据列表,业务***确定待写入的第一目标数据后,对第一目标数据进行处理,以解析出第一目标数据的数据关键字key和与数据关键字对应的value值,第一目标数据以键值对key-value的方式,写入业务***底层的LRU缓存队列,并对写入的第一目标数据设置脏数据标识,将第一目标数据标记为脏状态,设置了脏数据标识的数据会被记录在脏数据列表中,脏数据列表用于指示缓存队列中设置了脏数据标识的数据,业务***会定时从脏数据列表中将属于同一数据关键字的目标数据进行合并,写入第二存储引擎。
该步骤中,在业务***接入新的存储引擎后,先将待写入的目标数据写入第二存储引擎的缓存队列中,确保不会因为应用层多次连续的写入操作导致业务***底层每次都写入第二存储引擎对应的数据库中,待满足指定条件后,再将缓存队列中的目标数据统一写入新的存储引擎中,实现数据的稳定迁移。该方式减少了数据迁移过程中磁盘的读写次数,提高了存储引擎的数据操作效率。
步骤S106、将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。
为了防止接入第二存储引擎后出现第二存储引擎性能不稳定的情况,导致写入的数据被丢失的风险,还会将第一目标数据同时写入第一存储引擎中,在第一目标数据写入第一存储引擎后,确定业务***的数据写入指令执行结束。
上述数据处理方法,接收数据写入指令,确定待写入的第一目标数据;将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。该方式中,接入新存储引擎的业务***,在接收到接收数据写入指令后,首先将待写入数据写入该存储引擎对应的缓存队列中,待满足指定条件后,再将缓存队列中的数据统一写入新存储引擎中,实现数据的稳定迁移。该方式减少了数据迁移过程中磁盘的读写次数,提高了存储引擎的数据操作效率,提升了用户的业务体验。另外,为了避免数据丢失的风险,还将目标数据同时写入新存储引擎接入之前业务***已存在的存储引擎中,提升了用户的业务体验。
一种方式中,每隔指定时长,检查缓存队列中是否存在设置有脏数据标识的第二目标数据;如果存在设置有脏数据标识的第二目标数据,将第二目标数据进行合并,得到合并数据;将合并数据写入到第二存储引擎中。
在这里,业务***每隔指定时长,可以通过脏数据列表确定缓存队列中是否存在设置有脏数据标识的目标数据,脏数据列表处于动态更新状态,一个实现方式中,如果在该指定时长内,脏数据列表显示有该缓存队列中数据对应的数据关键字,说明缓存队列中存在设置有脏数据标识的目标数据,通过脏数据列表查询到设置有脏数据标识的数据后,业务***会将属于同一个数据关键字的数据进行合并,得到合并数据,然后将合并数据写入第二存储引擎中。
一种实现方式中,将第二目标数据中,属于同一数据关键字的第二目标数据进行合并,得到每个数据关键字对应的合并数据;针对每个数据关键字执行一次数据写入操作,以将数据关键字对应的合并数据写入到第二存储引擎中。
一个实施例中,对于kv(Key-Value,键值对)存储引擎,利用数据关键字做索引来实现数据的存储、修改、查询和删除功能,目标数据以键值对key-value的方式写入缓存队列,每个目标数据由一个唯一的数据关键字和对应的值组成。因此,对于设置有脏数据标识的第二目标数据,第二存储引擎会根据数据关键字的唯一性来定位相同数据关键字对应的值,合并后,得到每个数据关键字对应的合并数据,然后,针对每个数据关键字执行一次数据写入操作,以将数据关键字对应的合并数据写入到第二存储引擎中。
进一步地,将合并数据写入到第二存储引擎中之后,在缓存队列中,将第二目标数据的脏数据标识删除。
可以理解的,合并数据写入到第二存储引擎中之后,将第二目标数据的脏数据标识删除,实现数据的动态维护,相应的,在第二目标数据的脏数据标识删除后,脏数据列表中也自动清除第二目标数据的记录。
下述实施例提供第一目标数据写入缓存队列的实现方式。
业务***的业务层封装有数据写入接口,第一存储引擎预设有第一引擎访问接口;第二存储引擎预设有第二引擎访问接口,通过数据写入接口接收数据写入指令;将第一目标数据写入缓存队列中的方式包括:通过数据写入接口调用第二引擎访问接口,以将第一目标数据写入缓存队列中;将第一目标数据写入第一存储引擎中的方式,包括:通过数据写入接口调用第一引擎访问接口,以将第一目标数据写入第一存储引擎中。
也就是说,业务***通过数据写入接口接收数据写入指令,接收到数据写入指令后,业务***通过数据写入接口调用引擎访问接口,实现与各存储引擎的通信。
一种方式中,对于第一目标数据写入缓存队列中的过程,可以通过数据写入接口调用第二引擎访问接口,以将第一目标数据写入缓存队列中;实际实现时,可以在业务***上层封装好数据写入接口,例如set接口,通过该写入接口调用第二引擎访问接口,将第一目标数据写入缓存队列中。
一种方式中,对于第一目标数据写入第一存储引擎中的过程,可以通过数据写入接口调用第一引擎访问接口,该数据写入接口,可以是底层的存储引擎API(ApplicationProgram Interface,应用程序编程接口)接口,通过API接口将第一目标数据写入第一存储引擎中,需要说明的是,调用底层的存储引擎API接口需要时间进行调试,以确保API接口调用没有问题。
在第二存储引擎中,目标数据可以通过在上层封装好数据读取set接口,将目标数据写入缓存队列中,第二存储引擎采用set接口而非底层的存储引擎API接口,可以屏蔽底层的存储引擎API带来的不一致性,保证了对上层开发透明,不需要额外的时间成本去适配API。
一种方式中,业务***中预设有第一指定数据关键字;在缓存队列中为第一目标数据设置脏数据标识之前,还需要确定第一目标数据的数据关键字是否属于第一指定数据关键字;如果第一目标数据的数据关键字属于第一指定数据关键字,执行下述步骤:将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;将第一目标数据写入第二存储引擎中;如果第一目标数据的数据关键字不属于第一指定数据关键字,执行下述步骤:将第一目标数据写入第一存储引擎中。
也就是说,通过第一目标数据的数据关键字是否属于业务***中的第一指定数据关键字,来确定使用第二存储引擎中还是第一存储引擎存储数据。
一种方式中,可以通过为业务***设置白名单,将白名单内的数据关键字作为第一指定数据关键字,为了实现第一存储引擎数据向第二存储引擎数据的稳定迁移,白名单来自于业务***中已有的用户数据,可以根据用户需要进行设置,如果第一目标数据的数据关键字属于第一指定数据关键字,将第一目标数据写入第二存储引擎对应的缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;待满足指定条件后,将第一目标数据写入第二存储引擎中。如果第一目标数据的数据关键字不属于第一指定数据关键字,直接将第一目标数据写入第一存储引擎中。
相应的,存储引擎还具有读取数据的功能。一种方式中,接收数据读取指令,确定待读取数据的数据关键字;基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据。
上述缓存队列,可以是LRU(Least Recently Used,最近最少使用)缓存队列,该缓存队列就是要保证那些最近才被用到的数据始终在缓存队列内,而将已经很久没有用的数据剔除,实现缓存队列内数据的动态维护。
在这里,数据以键值对key-value的方式存储在存储引擎中,业务***通过数据读取接口接收数据读取指令,接收到数据读取指令后,根据数据读取指令确定待读取数据的数据关键字,以通过待读取数据的数据关键字获取数据关键字对应的value值,从而得到该键值对对应的数据,作为读取结果。
第二存储引擎接入业务***后,为了验证第二存储引擎的读取效率,可以将待读取数据的数据关键字分别在第一存储引擎中和第二存储引擎中查找并读取,得到第二读取结果和第一读取结果,但读取结果仍以第一存储引擎对应的第二读取结果为准,即,基于第二读取结果确定待读取数据的数据关键字对应的待读取数据。
一种方式中,确定第一读取结果与第二读取结果不同,生成第二存储引擎对应的数据读取错误信息。
也就是说,如果第一结果和第二读取结果不同,业务***会生成数据读取错误信息提示用户,数据读取错误信息用于提醒用户第二存储引擎的第一读取结果读取错误。
一种方式中,业务***的业务层封装有数据读取接口;第一存储引擎预设有第一引擎访问接口;第二存储引擎预设有第二引擎访问接口;通过数据读取接口接收数据读取指令;基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果的方式包括:通过数据读取接口调用第二引擎访问接口,以基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果的方式包括:通过数据读取接口调用第一引擎访问接口,以基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果。
也就是说,业务***通过数据读取接口接收数据读取指令,接收到数据读取指令后,业务***通过数据读取接口调用引擎访问接口与存储引擎进行通信。
一种方式中,对于从第二存储引擎中读取第一读取结果的过程,可以通过数据读取接口调用get接口,通过该读取接口调用第二引擎访问接口,从第二存储引擎中找到待读取数据的数据关键字对应的value值,从而得到该键值对对应的数据,作为第一读取结果。
一种方式中,对于从第一存储引擎中读取第二读取结果的过程,可以通过数据读取接口调用第二引擎访问接口,该数据读取接口,可以是底层的存储引擎API接口,通过API接口从第一存储引擎中找到待读取数据的数据关键字对应的value值,从而得到该键值对对应的数据,作为第二读取结果。
第二存储引擎中可以通过在上层封装好的数据get接口,获取数据关键字对应的value值,从而得到键值对对应的存储数据,作为第一读取结果,返回给用户,该方式可以屏蔽底层的存储引擎API带来的不一致性,保证了对上层开发透明,不需要额外的时间成本去适配API。
一种方式中,业务***中预设有第二指定数据关键字,从第二存储引擎中读取数据,得到第一读取结果的之前,还需要确定待读取数据的数据关键字是否属于第二指定数据关键字;如果待读取数据的数据关键字属于第二指定数据关键字,执行下述步骤:基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第二目标数据;如果待读取数据的数据关键字不属于第二指定数据关键字,执行下述步骤:基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据。
也就是说,通过待读取数据的数据关键字是否属于业务***中的第二指定数据关键字,来确定使用第二存储引擎还是第一存储引擎读取数据。
一种方式中,也可以为业务***设置读取白名单,将白名单内的数据关键字作为第二指定数据关键字,白名单来自于业务***中已有的用户数据,用户可以根据需要进行设置。
在这里,如果待读取数据的数据关键字属于第二指定数据关键字,从第二存储引擎中确定待读取数据的数据关键字对应的值,得到第一读取结果。如果待读取数据的数据关键字不属于第二指定数据关键字,根据待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果。
在业务***更换存储引擎时,通常会考虑如下因素:数据格式兼容性、开发者透明性、数据迁移,且需要对比不同存储引擎之间的性能,一般地额,存储引擎都会提供写入和读取接口给上层使用者,此时较常见的做法是开发者处理数据格式、接口、迁移等事项,最终放出到生产环境验证效果。
现有技术中,在接入新的存储引擎时,需要考虑到数据迁移、数据格式兼容性、开发透明性等因素,替换存储引擎时的风险较大。因此,需要在存储引擎之上进行性能优化,在可控范围内以尽可能低的风险外放变更,最终能够在对用户无感的情况下,接入新的存储引擎,并实现实现数据向新接入的存储引擎转移。
下述提供一个更换kv存储引擎的详细实施例,该实施例中,以业务***为游戏引擎为例,第二存储引擎在第一存储引擎之后接入业务***。实施例中,从性能优化和风险控制两个方面入手,在存储引擎之上进行性能优化,在可控范围内以尽可能低的风险外放变更,最终能够在对用户无感的情况下,替换新的数据存储引擎。
1、性能优化方面
第二存储引擎在第一存储引擎之后接入业务***,第二存储引擎配置有缓存队列,例如LRU缓存队列,在这里,创建的LRU缓存队列有指定的容量,并提供了get和set方法来完成数据的查询和添加操作。添加的数据以键值对key-value的方式,写入LRU缓存队列后,为写入的数据设置脏数据标识,标记该数据为脏数据状态,待缓存队列运行指定时长,或者当缓存队列容量满时,把最近最少使用的数据写入到第二存储引擎,存储到第二存储引擎对应的数据库中,然后,将写入第二存储引擎的数据从队列中移除,实现缓存队列内数据的动态维护。该方式下,确保不会因为业务***中应用层的多次写入操作导致每次都写入存储引擎对应的数据库中,提升写入速度。
另外,由于数据以键值对key-value的方式写入缓存队列,每个目标数据由一个唯一的数据关键字和对应的值组成。因此,对于设置有脏数据标识的数据,第二存储引擎会根据数据关键字的唯一性来定位相同数据关键字对应的值,合并后,得到每个数据关键字对应的合并数据,这样,数据落盘时,对业务***的业务层多次写入某个数据关键字的操作进行合并,可以减少IO次数。
2、风险控制:在可控范围内以尽可能低的风险外放变更
在第二存储引擎接入第一存储引擎后,需要考虑到数据迁移、数据格式兼容性、开发透明性等因素,为了尽可能降低上述因素带来的影响,为业务***设置空跑期、同步期、转移期、并设置白名单机制,统一接口。
具体如下:
空跑期:第一存储引擎和第二存储引擎在业务***中将会共存一段时间,以保证接入的正确性。
同步期:在使用第一存储引擎写入/读取数据时,同时也使用第二存储引擎执行1次操作,但执行结果依旧采用第一存储引擎作为标准。
转移期:逐步采用第二存储引擎读写数据,范围不断扩大直至覆盖所有数据的数据关键字。
设置白名单机制:为业务***设置白名单,白名单来自于业务***中已有的用户数据,对待同步的数据的数据关键字建立白名单,实现分批同步。
统一接口:在业务上层封装好统一的set和get接口,以屏蔽底层存储引擎的区别,对开发人员是透明的。
在这里,第一存储引擎以Easy Fabao存储引擎为例;第二存储引擎以LevelDB存储引擎为例;业务***以游戏引擎为例,该实施例的实施过程如下:
在LevelDB存储引擎接入之前,游戏引擎的存储引擎为Easy Fabao存储引擎;在游戏引擎中接入LevelDB存储引擎后,为了进一步提升LevelDB存储引擎的写性能带来的收益,在游戏引擎中的C/C++层添加了LRU缓存队列和脏数据列表,脏数据列表用于指示缓存队列中设置了脏数据标识的数据。当接收到数据写入指令后,先将待写入的目标数据写入LevelDB存储引擎的缓存队列中,并在缓存队列中为目标数据设置脏数据标识,待满足指定条件时,将有脏数据标识的数据被合并后写入LevelDB存储引擎,进而存储在LevelDB数据库中,确保不会因为应用层多次连续的写入操作导致引擎底层每次都写入LevelDB数据库。该数据写入操作,对于业务层开发人员来说,是完全透明的,在调用数据写入接口成功后,虽然数据写入了LRU缓存队列中,但最终会写入LevelDB数据库,因此,调用业务层的写入接口成功后,等于执行了LevelDB数据库写入操作。
在LevelDB存储引擎接入之后,游戏引擎主动调用1次LevelDB存储引擎的数据写入流程,该流程如图2所示,该过程可以描述为:游戏引擎接收到数据写入指令,确定待写入的第一目标数据,通过数据set接口调用LevelDB存储引擎访问接口,将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识,并记录在脏数据列表中,最后返回写入成功的信息给用户。
指定时长后,游戏引擎获取脏数据列表,定时存盘脏数据,该过程如图3所示,该过程可以描述为:游戏引擎定时检查脏数据列表,从脏数据列表中获取设置脏数据标识的数据,数据以键值对key-value的方式写入在缓存队列中,每个数据由一个唯一的数据关键字和对应的值组成。因此,对于设置有脏数据标识的数据,LevelDB存储引擎会根据数据关键字的唯一性来定位相同数据关键字对应的值,合并后,得到每个数据关键字对应的合并数据,然后,针对每个数据关键字执行一次数据写入操作,以将数据关键字对应的合并数据写入到LevelDB存储引擎中,然后,将写入LevelDB存储引擎的数据的脏数据标识删除,实现数据的动态维护,相应的,脏数据列表中也自动去除被删除了脏数据标识的数据。
存储引擎进入空跑期:
替换存储引擎会带来额外的风险负担,因此,在转移数据前,在游戏引擎中必须先接入LevelDB存储引擎,且屏蔽该LevelDB存储引擎的所有功能,让它在Easy Fabao存储引擎上一起空跑一段时间,确保没有冲突,此时,游戏引擎的结构分布如图4所示,。
在上层封装好set接口和get接口,通过set接口和get接口接收数据写入指令和数据读取命令,该通信架构如图5所示,该方式可以屏蔽底层的存储引擎API带来的不一致性,保证了对上层开发透明,不需要额外的时间成本去适配API。
进入同步期和转移期:
建立白名单,将白名单内的数据关键字作为指定数据关键字,白名单来自于业务***中已有的用户数据,用户可以根据需要进行设置。在写入数据和读取数据时,判断待写入或待读取的数据对应的数据关键字是否在白名单内去决定是否使用LevelDB存储引擎操作数据,但操作结果以原有的Easy Fabao存储引擎为准。
数据写入流程如图6所示,主要流程图如下所示:
通过set接口接收数据读取指令,调用LevelDB存储引擎访问接口。如果待写入数据的数据关键字属于白名单内的数据关键字,将该数据写入缓存队列中,并在缓存队列中为该数据设置脏数据标识,记录写入结果;待满足指定条件时,将有脏数据标识的数据被合并后写入LevelDB存储引擎,进而存储在LevelDB数据库中。如果待写入数据的数据关键字不属于白名单内的数据关键字,将待写入数据写入Easy Fabao存储引擎中。待写入数据成功写入缓存队列或Easy Fabao存储引擎中后,向用户返回写入成功的提示信息。
数据读取流程如图7所示,主要流程图如下所示:
通过get接口接收数据读取指令,调用LevelDB存储引擎访问接口。如果待读取数据的数据关键字属于白名单内的数据关键字,从LevelDB存储引擎中读取数据,得到第一读取结果。如果待读取数据的数据关键字不属于白名单内的数据关键字,根据待读取数据的数据关键字,从Easy Fabao存储引擎中读取数据,得到第二读取结果;最后,将第二读取结果返回给用户。
该阶段关注LevelDB存储引擎是否能够正常写入和读取数据,如果LevelDB存储引擎出错也会有保底措施,保证线上不会出现重大事故。
上述实施例中,接入新存储引擎的业务***,在接收到接收数据写入指令后,首先将待写入数据写入该存储引擎对应的缓存队列中,待满足指定条件后,再将缓存队列中的数据统一写入新存储引擎中,实现数据的稳定迁移。
另外,为了在可控范围内以尽可能低的风险外放变更,利用空跑期可验证第二存储引擎接入后的正确性和稳定性。通过设置白名单和设置同步期,可以验证新接入的第二存储引擎的写入/读取效率,同时实现数据的转移。在新接入的第二存储引擎中,使用统一的数据接入接口或数据读取接口,消除了开发人员学习新存储引擎的时间成本和开发工作量。
对应于上述方法实施例,参见图8所示的一种数据处理装置的示意图,该装置设置于业务***;业务***中运行有第一存储引擎和第二存储引擎,第一存储引擎中存储有业务***的历史数据;第二存储引擎在第一存储引擎之后接入业务***;第二存储引擎配置有缓存队列;该装置包括:
第一确定模块802,用于接收数据写入指令,确定待写入的第一目标数据;
第一设置模块804,用于将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;
第二确定模块806,用于将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。
该方式中,接入新存储引擎的业务***,在接收到接收数据写入指令后,首先将待写入数据写入该存储引擎对应的缓存队列中,待满足指定条件后,再将缓存队列中的数据统一写入新存储引擎中,实现数据的稳定迁移。该方式减少了数据迁移过程中磁盘的读写次数,提高了存储引擎的数据操作效率,提升了用户的业务体验。
上述装置还包括第一写入模块,用于每隔指定时长,检查缓存队列中是否存在设置有脏数据标识的第二目标数据;如果存在设置有脏数据标识的第二目标数据,将第二目标数据进行合并,得到合并数据;将合并数据写入到第二存储引擎中。
上述第一写入模块,还用于将第二目标数据中,属于同一数据关键字的第二目标数据进行合并,得到每个数据关键字对应的合并数据;针对每个数据关键字执行一次数据写入操作,以将数据关键字对应的合并数据写入到第二存储引擎中。
上述装置还包括第一删除模块,用于在缓存队列中,将第二目标数据的脏数据标识删除。
上述业务***的业务层封装有数据写入接口;第一存储引擎预设有第一引擎访问接口;第二存储引擎预设有第二引擎访问接口;上述第一确定模块,还用于通过数据写入接口接收数据写入指令;
上述第一设置模块,还用于通过数据写入接口调用第二引擎访问接口,以将第一目标数据写入缓存队列中;
上述第二确定模块,还用于通过数据写入接口调用第一引擎访问接口,以将第一目标数据写入第一存储引擎中。
上述业务***中预设有第一指定数据关键字;上述第二写入模块,还用于确定第一目标数据的数据关键字是否属于第一指定数据关键字;如果第一目标数据的数据关键字属于第一指定数据关键字,执行下述步骤:将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;将第一目标数据写入第二存储引擎中;如果第一目标数据的数据关键字不属于第一指定数据关键字,执行下述步骤:将第一目标数据写入第一存储引擎中。
上述装置模块还包括第一读取模块,用于接收数据读取指令,确定待读取数据的数据关键字;接收数据读取指令,确定待读取数据的数据关键字;基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据。
上述装置还包括第一生成模块,用于确定第一读取结果与第二读取结果不同,生成第二存储引擎对应的数据读取错误信息。
上述业务***的业务层封装有数据读取接口;第一存储引擎预设有第一引擎访问接口;第二存储引擎预设有第二引擎访问接口;上述第一读取模块,还用于通过数据读取接口接收数据读取指令;通过数据读取接口调用第二引擎访问接口,以基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;通过数据读取接口调用第一引擎访问接口,以基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果。
上述业务***中预设有第二指定数据关键字;上述装置还包括第三读取模块,用于确定待读取数据的数据关键字是否属于第二指定数据关键字;如果待读取数据的数据关键字属于第二指定数据关键字,执行下述步骤:基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据;如果待读取数据的数据关键字不属于第二指定数据关键字,执行下述步骤:基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据。
本实施例还提供一种电子设备,包括处理器和存储器,存储器存储有能够被处理器执行的计算机可执行指令,处理器执行计算机可执行指令以实现上述数据处理方法。该电子设备可以是服务器,也可以是终端设备。参见图9所示,该电子设备包括处理器100和存储器101,该存储器101存储有能够被处理器100执行的计算机可执行指令,该处理器100执行计算机可执行指令以实现上述数据处理方法。
进一步地,图9所示的电子设备还包括总线102和通信接口103,处理器100、通信接口103和存储器101通过总线102连接。其中,存储器101可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口103(可以是有线或者无线)实现该***网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线102可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。处理器100可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器100中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器100可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器101,处理器100读取存储器101中的信息,结合其硬件完成前述实施例的方法的步骤。
上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:接收数据写入指令,确定待写入的第一目标数据;将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。
该方式中,接入新存储引擎的业务***,在接收到接收数据写入指令后,首先将待写入数据写入该存储引擎对应的缓存队列中,待满足指定条件后,再将缓存队列中的数据统一写入新存储引擎中,实现数据的稳定迁移。该方式减少了数据迁移过程中磁盘的读写次数,提高了存储引擎的数据操作效率,提升了用户的业务体验。
上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:每隔指定时长,检查缓存队列中是否存在设置有脏数据标识的第二目标数据;如果存在设置有脏数据标识的第二目标数据,将第二目标数据进行合并,得到合并数据;将合并数据写入到第二存储引擎中。
上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:将第二目标数据中,属于同一数据关键字的第二目标数据进行合并,得到每个数据关键字对应的合并数据;针对每个数据关键字执行一次数据写入操作,以将数据关键字对应的合并数据写入到第二存储引擎中。
上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:在缓存队列中,将第二目标数据的脏数据标识删除。
上述业务***的业务层封装有数据写入接口;第一存储引擎预设有第一引擎访问接口;第二存储引擎预设有第二引擎访问接口;上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:通过数据写入接口接收数据写入指令;
上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:通过数据写入接口调用第二引擎访问接口,以将第一目标数据写入缓存队列中;
上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:通过数据写入接口调用第一引擎访问接口,以将第一目标数据写入第一存储引擎中。
上述业务***中预设有第一指定数据关键字;上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:确定第一目标数据的数据关键字是否属于第一指定数据关键字;如果第一目标数据的数据关键字属于第一指定数据关键字,执行下述步骤:将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;将第一目标数据写入第二存储引擎中;如果第一目标数据的数据关键字不属于第一指定数据关键字,执行下述步骤:将第一目标数据写入第一存储引擎中。
上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:接收数据读取指令,确定待读取数据的数据关键字;接收数据读取指令,确定待读取数据的数据关键字;基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据。
上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:确定第一读取结果与第二读取结果不同,生成第二存储引擎对应的数据读取错误信息。
上述业务***的业务层封装有数据读取接口;第一存储引擎预设有第一引擎访问接口;第二存储引擎预设有第二引擎访问接口;上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:通过数据读取接口接收数据读取指令;通过数据读取接口调用第二引擎访问接口,以基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;通过数据读取接口调用第一引擎访问接口,以基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果。
上述业务***中预设有第二指定数据关键字;上述电子设备中的处理器,通过执行计算机可执行指令,可以实现上述数据处理方法的下述操作:确定待读取数据的数据关键字是否属于第二指定数据关键字;如果待读取数据的数据关键字属于第二指定数据关键字,执行下述步骤:基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据;如果待读取数据的数据关键字不属于第二指定数据关键字,执行下述步骤:基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据。
本实施例还提供一种计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述数据处理方法。
上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:接收数据写入指令,确定待写入的第一目标数据;将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;其中,脏数据标识用于指示:第一目标数据没有保存至第二存储引擎,当满足指定条件时,设置有脏数据标识的数据被合并后,写入第二存储引擎;将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。
该方式中,第二存储引擎在第一存储引擎之后接入业务***,业务***接收到数据写入指令后,先将待写入的目标数据写入第二存储引擎的缓存队列中,并在缓存队列中为目标数据设置脏数据标识,待满足指定条件时,将有脏数据标识的数据被合并后写入第二存储引擎,同时,将第一目标数据写入第一存储引擎中,确定数据写入指令执行结束。该方式在业务***需要更换存储引擎时,在业务***中接入配置有缓存队列的存储引擎,通过存储引擎对应的缓存队列进行数据的写入操作,待满足指定条件后,再将缓存队列中的数据统一写入存储引擎中,减少了磁盘的IO次数,提升了引擎数据操作效率,提升了用户的业务体验。
上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:每隔指定时长,检查缓存队列中是否存在设置有脏数据标识的第二目标数据;如果存在设置有脏数据标识的第二目标数据,将第二目标数据进行合并,得到合并数据;将合并数据写入到第二存储引擎中。
上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:将第二目标数据中,属于同一数据关键字的第二目标数据进行合并,得到每个数据关键字对应的合并数据;针对每个数据关键字执行一次数据写入操作,以将数据关键字对应的合并数据写入到第二存储引擎中。
上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:在缓存队列中,将第二目标数据的脏数据标识删除。
上述业务***的业务层封装有数据写入接口;第一存储引擎预设有第一引擎访问接口;第二存储引擎预设有第二引擎访问接口;上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:通过数据写入接口接收数据写入指令;
上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:通过数据写入接口调用第二引擎访问接口,以将第一目标数据写入缓存队列中;
上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:通过数据写入接口调用第一引擎访问接口,以将第一目标数据写入第一存储引擎中。
上述业务***中预设有第一指定数据关键字;上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:确定第一目标数据的数据关键字是否属于第一指定数据关键字;如果第一目标数据的数据关键字属于第一指定数据关键字,执行下述步骤:将第一目标数据写入缓存队列中,并在缓存队列中为第一目标数据设置脏数据标识;将第一目标数据写入第二存储引擎中;如果第一目标数据的数据关键字不属于第一指定数据关键字,执行下述步骤:将第一目标数据写入第一存储引擎中。
上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:接收数据读取指令,确定待读取数据的数据关键字;接收数据读取指令,确定待读取数据的数据关键字;基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据。
上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:确定第一读取结果与第二读取结果不同,生成第二存储引擎对应的数据读取错误信息。
上述业务***的业务层封装有数据读取接口;第一存储引擎预设有第一引擎访问接口;第二存储引擎预设有第二引擎访问接口;上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:通过数据读取接口接收数据读取指令;通过数据读取接口调用第二引擎访问接口,以基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;通过数据读取接口调用第一引擎访问接口,以基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果。
上述业务***中预设有第二指定数据关键字;上述计算机可读存储介质存储中的计算机可执行指令,通过执行该计算机可执行指令,可以实现上述数据处理方法中的下述操作:确定待读取数据的数据关键字是否属于第二指定数据关键字;如果待读取数据的数据关键字属于第二指定数据关键字,执行下述步骤:基于待读取数据的数据关键字,从第二存储引擎中读取数据,得到第一读取结果;基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据;如果待读取数据的数据关键字不属于第二指定数据关键字,执行下述步骤:基于待读取数据的数据关键字,从第一存储引擎中读取数据,得到第二读取结果;基于第二读取结果确定待读取数据的数据关键字对应的第三目标数据。
本发明实施例所提供的数据处理方法、装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (13)
1.一种数据处理方法,其特征在于,所述方法应用于业务***;所述业务***中运行有第一存储引擎和第二存储引擎,所述第一存储引擎中存储有所述业务***的历史数据;所述第二存储引擎在所述第一存储引擎之后接入所述业务***;所述第二存储引擎配置有缓存队列;所述方法包括:
接收数据写入指令,确定待写入的第一目标数据;
将所述第一目标数据写入所述缓存队列中,并在所述缓存队列中为所述第一目标数据设置脏数据标识;其中,所述脏数据标识用于指示:所述第一目标数据没有保存至所述第二存储引擎,当满足指定条件时,设置有所述脏数据标识的数据被合并后,写入所述第二存储引擎;
将所述第一目标数据写入所述第一存储引擎中,确定所述数据写入指令执行结束。
2.根据权利要求1所述的方法,其特征在于,将所述第一目标数据写入所述缓存队列中,并在所述缓存队列中为所述第一目标数据设置脏数据标识的步骤之后,所述方法还包括:
每隔指定时长,检查所述缓存队列中是否存在设置有脏数据标识的第二目标数据;
如果存在设置有脏数据标识的第二目标数据,将所述第二目标数据进行合并,得到合并数据;
将所述合并数据写入到所述第二存储引擎中。
3.根据权利要求2所述的方法,其特征在于,将所述第二目标数据进行合并,得到合并数据的步骤,包括:将所述第二目标数据中,属于同一数据关键字的第二目标数据进行合并,得到每个所述数据关键字对应的合并数据;
所述将所述合并数据写入到所述第二存储引擎中的步骤,包括:针对每个所述数据关键字执行一次数据写入操作,以将所述数据关键字对应的合并数据写入到所述第二存储引擎中。
4.根据权利要求2所述的方法,其特征在于,将所述合并数据写入到所述第二存储引擎中的步骤之后,所述方法还包括:在所述缓存队列中,将所述第二目标数据的脏数据标识删除。
5.根据权利要求1所述的方法,其特征在于,所述业务***的业务层封装有数据写入接口;所述第一存储引擎预设有第一引擎访问接口;所述第二存储引擎预设有第二引擎访问接口;
所述接收数据写入指令的步骤,包括:通过所述数据写入接口接收数据写入指令;
所述将所述第一目标数据写入所述缓存队列中的步骤,包括:通过所述数据写入接口调用所述第二引擎访问接口,以将所述第一目标数据写入所述缓存队列中;
所述将所述第一目标数据写入所述第一存储引擎中的步骤,包括:通过所述数据写入接口调用所述第一引擎访问接口,以将所述第一目标数据写入所述第一存储引擎中。
6.根据权利要求1所述的方法,其特征在于,所述业务***中预设有第一指定数据关键字;所述将所述第一目标数据写入所述缓存队列中,并在所述缓存队列中为所述第一目标数据设置脏数据标识的步骤之前,所述方法还包括:
确定所述第一目标数据的数据关键字是否属于所述第一指定数据关键字;
如果所述第一目标数据的数据关键字属于所述第一指定数据关键字,执行下述步骤:将所述第一目标数据写入所述缓存队列中,并在所述缓存队列中为所述第一目标数据设置脏数据标识;将所述第一目标数据写入所述第二存储引擎中;
如果所述第一目标数据的数据关键字不属于所述第一指定数据关键字,执行下述步骤:将所述第一目标数据写入所述第一存储引擎中。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收数据读取指令,确定待读取数据的数据关键字;
基于所述待读取数据的数据关键字,从所述第二存储引擎中读取数据,得到第一读取结果;
基于所述待读取数据的数据关键字,从所述第一存储引擎中读取数据,得到第二读取结果;
基于所述第二读取结果确定所述待读取数据的数据关键字对应的第三目标数据。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
确定所述第一读取结果与所述第二读取结果不同,生成所述第二存储引擎对应的数据读取错误信息。
9.根据权利要求7所述的方法,其特征在于,所述业务***的业务层封装有数据读取接口;所述第一存储引擎预设有第一引擎访问接口;所述第二存储引擎预设有第二引擎访问接口;
所述接收数据读取指令的步骤,包括:通过所述数据读取接口接收数据读取指令;
所述基于所述待读取数据的数据关键字,从所述第二存储引擎中读取数据,得到第一读取结果的步骤,包括:通过所述数据读取接口调用所述第二引擎访问接口,以基于所述待读取数据的数据关键字,从所述第二存储引擎中读取数据,得到第一读取结果;
所述基于所述待读取数据的数据关键字,从所述第一存储引擎中读取数据,得到第二读取结果的步骤,包括:通过所述数据读取接口调用所述第一引擎访问接口,以基于所述待读取数据的数据关键字,从所述第一存储引擎中读取数据,得到第二读取结果。
10.根据权利要求7所述的方法,其特征在于,所述业务***中预设有第二指定数据关键字;所述基于所述待读取数据的数据关键字,从所述第二存储引擎中读取数据,得到第一读取结果的步骤之前,所述方法还包括:
确定所述待读取数据的数据关键字是否属于所述第二指定数据关键字;
如果所述待读取数据的数据关键字属于所述第二指定数据关键字,执行下述步骤:基于所述待读取数据的数据关键字,从所述第二存储引擎中读取数据,得到第一读取结果;基于所述待读取数据的数据关键字,从所述第一存储引擎中读取数据,得到第二读取结果;基于所述第二读取结果确定所述待读取数据的数据关键字对应的第三目标数据;
如果所述待读取数据的数据关键字不属于所述第二指定数据关键字,执行下述步骤:基于所述待读取数据的数据关键字,从所述第一存储引擎中读取数据,得到第二读取结果;基于所述第二读取结果确定所述待读取数据的数据关键字对应的第三目标数据。
11.一种数据处理装置,其特征在于,所述装置设置于业务***;所述业务***中运行有第一存储引擎和第二存储引擎,所述第一存储引擎中存储有所述业务***的历史数据;所述第二存储引擎在所述第一存储引擎之后接入所述业务***;所述第二存储引擎配置有缓存队列;所述装置包括:
第一确定模块,用于接收数据写入指令,确定待写入的第一目标数据;
第一设置模块,用于将所述第一目标数据写入所述缓存队列中,并在所述缓存队列中为所述第一目标数据设置脏数据标识;其中,所述脏数据标识用于指示:所述第一目标数据没有保存至所述第二存储引擎,当满足指定条件时,设置有所述脏数据标识的数据被合并后,写入所述第二存储引擎;
第二确定模块,用于将所述第一目标数据写入所述第一存储引擎中,确定所述数据写入指令执行结束。
12.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以实现权利要求1-10任一项所述的数据处理方法。
13.一种机器可读存储介质,其特征在于,所述机器可读存储介质存储有机器可执行指令,所述机器可执行指令在被处理器调用和执行时,所述机器可执行指令促使所述处理器实现权利要求1-10任一项所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410212066.0A CN118227044A (zh) | 2024-02-26 | 2024-02-26 | 数据处理方法、装置和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410212066.0A CN118227044A (zh) | 2024-02-26 | 2024-02-26 | 数据处理方法、装置和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118227044A true CN118227044A (zh) | 2024-06-21 |
Family
ID=91509280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410212066.0A Pending CN118227044A (zh) | 2024-02-26 | 2024-02-26 | 数据处理方法、装置和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118227044A (zh) |
-
2024
- 2024-02-26 CN CN202410212066.0A patent/CN118227044A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111008200B (zh) | 数据查询方法、装置和服务器 | |
CN108733306B (zh) | 一种文件合并方法及装置 | |
US10331662B2 (en) | Dynamic column synopsis for analytical databases | |
CN113064859B (zh) | 一种元数据处理方法、装置及电子设备和存储介质 | |
CN111949315A (zh) | 用于区块链账本数据的管理装置和方法 | |
CN115114232A (zh) | 一种历史版本对象列举方法、装置及其介质 | |
CN111831691B (zh) | 一种数据读写方法及装置、电子设备、存储介质 | |
CN108829345B (zh) | 日志文件的数据处理方法和终端设备 | |
CN111858612B (zh) | 基于图数据库的数据加速访问方法、装置及存储介质 | |
CN111639087B (zh) | 数据库中数据更新方法、装置和电子设备 | |
CN115617255A (zh) | 缓存文件的管理方法和管理装置 | |
CN113326288A (zh) | 数据处理方法、装置、电子设备 | |
CN118227044A (zh) | 数据处理方法、装置和电子设备 | |
CN111913913A (zh) | 访问请求的处理方法和装置 | |
WO2019228009A1 (zh) | 一种lsm树的优化方法、装置及计算机设备 | |
KR101744017B1 (ko) | 실시간 검색을 위한 데이터 인덱싱 방법 및 장치 | |
CN111382179B (zh) | 数据处理方法、装置及电子设备 | |
CN114675995A (zh) | 数据备份方法、装置和电子设备 | |
JP2002342403A (ja) | フォールスパス検出装置、フォールスパス検出方法およびそのプログラム | |
CN107679093B (zh) | 一种数据查询方法及装置 | |
CN112015791A (zh) | 数据处理方法、装置、电子设备及计算机存储介质 | |
CN115037799B (zh) | 限流方法、装置、设备及介质 | |
CN117493276B (zh) | 针对Ceph文件的读取方法、装置、服务器及存储介质 | |
CN113641711B (zh) | 一种针对saas租户的数据缓存处理方法、装置及介质 | |
CN115658240B (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 |