CN109344164B - 数据存储方法及装置 - Google Patents
数据存储方法及装置 Download PDFInfo
- Publication number
- CN109344164B CN109344164B CN201811291492.9A CN201811291492A CN109344164B CN 109344164 B CN109344164 B CN 109344164B CN 201811291492 A CN201811291492 A CN 201811291492A CN 109344164 B CN109344164 B CN 109344164B
- Authority
- CN
- China
- Prior art keywords
- data
- batch
- stored
- time
- callback interface
- 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.)
- Active
Links
Images
Abstract
本发明涉及数据存储技术领域,提供一种数据存储方法及装置。其中,数据存储方法具体包括:接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口;保存缓存的每批数据与对应的回调接口的关联关系;每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据关联关系获得每次存储的至少一批数据关联的至少一个回调接口;依次调用至少一个回调接口。该方法在存储指定的数据数量的数据后才将已经存储完的数据批次对应的回调接口进行统一的回调,在一次能够存储的数据量较大时,可以大幅减少存储的次数,提高存储效率,同时该方法能够确保在执行业务逻辑前,首先将数据落地存储,从而可以避免致导致业务逻辑错误。
Description
技术领域
本发明涉及应用数据存储技术领域,具体而言,涉及一种数据存储方法及装置。
背景技术
在应用软件系统中对数据进行存储并且保存到数据库中是非常常见的操作,在目前的应用软件系统中,需要存储的数据量可能非常大,从而将这些数据存储数据到数据库中,存储效率不高。但是,应用软件系统的后续业务逻辑通常不能等待这些完全数据存储后再进行,这就在目前应用软件系统中形成了一个通用的解决方案,即采用异步延迟的方式存储数据,后续的业务逻辑不受存储效率的影响继续进行。
然而,在实际中,部分业务逻辑必须要等到数据存储完成后才能进行,否则可能导致业务逻辑错误。在现有技术中,解决这一问题的方案是:每个业务模块在提交需要存储的数据的同时提交一个回调接口,存储程序在将每个业务模块的数据存储到数据库后,立即回调该回调接口执行后续的业务逻辑。然而,上述方案由于要频繁访问数据库,存储效率比较低下。
发明内容
有鉴于此,本发明实施例提供一种数据存储方法及装置,针对需要先存储数据再执行业务逻辑情况,减少存储操作的次数,提高存储效率。
为实现上述目的,本发明提供如下技术方案:
第一方面,本发明实施例提供一种数据存储方法,包括:
接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口;
保存缓存的每批数据与对应的回调接口的关联关系;
每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据关联关系获得每次存储的至少一批数据关联的至少一个回调接口;
依次调用至少一个回调接口,每个回调接口在被调用时执行提交该回调接口的业务模块的业务逻辑。
上述方法并不是在存储完一批数据后就调用该批数据对应的回调接口,而是每次按照指定的数据数量的存储数据,存储完后将本次存储的至少一批数据对应的回调接口进行统一的回调,在每次能够存储的数据量较大时,该方法可以大幅减少存储的次数,提高存储效率,同时该方法能够确保在执行业务逻辑前,首先将数据落地存储,避免因数据不一致导致业务逻辑错误。
上述方法并不限定将数据具体存储在何处,例如,可以存储在数据库中,也可以存储在文件系统中。特别地,对于存储在数据库中的情况,由于在每次提交数据库时,数据库都会加锁,因此现有技术中频繁地将数据提交至数据库存储可能会导致数据库死锁,上述方法则可以避免死锁问题。
在第一方面的一种可能的实现方式中,每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据关联关系获得每次存储的至少一批数据关联的至少一个回调接口,包括:
根据每次将要存储的指定的数据数量以及数据接收的先后顺序从缓存中读取每次将要存储的至少一批数据;
根据关联关系获得读取的至少一批数据关联的至少一个回调接口;
将读取的至少一批数据按照读取的先后顺序进行存储。
由于每次存储的数据数量都是事先指定好的,因此在每次存储前已经可以确定本次将有哪些批次的数据会被存储,所以在存储前就可以先获取与这些数据关联的回调接口并在数据存储完之后直接调用。当然,在其他一些实现方式中,在数据存储完之后再获取对应的回调接口也是可以的。
此外,数据按照接收的先后顺序读取并存储,处理逻辑比较简单,同时也便于确定每次将要存储的数据批次。
在第一方面的一种可能的实现方式中,接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口,包括:
接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口,并对缓存的每条数据按照数据接收的先后顺序进行编号,其中,缓存的每批数据中均包括至少一条数据;
保存缓存的每批数据与对应的回调接口的关联关系,包括:
保存缓存的每批数据中的最后一条数据的编号与该批数据对应的回调接口的关联关系;
根据每次将要存储的指定的数据数量以及数据接收的先后顺序从缓存中读取每次将要存储的至少一批数据,包括:
根据每次将要存储的指定的数据条数以及数据编号的先后顺序从缓存中读取每次将要存储的至少一批数据;
根据关联关系获得读取的至少一批数据关联的至少一个回调接口,包括:
根据每次将要存储的最后一条数据的编号,获得读取的至少一批数据中的每批数据中的最后一条数据的编号,共获得至少一个编号;
根据关联关系,获得至少一个编号关联的至少一个回调接口。
在上述实现方式中,由于各条数据编号的顺序和存储的顺序一致,因此一旦确定了本次将要存储的最后一条数据的编号,那么本次将要存储哪些编号的数据也随之确定,从而也就可以确定本次将要存储的每批数据中的最后一条数据的编号。由于缓存的每批数据中的最后一条数据与该批数据对应的回调接口关联,因而查询该关联关系,就可以获得本次存储的数据批次对应的回调接口。这一确定回调接口的过程简单高效,能够快速找到本次存储后需要回调的回调接口。
在第一方面的一种可能的实现方式中,根据每次将要存储的最后一条数据的编号,获得读取的至少一批数据中的每批数据中的最后一条数据的编号,共获得至少一个编号,包括:
根据关联关系中保存的编号与每次将要存储的最后一条数据的编号之间的先后顺序,确定至少一个编号。
在上述实现方式中,由于各条数据编号的顺序和存储的顺序一致,因此按照编号顺序,本次将要存储的任意一条数据的编号的都不会位于本次将要存储的最后一条数据的编号之后。从而直接比较关联关系中的编号和本次将要存储的最后一条数据的编号的先后顺序,就可以确定关联关系中的哪些编号的数据是本次将要存储的,进一步的,关联关系中保存的是缓存的每批数据中的最后一条数据的编号,从而根据确定的编号就可以获取到相应的回调接口。
在第一方面的一种可能的实现方式中,编号为递增的编号,根据关联关系中保存的编号与每次将要存储的最后一条数据的编号之间的先后顺序,确定至少一个编号,包括:
若关联关系中保存的编号不大于每次将要存储的最后一条数据的编号,则将满足条件的编号确定为至少一个编号。
递增编号方法简单,并且编号的增大也符合数据数量不断增加的客观事实,使得计算过程容易理解。
在第一方面的一种可能的实现方式中,每次按照指定的数据数量将缓存的至少一批数据进行存储,包括:
定时唤醒存储线程按照指定的数据数量将缓存的至少一批数据进行存储,并在缓存的至少一批数据存储完后将存储线程挂起。
可以使存储线程一直处于唤醒状态,不断地将接收到的数据进行存储,但在一次能够存储的数据量较大、而业务模块每次提交的数据量不大时,这样的存储方式可能导致存储的次数过于频繁,因此存储线程也可以设置为定期唤醒,每次被唤醒时,接收到的数据已经积累到一定的数量,此时再进行存储效率更佳。
在第一方面的一种可能的实现方式中,每次按照指定的数据数量将缓存的至少一批数据进行存储,包括:
按照指定的数据数量,基于缓存的至少一批数据构建存储语句,利用存储语句将缓存的至少一批数据批量提交到数据库进行存储,其中,指定的数据数量为根据数据库的存储性能确定的数量。
这里的存储语句可以是SQL或类SQL语句,存储语句自动生成,并采用批量提交的方式将数据提交到数据库,其存储效率较高。
第二方面,本发明实施例提供一种数据存储装置,包括:
数据接收模块,用于接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口;
数据关联模块,用于保存缓存的每批数据与对应的回调接口的关联关系;
数据存储模块,用于每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据关联关系获得每次存储的至少一批数据关联的至少一个回调接口;
回调模块,用于依次调用至少一个回调接口,每个回调接口在被调用时执行提交该回调接口的业务模块的业务逻辑。
在第二方面的一种可能的实现方式中,数据存储模块,包括:
数据获取子模块,用于根据每次将要存储的指定的数据数量以及数据接收的先后顺序从缓存中读取每次将要存储的至少一批数据;
回调接口获取子模块,用于根据关联关系获得读取的至少一批数据关联的至少一个回调接口;
数据存储子模块,用于将读取的至少一批数据进行存储。
在第二方面的一种可能的实现方式中,数据接收模块,具体用于:
接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口,并对缓存的每条数据按照数据接收的先后顺序进行编号,其中,缓存的每批数据中均包括至少一条数据;
数据关联模块,具体用于:保存缓存的每批数据中的最后一条数据的编号与该批数据对应的回调接口的关联关系;
数据获取子模块,具体用于:根据每次将要存储的指定的数据条数以及数据编号的先后顺序从缓存中读取每次将要存储的至少一批数据;
回调接口获取子模块,包括:
编号获取单元,用于根据每次将要存储的最后一条数据的编号,获得读取的至少一批数据中的每批数据中的最后一条数据的编号,共获得至少一个编号;
回调接口获取单元,用于根据关联关系,获得至少一个编号关联的至少一个回调接口。
在第二方面的一种可能的实现方式中,编号获取单元,具体用于:
根据关联关系中保存的编号与每次将要存储的最后一条数据的编号之间的先后顺序,确定至少一个编号。
在第二方面的一种可能的实现方式中,编号为递增的编号,编号获取单元,具体用于:
若关联关系中保存的编号不大于每次将要存储的最后一条数据的编号,则将满足条件的编号确定为至少一个编号。
第三方面,本发明实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行第一方面或第一方面的任意一种可能的实现方式提供的方法的步骤。
第四方面,本发明实施例提供一种电子设备,包括存储器以及处理器,存储器中存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行第一方面或第一方面的任意一种可能的实现方式提供的方法的步骤。
为使本发明的上述目的、技术方案和有益效果能更明显易懂,下文特举实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例提供的数据存储方法的一种应用场景的示意图;
图2示出了本发明实施例提供的一种数据存储方法的流程图;
图3示出了本发明实施例提供的一种数据存储方法的流程图;
图4示出了本发明实施例提供的数据存储装置的功能模块图。
具体实施方式
在现有技术中,为确保在数据存储完后才执行业务逻辑,通常的做法是:每个业务模块在提交需要存储的数据的同时提交一个回调接口,存储程序在将每个业务模块的数据存储到数据库后,立即回调该回调接口执行后续的业务逻辑。
然而,发明人经长期研究发现,在很多情况下,业务模块每次提交的数据量不大,因此将数据提交到数据库进行存储的操作将被频繁地执行,造成数据库压力增大,存储效率低下。
同时,由于在每次将数据提交到数据库时,数据库都会加锁,因此频繁地提交可能会导致数据库死锁,进而造成数据存储失败,业务逻辑无法正常执行。
现有技术中存在的上述缺陷,是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本发明实施例针对上述问题所提出的解决方案,都应该是发明人在本发明过程中对本发明做出的贡献。
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于将一个实体或者操作与另一个实体或操作区分开来,而不能理解为指示或暗示相对重要性,也不能理解为要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
图1示出了本发明实施例提供的数据存储方法的一种应用场景的示意图。参照图1,该应用场景包括业务层和存储层。业务层可以包括多个业务模块,在有数据需要存储时,业务模块将数据以及回调接口提交至存储层,其中,回调接口在被调用时执行业务模块的业务逻辑。存储层包括存储程序以及数据库,存储程序接收业务模块提交的数据以及回调接口,并将数据提交到数据库中存储,存储完毕后调用回调接口,执行业务模块的业务逻辑,通常而言,回调接口中设置的业务逻辑是需要在数据存储后才能执行的逻辑。数据存储方法可以在存储程序中实现,即存储方法的步骤均由存储程序执行。
在具体实施时,业务层和存储层可以集成在一个应用程序中,或者存储层也可以作为独立的组件,供多个应用程序调用。可以理解的,图1示出的应用场景仅为示例,数据存储方法还可以应用于其他应用场景中,例如,数据并不一定要存储到数据库中,也可以存储到文件系统中。但后文中为了方便,仍以图1示出的应用场景为例进行阐述,显然这不应当视为对本发明保护范围的限制。
本发明实施例提供一种如图2所示的数据采集方法。参照图2,该方法包括:
步骤S10:接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口。
多个业务模块中的每个业务模块每次提交一批数据以及一个回调接口,存储程序提供一片缓存区域,用于缓存接收到的多批数据以及多个回调接口。
例如,存储程序可以提供一个公共接口供各业务模块调用,调用时将数据以及回调接口作为参数传入。可以理解的,如果某个业务逻辑并不需要在数据存储后进行,即允许数据的异步延迟存储,此时业务模块也可以只提交数据而不提交回调函数。
步骤S11:保存缓存的每批数据与对应的回调接口的关联关系。
该关联关系可以保存在存储程序提供的缓存区域中,具体的关联形式不作限定,例如,缓存的每批数据可以用一个能够唯一代表该批数据的标识(比如编号)表示,将该编号与对应的回调接口关联。又例如,每批数据可以被封装为一个数据对象,直接将该对象与对应的回调接口关联。
步骤S12:每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据关联关系获得每次存储的至少一批数据关联的至少一个回调接口。
首先阐述一下数据的存储过程:
数据存储的顺序不作限定。在一些实现方式中,可以根据数据接收的先后顺序从缓存中读取每次将要存储的数据,读取的数据量为指定数据数量,在存储时按照数据读取的先后顺序(即数据接收的先后顺序)进行存储。这种存储方式在处理逻辑上比较简单,同时也便于根据指定的数据数量确定每次存储的数据批次。在另一些实现方式中,如果某些业务模块的优先级较高,也可以先从缓存中读取并存储这些业务模块提交的数据。但无论采用哪种数据存储顺序,在要存储的数据总量(指定的数据数量)已知的情况下,均能够确定每次存储了哪些批次的数据。
指定的数据数量表示在一次存储操作中能够存储数据量,该值可以被设置为和数据库的性能相关(例如正相关),既不能超过数据库的存储性能,同时也要充分利用数据库的存储性能,当然也可以根据需求任意设置。通常而言,指定数量在允许的情况下应当设置得大一些,这样数据能够在至多有限的几次存储操作中被处理完,有效提高存储效率。指定数量可以直接在代码中设置好,也可以保存在配置文件或数据库表格中,或者还可以通过操作界面等进行实时设置。
需要指出,指定数据数量的数据和各批数据之间并无严格的对应关系,即并不保证每次存储时每批数据都被完整地存储。因此,步骤S12所称的每次存储的至少一批数据是指每次被完整存储的至少一批数据,每次存储的数据中可能还有某个批次的数据本次并未被完整地存储。可以理解的,只有某批数据被完整地存储了,才能够调用其对应的回调接口,否则可能导致数据的同步问题。
例如,业务模块A、B、C依次提交了10条数据,共30条,这30条数据按照接收的先后顺序进行存储,指定的数据数量为25条数据,则需要两次存储才能存储完30条数据,第一次存储前25条,第二次存储后5条。其中,业务模块A、B提交的两批共20条数据是在本次被存储完的,业务模块C的提交的一批共10条数据是在下次被存储完的。
需要指出,如果某批数据的量比较大,而指定数量设置得比较小,在一次存储过程中未能存储完任何一批数据的情况亦是有可能发生的,显然这种情况在数据存储完后无需调用任何回调接口,因此步骤S12中并没有单独针对其进行说明。
在一种实现方式中,每次存储完指定数据数量的数据后,就会执行步骤S13进行回调,直至目前缓存的多批数据都被存储完。而不是等到多批数据都被存储完后再执行步骤S13,因为如果提交的数据量较大,可能需要较长时间才能存储完所有的数据,这会导致回调接口长期不被调用,耽误业务逻辑的执行。
再阐述一下回调接口的获取过程:
某批数据被存储完后,表明需要在该批数据存储之后执行的业务逻辑已经可以执行了,这样的业务逻辑可以放在该批数据对应的回调接口中,因此首先要找到该批数据对应的回调接口。
步骤S11中保存了缓存的每批数据与对应的回调接口的关联关系,从而步骤S12中确定本次存储完的至少一批数据后,直接查询之前保存的关联关系,就可以获得每批数据关联的回调接口,共获得至少一个回调接口。
需要指出,获取回调接口可以在数据存储之前就执行。例如,在数据按照接收的先后顺序进行存储的实现方式中,由于每次存储的数据数量都是事先指定好的,因此在每次存储前已经可以确定本次将有哪些批次的数据会被存储,所以在存储前就可以先获取与这些数据关联的回调接口。当然,在其他一些实现方式中,在数据存储完之后再获取对应的回调接口也是可以的,例如,在数据的存储顺序比较复杂,在数据存储完之前难以或者不便确定本次将有哪些批次的数据会被存储的情况,但在数据存储完之后必然可以确定本次有哪些批次的数据被存储。
步骤S14:依次调用至少一个回调接口。
调用每个回调接口,调用的顺序可以按照每批数据被存储的先后顺序,每个回调接口在被调用时执行提交该回调接口的业务模块的业务逻辑。
综上所述,本实施例提供的数据存储方法和现有技术具有显著区别,并不是在存储完一批数据后就调用该批数据对应的回调接口,而是每次按照指定的数据数量的存储数据,存储完后将本次存储的至少一批数据对应的回调接口进行统一的回调,在每次能够存储的数据量较大时,该方法可以大幅减少存储的次数,提高存储效率,同时该方法能够确保在执行业务逻辑前,首先将数据落地存储,避免因数据不一致导致业务逻辑错误。此外,对于数据存储在数据库中的情况,存储次数的减少意味着访问数据库次数的减少,可以缓解数据库的压力,同时避免数据库死锁。
在本发明的一个实施例中,在存储程序中可以单独设置一个用于存储数据的线程。
在一种实现方式中,这个线程可以一直处于工作状态,不断地将接收到的数据进行存储。这种方式存储数据较为及时,回调接口中的业务逻辑也能够及时执行,但在一次能够存储的数据量较大、而业务模块每次提交的数据量不大时,该方式可能导致存储的次数过于频繁,而每次存储的数据量都不大,未能重复利用数据库的存储性能,存储效率不高。
在另一种实现方式中,可以定时唤醒存储线程对缓存中的数据进行存储,并在当前接收到的数据后将存储线程挂起。这种方式存储的实时性不如上一种方式,但可以将线程挂起期间接收到的数据一次性存储完毕,有利于充分利用数据库的存储性能,存储效率较高。这里所称的定时,可以是指线程本次存储数据完毕的时刻到下次开始存储数据的时刻之间的时长为一段固定的时间。
可以理解的,上述两种具体的存储方式仅为示例,还可以采取其他的存储方式。
在本发明的一个实施例中,针对向数据库中存储数据的情况,存储程序基于每次要存储的数据以及指定的数据数量自动构建存储语句,根据数据库的不同,存储语句可以是SQL或类SQL语句等。通过执行这些存储语句,可以将指定的数据数量的数据提交到数据库进行存储,提交时采用批量提交的方式,尽量提高存储效率。
本发明实施例还提供一种如图3所示的数据采集方法。在一些实际应用场景中,业务模块提交的数据是分条的,即每批数据都包括至少一条数据,从而接收到的多批数据共包括多条数据,图3示出的数据采集方法针对这种应用场景提出。参照图3,该方法包括:
步骤S20:接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口,并对缓存的每条数据按照数据接收的先后顺序进行编号。
其中接收数据并缓存的步骤类似步骤S10,不再重复阐述。对数据的编号可以在缓存数据的同时进行,编号的顺序与数据接收的先后顺序一致。数据的编号是统一的,即编号在不同的数据批次间具有连续性,同时每条数据的编号应当不同。作为一种常见的实现方式,可以采取递增的编号,编号值随着接收到的数据量的增加同步增大,符合通常的认知规律,在后续的一些计算过程中逻辑上也比较简单。当然,可以采用其他的编号方式,例如递减的编号等。
需要指出,这里的编号可以是为每条数据单独分配一个字段进行编号,例在对数据进行缓存时采取一个编号字段对应一条数据的方式进行缓存。或者也可以是一种隐性的编号,例如将每条数据作为一个数据元素缓存,该数据元素的在数组中的索引就是对该条数据的编号。
步骤S21:保存缓存的每批数据中的最后一条数据对应的编号与该批数据对应的回调接口的关联关系。
步骤S22实际上和步骤S11是对应的,由于对数据进行存储时,是按照编号顺序存储的(见步骤S25),因此每批数据中的最后一条数据被存储完是该批数据被存储完的充要条件,从而将每批数据中的最后一条数据对应的编号与该批数据对应的回调接口关联,实际上就是将该批数据与该批数据对应的回调接口关联。
步骤S22:根据每次将要存储的指定的数据条数以及数据编号的先后顺序从缓存中读取每次将要存储的至少一批数据。
指定的数据条数即指定的数据数量在数据分条下的表现形式。需要指出,在步骤S22中是按照指定的数据条数而不是数据批次进行读取,因此步骤S22中实际上并不清楚到底读取了哪些批次的数据,还需要在后续步骤中进一步判断。如前文所述,某次读取的数据也可能只是某批数据的一部分,但由于这种情况下并不会导致回调函数被调用,因此步骤S22中并没有针对这种情况具体说明。
步骤S23:根据每次将要存储的最后一条数据的编号,获得读取的至少一批数据中的每批数据中的最后一条数据的编号,共获得至少一个编号。
由于上次存储的最后一条数据对应的编号是确定的(对于首次存储即为第一条数据对应的编号),并且每条数据是按编号顺序存储的(见步骤S25),同时每次存储指定数据条数的数据,因此每次存储的最后一条的数据对应的编号是可以直接计算的。而一旦确定了每次将要存储的最后一条数据的编号,按照编号顺序,每次将要存储的任意一条数据的编号的都不会位于本次将要存储的最后一条数据的编号之后,那么本次将要存储哪些编号的数据也随之确定,而缓存中的每批数据中的最后一条数据的编号是已知的,从而也就可以确定本次将要存储的每批数据中的最后一条数据的编号。
进一步的,在步骤S21保存的关联关系中已经存储了缓存的每批数据中的最后一条数据的编号,从而可以直接根据关联关系中保存的编号与每次将要存储的最后一条数据的编号之间的先后顺序进行判断:凡是编号顺序在每次将要存储的最后一条数据的编号之前的,即为本次将要存储的数据批次中的最后一条数据对应的编号。
进一步的,对于数据的编号递增的情况,若关联关系中保存的编号中不大于每次将要存储的最后一条数据的编号,且该编号对应的数据在上次存储时未被存储,则将该编号确定为步骤S23中要获取的一个编号。
可以看出,对各条数据进行编号,并且保证数据按编号顺序存储时,能够很容易地确定每次存储了哪些批次的数据,从而在后续步骤中回调这些批次数据对应的回调接口。
步骤S24:根据关联关系,获得至少一个编号关联的至少一个回调接口。
根据步骤S23中获得的至少一个编号,查询步骤S21中保存的关联关系,即可获得本次需要回调的回调接口,关联关系可以采用键值对等方式存储,其查询效率很高。
步骤S25:将读取的至少一批数据按照读取的先后顺序进行存储。
根据步骤S22,这里的读取顺序就是数据编号的先后顺序,同时也是数据接收的先后顺序。在一些实现方式中,步骤S23、步骤S24中的逻辑也可以在步骤S25之后再执行。
步骤S26:依次调用至少一个回调接口。
类似步骤S14,不再重复阐述。
本发明实施例还提供一种如图4所示的数据存储装置100。参照图4,该装置包括:
数据接收模块110,用于接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口;
数据关联模块120,用于保存缓存的每批数据与对应的回调接口的关联关系;
数据存储模块130,用于每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据关联关系获得每次存储的至少一批数据关联的至少一个回调接口;
回调模块140,用于依次调用至少一个回调接口,每个回调接口在被调用时执行提交该回调接口的业务模块的业务逻辑。
在该实施例的一种实现方式中,数据存储模块130包括:
数据获取子模块,用于根据每次将要存储的指定的数据数量以及数据接收的先后顺序从缓存中读取每次将要存储的至少一批数据;
回调接口获取子模块,用于根据关联关系获得读取的至少一批数据关联的至少一个回调接口;
数据存储子模块,用于将读取的至少一批数据进行存储。
在该实施例的一种实现方式中,数据接收模块110,具体用于:
接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口,并对缓存的每条数据按照数据接收的先后顺序进行编号,其中,缓存的每批数据中均包括至少一条数据;
数据关联模块120,具体用于:保存缓存的每批数据中的最后一条数据的编号与该批数据对应的回调接口的关联关系;
数据获取子模块,具体用于:根据每次将要存储的指定的数据条数以及数据编号的先后顺序从缓存中读取每次将要存储的至少一批数据;
回调接口获取子模块,包括:
编号获取单元,用于根据每次将要存储的最后一条数据的编号,获得读取的至少一批数据中的每批数据中的最后一条数据的编号,共获得至少一个编号;
回调接口获取单元,用于根据关联关系,获得至少一个编号关联的至少一个回调接口。
在该实施例的一种实现方式中,编号获取单元,具体用于:
根据关联关系中保存的编号与每次将要存储的最后一条数据的编号之间的先后顺序,确定至少一个编号。
在该实施例的一种实现方式中,编号为递增的编号,编号获取单元,具体用于:
若关联关系中保存的编号不大于每次将要存储的最后一条数据的编号,则将满足条件的编号确定为至少一个编号。
本发明实施例提供的数据存储装置100,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法施例中相应内容。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行本发明实施例提供的数据存储方法的步骤。
本发明实施例还提供一种电子设备,包括存储器以及处理器,存储器中存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行本发明实施例提供的数据存储方法的步骤。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其他的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得计算机设备执行本发明各个实施例所述方法的全部或部分步骤。前述的计算机设备包括:个人计算机、服务器、移动设备、智能穿戴设备、网络设备、虚拟设备等各种具有执行程序代码能力的设备,前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟、磁带或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (12)
1.一种数据存储方法,其特征在于,包括:
接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口;
保存缓存的每批数据与对应的回调接口的关联关系;
每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据所述关联关系获得每次存储的所述至少一批数据关联的至少一个回调接口;
依次调用所述至少一个回调接口,每个回调接口在被调用时执行提交该回调接口的业务模块的业务逻辑。
2.根据权利要求1所述的数据存储方法,其特征在于,所述每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据所述关联关系获得每次存储的所述至少一批数据关联的至少一个回调接口,包括:
根据每次将要存储的指定的数据数量以及数据接收的先后顺序从缓存中读取每次将要存储的至少一批数据;
根据所述关联关系获得读取的所述至少一批数据关联的至少一个回调接口;
将读取的所述至少一批数据按照读取的先后顺序进行存储。
3.根据权利要求2所述的数据存储方法,其特征在于,所述接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口,包括:
接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口,并对缓存的每条数据按照数据接收的先后顺序进行编号,其中,缓存的每批数据中均包括至少一条数据;
所述保存缓存的每批数据与对应的回调接口的关联关系,包括:
保存缓存的每批数据中的最后一条数据的编号与该批数据对应的回调接口的关联关系;
所述根据每次将要存储的指定的数据数量以及数据接收的先后顺序从缓存中读取每次将要存储的至少一批数据,包括:
根据每次将要存储的指定的数据条数以及数据编号的先后顺序从缓存中读取每次将要存储的至少一批数据;
所述根据所述关联关系获得读取的所述至少一批数据关联的至少一个回调接口,包括:
根据每次将要存储的最后一条数据的编号,获得读取的所述至少一批数据中的每批数据中的最后一条数据的编号,共获得至少一个编号;
根据所述关联关系,获得所述至少一个编号关联的至少一个回调接口。
4.根据权利要求3所述的数据存储方法,其特征在于,所述根据每次将要存储的最后一条数据的编号,获得读取的所述至少一批数据中的每批数据中的最后一条数据的编号,共获得至少一个编号,包括:
根据所述关联关系中保存的编号与每次将要存储的最后一条数据的编号之间的先后顺序,确定所述至少一个编号。
5.根据权利要求4所述的数据存储方法,其特征在于,所述编号为递增的编号,所述根据所述关联关系中保存的编号与每次将要存储的最后一条数据的编号之间的先后顺序,确定所述至少一个编号,包括:
若所述关联关系中保存的编号不大于每次将要存储的最后一条数据的编号,则将满足条件的编号确定为所述至少一个编号。
6.根据权利要求1-5中任一项所述的数据存储方法,其特征在于,所述每次按照指定的数据数量将缓存的至少一批数据进行存储,包括:
定时唤醒存储线程按照指定的数据数量将缓存的至少一批数据进行存储,并在缓存的所述至少一批数据存储完后将所述存储线程挂起。
7.根据权利要求1-5中任一项所述的数据存储方法,其特征在于,所述每次按照指定的数据数量将缓存的至少一批数据进行存储,包括:
按照指定的数据数量,基于缓存的至少一批数据构建存储语句,利用所述存储语句将缓存的所述至少一批数据批量提交到数据库进行存储,其中,所述指定的数据数量为根据所述数据库的存储性能确定的数量。
8.一种数据存储装置,其特征在于,包括:
数据接收模块,用于接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口;
数据关联模块,用于保存缓存的每批数据与对应的回调接口的关联关系;
数据存储模块,用于每次按照指定的数据数量将缓存的至少一批数据进行存储,并根据所述关联关系获得每次存储的所述至少一批数据关联的至少一个回调接口;
回调模块,用于依次调用所述至少一个回调接口,每个回调接口在被调用时执行提交该回调接口的业务模块的业务逻辑。
9.根据权利要求8所述的数据存储装置,其特征在于,所述数据存储模块,包括:
数据获取子模块,用于根据每次将要存储的指定的数据数量以及数据接收的先后顺序从缓存中读取每次将要存储的至少一批数据;
回调接口获取子模块,用于根据所述关联关系获得读取的所述至少一批数据关联的至少一个回调接口;
数据存储子模块,用于将读取的所述至少一批数据按照读取的先后顺序进行存储。
10.根据权利要求9所述的数据存储装置,其特征在于,所述数据接收模块,具体用于:
接收并缓存每个业务模块每次提交的一批数据以及对应的回调接口,并对缓存的每条数据按照数据接收的先后顺序进行编号,其中,缓存的每批数据中均包括至少一条数据;
所述数据关联模块,具体用于:保存缓存的每批数据中的最后一条数据的编号与该批数据对应的回调接口的关联关系;
所述数据获取子模块,具体用于:根据每次将要存储的指定的数据条数以及数据编号的先后顺序从缓存中读取每次将要存储的至少一批数据;
所述回调接口获取子模块,包括:
编号获取单元,用于根据每次将要存储的最后一条数据的编号,获得读取的所述至少一批数据中的每批数据中的最后一条数据的编号,共获得至少一个编号;
回调接口获取单元,用于根据所述关联关系,获得所述至少一个编号关联的至少一个回调接口。
11.根据权利要求10所述的数据存储装置,其特征在于,所述编号获取单元,具体用于:
根据所述关联关系中保存的编号与每次将要存储的最后一条数据的编号之间的先后顺序,确定所述至少一个编号。
12.根据权利要求11所述的数据存储装置,其特征在于,所述编号为递增的编号,所述编号获取单元,具体用于:
若所述关联关系中保存的编号不大于每次将要存储的最后一条数据的编号,则将满足条件的编号确定为所述至少一个编号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811291492.9A CN109344164B (zh) | 2018-10-31 | 2018-10-31 | 数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811291492.9A CN109344164B (zh) | 2018-10-31 | 2018-10-31 | 数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109344164A CN109344164A (zh) | 2019-02-15 |
CN109344164B true CN109344164B (zh) | 2021-03-19 |
Family
ID=65312889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811291492.9A Active CN109344164B (zh) | 2018-10-31 | 2018-10-31 | 数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109344164B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020224216A1 (zh) * | 2019-05-05 | 2020-11-12 | 平安科技(深圳)有限公司 | 大批量数据处理方法、装置、计算机设备及存储介质 |
CN111159138B (zh) * | 2019-12-30 | 2022-06-10 | 浪潮电子信息产业股份有限公司 | 一种异步数据存储方法、装置、设备及可读存储介质 |
CN113553306B (zh) * | 2021-07-27 | 2023-07-21 | 重庆紫光华山智安科技有限公司 | 数据处理方法及数据存储管理系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106375437A (zh) * | 2016-08-31 | 2017-02-01 | 上海银天下科技有限公司 | 数据审核方法及装置 |
CN106648763A (zh) * | 2016-12-06 | 2017-05-10 | 明博教育科技股份有限公司 | 一种批量数据导入组件及其导入方法 |
CN106844721A (zh) * | 2017-02-09 | 2017-06-13 | 济南浪潮高新科技投资发展有限公司 | 数据存储方法、装置、系统、可读介质及存储控制器 |
CN108111499A (zh) * | 2017-12-15 | 2018-06-01 | 腾讯科技(深圳)有限公司 | 业务处理性能优化方法、装置、电子设备及存储介质 |
CN108182121A (zh) * | 2017-12-29 | 2018-06-19 | 广州小鹏汽车科技有限公司 | 一种Android中控大屏系统模块间通信方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8417825B2 (en) * | 2005-03-09 | 2013-04-09 | Apple Inc. | Communications handles and proxy agents |
US10491708B2 (en) * | 2015-06-05 | 2019-11-26 | Apple Inc. | Context notifications |
-
2018
- 2018-10-31 CN CN201811291492.9A patent/CN109344164B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106375437A (zh) * | 2016-08-31 | 2017-02-01 | 上海银天下科技有限公司 | 数据审核方法及装置 |
CN106648763A (zh) * | 2016-12-06 | 2017-05-10 | 明博教育科技股份有限公司 | 一种批量数据导入组件及其导入方法 |
CN106844721A (zh) * | 2017-02-09 | 2017-06-13 | 济南浪潮高新科技投资发展有限公司 | 数据存储方法、装置、系统、可读介质及存储控制器 |
CN108111499A (zh) * | 2017-12-15 | 2018-06-01 | 腾讯科技(深圳)有限公司 | 业务处理性能优化方法、装置、电子设备及存储介质 |
CN108182121A (zh) * | 2017-12-29 | 2018-06-19 | 广州小鹏汽车科技有限公司 | 一种Android中控大屏系统模块间通信方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109344164A (zh) | 2019-02-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391628B (zh) | 数据同步方法及装置 | |
CN109344164B (zh) | 数据存储方法及装置 | |
CN106407190B (zh) | 一种事件记录查询方法及装置 | |
AU2010336363B2 (en) | Managing queries | |
US9563426B1 (en) | Partitioned key-value store with atomic memory operations | |
CN106899654B (zh) | 一种序列值生成方法、装置及系统 | |
CN110807145A (zh) | 查询引擎获取方法、设备和计算机可读存储介质 | |
CN112748993A (zh) | 任务执行方法、装置、存储介质及电子设备 | |
CN111309548B (zh) | 一种超时监控方法、装置及计算机可读存储介质 | |
RU2674886C2 (ru) | Способ и устройство для определения плана исполнения sql | |
CN111858200B (zh) | 系统测试中的吞吐量控制方法、装置及电子设备 | |
CN113704577A (zh) | 基于多线程并发处理的数据查询方法及装置 | |
CN109829678B (zh) | 一种回滚处理方法、装置以及电子设备 | |
CN113486109A (zh) | 异构数据库的数据同步方法、装置及电子设备 | |
CN110955460B (zh) | 一种服务进程启动方法、装置、电子设备和存储介质 | |
CN110061933B (zh) | 一种数据处理方法及装置、设备、存储介质 | |
CN109753544B (zh) | 数据库序列处理方法、系统及基于同步锁的节点服务器 | |
CN104317820B (zh) | 报表的统计方法和装置 | |
CN110909023B (zh) | 一种查询计划的获取方法、数据查询方法及装置 | |
CN115098232A (zh) | 任务调度的方法、装置和设备 | |
CN110851421B (zh) | 减少数据迁移耗时的方法、装置、存储介质及电子设备 | |
CN110162542B (zh) | 基于cassandra的数据翻页方法、装置、计算机设备和存储介质 | |
CN111259023B (zh) | 一种数据调度方法、装置、电子设备及存储介质 | |
JP7458512B2 (ja) | 分散トランザクション処理方法、端末およびコンピュータ読み取り可能な記憶媒体 | |
CN107239474B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |