CN106897024B - 数据写入方法及装置 - Google Patents
数据写入方法及装置 Download PDFInfo
- Publication number
- CN106897024B CN106897024B CN201510960541.3A CN201510960541A CN106897024B CN 106897024 B CN106897024 B CN 106897024B CN 201510960541 A CN201510960541 A CN 201510960541A CN 106897024 B CN106897024 B CN 106897024B
- Authority
- CN
- China
- Prior art keywords
- data
- write
- application program
- storage system
- message
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据写入方法及装置。其中,该方法包括:应用程序将产生的数据和用于指示存储***写入产生的数据的写入消息发送给存储***;应用程序将产生的数据和用于指示查询***写入产生的数据的写入消息发送给查询***;应用程序分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。本发明解决了相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
Description
技术领域
本发明涉及数据处理领域,具体而言,涉及一种数据写入方法及装置。
背景技术
在处理如查询大量数据时,可以直接从存储***中查询,这种查询方案虽然能保障数据安全,但是其查询速度较慢。为了即保障数据安全,又满足快速查询的需要,在相关技术中,通常会从查询***即内存中查询数据。这种技术方案需要将数据同时存入查询***和存储***。比如,将数据存储在Elastic Search中,实现对数据的全文索引,便于查询;同时为了保障数据安全,需要将数据同步存储到磁盘(如,Mongodb数据库等)中。
然而,通过上述技术方案,可能仅仅将数据写入了查询***,或者仅仅将数据写入了存储***,或者同时将数据写入了查询***和存储***,但无法保证数据同时写入了查询***和存储***,即无法保证查询***和存储***中数据的一致性。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种数据写入方法及装置,以至少解决相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
根据本发明实施例的一个方面,提供了一种数据写入方法,包括:应用程序将产生的数据和用于指示存储***写入上述产生的数据的写入消息发送给上述存储***;上述应用程序将上述产生的数据和用于指示查询***写入上述产生的数据的写入消息发送给上述查询***;上述应用程序分别接收并根据上述存储***和上述查询***返回的消息确定是否放弃本次数据写入操作。
进一步地,上述应用程序分别接收并根据上述存储***和上述查询***返回的消息确定是否放弃本次数据写入操作包括:在接收到上述存储***和/或上述查询***返回的消息为写入失败消息时,上述应用程序确定放弃本次数据写入操作;或者在预设时间段内未接收到上述存储***和/或上述查询***返回的消息时,上述应用程序确定放弃本次数据写入操作。
进一步地,在上述应用程序确定放弃本次数据写入操作之后,上述方法还包括:上述应用程序向上述存储***或上述查询***中数据写入成功的一方发送用于指示上述存储***或上述查询***回滚本次写入的数据的回滚消息。
进一步地,上述应用程序分别接收并根据上述存储***和上述查询***返回的消息确定是否放弃本次数据写入操作包括:在接收到上述存储***和上述查询***返回的消息都为写入成功消息时,上述应用程序确定不放弃本次数据写入操作。
进一步地,上述应用程序确定不放弃本次数据写入操作之后,上述方法还包括:上述应用程序向上述存储***和上述查询***提交用于指示本次数据写入成功的事务。
根据本发明实施例的另一方面,还提供了一种数据写入方法,包括:存储***接收应用程序产生的数据以及用于指示上述存储***写入上述应用程序产生的数据的写入消息;上述存储***在根据上述写入消息对上述应用程序产生的数据进行数据写入操作之后,向上述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息。
根据本发明实施例的另一方面,还提供了一种数据写入方法,包括:查询***接收应用程序产生的数据以及用于指示上述查询***写入上述应用程序产生的数据的写入消息;上述查询***在根据上述写入消息对上述应用程序产生的数据进行数据写入操作之后,向上述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息。
根据本发明实施例的另一方面,还提供了一种数据写入装置,包括:第一发送单元,用于使得应用程序将产生的数据和用于指示存储***写入上述产生的数据的写入消息发送给上述存储***,并将上述产生的数据和用于指示查询***写入上述产生的数据的写入消息发送给上述查询***;确定单元,用于使得上述应用程序分别接收并根据上述存储***和上述查询***返回的消息确定是否放弃本次数据写入操作。
进一步地,上述确定单元还用于使得:在接收到上述存储***和/或上述查询***返回的消息为写入失败消息时,上述应用程序确定放弃本次数据写入操作;或者在预设时间段内未接收到上述存储***和/或上述查询***返回的消息时,上述应用程序确定放弃本次数据写入操作。
进一步地,上述装置还包括:第二发送单元,用于在上述应用程序确定放弃本次数据写入操作之后,上述应用程序向上述存储***或上述查询***中数据写入成功的一方发送用于指示上述存储***或上述查询***回滚本次写入的数据的回滚消息。
进一步地,上述确定单元还用于使得在接收到上述存储***和上述查询***返回的消息都为写入成功消息时,上述应用程序确定不放弃本次数据写入操作。
进一步地,上述装置还包括:提交单元,用于使得上述应用程序确定不放弃本次数据写入操作之后,上述应用程序向上述存储***和上述查询***提交用于指示本次数据写入成功的事务。
根据本发明实施例的另一方面,还提供了一种数据写入装置,包括:第一接收单元,用于使得存储***接收应用程序产生的数据以及用于指示上述存储***写入上述应用程序产生的数据的写入消息;第一执行单元,用于使得上述存储***在根据上述写入消息对上述应用程序产生的数据进行数据写入操作之后,向上述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息。
根据本发明实施例的另一方面,还提供了一种数据写入装置,包括:第二接收单元,用于使得查询***接收应用程序产生的数据以及用于指示上述查询***写入上述应用程序产生的数据的写入消息;第二执行单元,用于使得上述查询***在根据上述写入消息对上述应用程序产生的数据进行数据写入操作之后,向上述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息。
在本发明实施例中,采用分段提交策略,通过应用程序将产生的数据和用于指示存储***写入产生的数据的写入消息发送给存储***;应用程序将产生的数据和用于指示查询***写入产生的数据的写入消息发送给查询***;应用程序分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作,达到了考虑存储***和查询***的实际写入情况来确定是否放弃当前数据写入操作的目的,从而实现了保证查询***和存储***中数据的一致性的技术效果,进而解决了相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的数据写入方法的流程图;
图2是根据本发明实施例的另一种可选的数据写入方法的流程图;
图3是根据本发明实施例的再一种可选的数据写入方法的流程图;
图4是根据本发明实施例的一种可选的数据写入装置的示意图;
图5是根据本发明实施例的另一种可选的数据写入装置的示意图;
图6是根据本发明实施例的再一种可选的数据写入装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明实施例,提供了一种数据写入方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本发明实施例的一种可选的数据写入方法的流程图,如图1所示,该方法包括如下步骤:
步骤S102,应用程序将产生的数据和用于指示存储***写入产生的数据的写入消息发送给存储***;
步骤S104,应用程序将产生的数据和用于指示查询***写入产生的数据的写入消息发送给查询***;
步骤S106,应用程序分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。
这里的应用程序可以是任何应用程序。应用程序产生数据,并准备将产生的数据写入到存储***和查询***中。具体地,***一般需要通过相应的写入数据的接口程序分别将对应的数据写入存储***和查询***。
为了保证写入存储***中的数据与写入查询***中的数据相同,应用程序在准备好数据D后,会同时向存储***和查询***发送写入消息T1和数据D,并检测存储***和查询***是否能够成功写入数据,其中,写入消息T1包括:发送给存储***的用于指示存储***写入产生的数据的写入消息和发送给查询***的用于指示查询***写入产生的数据的写入消息。
由于存储***和查询***在接收到写入消息T1和数据D以后,都会尝试开启一个事务直接对数据D进行存储,并且在存储过程中,如果数据D能存储成功,则给应用程序返回一个准备就绪的信息T2,如果数据D存储失败,则记录日志,并给应用程序返回一个写入失败的信息T3。因此,应用程序可以分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。实际上,对于存储***和查询***而言,在本次数据写入操作中,无论哪个***数据写入失败,应用程序都会放弃本次数据写入操作,只有在两个***都成功完成本次的数据写入操作后,应用程序才不会放弃本次数据写入操作。需要说明的是,上述存储***和查询***会由于服务器繁忙,或者服务器宕机,或者网络中断等原因而导致数据存储失败。
通过上述实施例,可以达到考虑存储***和查询***的实际写入情况来确定是否放弃当前数据写入操作的目的,从而实现保证查询***和存储***中数据的一致性的技术效果,进而解决相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
可选地,应用程序分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作包括:
S2,在接收到存储***和/或查询***返回的消息为写入失败消息时,应用程序确定放弃本次数据写入操作;或者
S4,在预设时间段内未接收到存储***和/或查询***返回的消息时,应用程序确定放弃本次数据写入操作。
也即,实施时,可以通过两种方式确定放弃本次数据写入操作,包括:方式1,根据返回的消息的种类来确定,具体地,在存储***和查询***中至少之一返回的消息为写入失败消息时,应用程序可以确定放弃本次数据写入操作;方式2,只要存储***和/或查询***在预设时间段内没有返回消息,那么无论它们在该预设时间段之外是否返回消息,应用程序都会确定放弃本次数据写入操作,也即,如果应用程序迟迟未收到存储***或查询***返回的消息,则认为存储***或查询***写入失败,从而取消该事务的执行。需要说明的是,在放弃本次数据写入操作之后,应用程序可以再次发起写入本次所针对的数据的请求。这样,可以防止某些写入由于某次写入失败而导致最终写入失败。
进一步可选地,在应用程序确定放弃本次数据写入操作之后,上述方法还包括:
S6,应用程序向存储***或查询***中数据写入成功的一方发送用于指示存储***或查询***回滚本次写入的数据的回滚消息。
具体地,应用程序会收集存储***和查询***返回的消息,如果收到存储***或查询***发来的表示写入失败的消息,则表明该数据在存储***或查询***中不能正常存储,此时,应用程序会放弃本次数据写入操作,将并将写入失败状态记录到日志中,从而向存储***或查询***中的另外一个发送回滚消息,对应的当存储***或查询***接收到应用程序发来的回滚信息后,存储***或查询***会回滚该事务,并记录回滚信息。比如,如果存储***写入失败而查询***写入成功,则应用程序会向查询***发送一个回滚消息,使其放弃本次已经写入成功的数据;同样,如果查询***写入失败而存储***写入成功,则应用程序会向存储***发送一个回滚消息,使其放弃本次已经写入成功的数据;当然,如果查询***和存储***都写入失败,应用程序无需做任何处理。
通过本发明实施例,采用分阶段提交策略,在存储***和查询***中的任一个存储失败的情况下,使另一个***放弃本次已经存储成功的数据,可以防止存储***和查询***中的一方存储了某个或者某些数据,而另一方并未存储该个或者该些数据而导致的存储***和查询***中的数据不一致。
可选地,应用程序分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作包括:
S8,在接收到存储***和查询***返回的消息都为写入成功消息时,应用程序确定不放弃本次数据写入操作。
其中,写入成功消息即是应用程序收到的用于表示存储***或者查询***准备就绪的消息。只有收到上述两个***的写入成功消息时,才认为本次数据写入成功,此时,应用程序会将写入成功的状态记录成日志,并发送一个提交事务的消息给存储***和查询***。
进一步可选地,应用程序确定不放弃本次数据写入操作之后,上述方法还包括:
S10,应用程序向存储***和查询***提交用于指示本次数据写入成功的事务。
进一步,在事务进行过程中,在存储***或查询***宕机时并重启后,可以通过询问应用程序得到其未完成事务究竟是否需要再次提交的信息,这样,可以防止宕机等意外故障而导致数据存储失败。另外,在本发明中,应用程序可以并行同时给存储***和查询***发送多个数据,也可在每次数据写入操作中提交批量数据。
通过本发明实施例,可以有效地保证存储***和查询***的数据一致性,并且通过乐观写的方式以及分阶段提交策略,可以减少写入等待时间。所谓乐观写的方式是指系应用程序认为数据在理想状态下能够正确地同时写入查询***和存储***,只有在某个***返回失败消息时,才认为数据不能正确地同时写入查询***和存储***,并需要进行回滚等操作。
实施例2
根据本发明实施例,提供了一种数据写入方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图2是根据本发明实施例的另一种可选的数据写入方法的流程图,如图2所示,该方法包括如下步骤:
步骤S202,存储***接收应用程序产生的数据以及用于指示存储***写入应用程序产生的数据的写入消息;
步骤S204,存储***在根据写入消息对应用程序产生的数据进行数据写入操作之后,向应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息。
这里的应用程序可以是任何应用程序。应用程序产生数据,并准备将产生的数据写入到存储***和查询***中。具体地,***一般需要通过相应的写入数据的接口程序分别将对应的数据写入存储***和查询***。
为了保证写入存储***中的数据与写入查询***中的数据相同,应用程序在准备好数据D后,会同时向存储***和查询***发送写入消息T1和数据D,并检测存储***和查询***是否能够成功写入数据,其中,写入消息T1包括:发送给存储***的用于指示存储***写入产生的数据的写入消息和发送给查询***的用于指示查询***写入产生的数据的写入消息。
由于存储***和查询***在接收到写入消息T1和数据D以后,都会尝试开启一个事务直接对数据D进行存储,并且在存储过程中,如果数据D能存储成功,则给应用程序返回一个准备就绪的信息T2,如果数据D存储失败,则记录日志,并给应用程序返回一个写入失败的信息T3。因此,应用程序可以分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。实际上,对于存储***和查询***而言,在本次数据写入操作中,无论哪个***数据写入失败,应用程序都会放弃本次数据写入操作,只有在两个***都成功完成本次的数据写入操作后,应用程序才不会放弃本次数据写入操作。需要说明的是,上述存储***和查询***会由于服务器繁忙,或者服务器宕机,或者网络中断等原因而导致数据存储失败。
通过上述实施例,可以达到考虑存储***和查询***的实际写入情况来确定是否放弃当前数据写入操作的目的,从而实现保证查询***和存储***中数据的一致性的技术效果,进而解决相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
实施例3
根据本发明实施例,提供了一种数据写入方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图3是根据本发明实施例的再一种可选的数据写入方法的流程图,如图3所示,该方法包括如下步骤:
步骤S302,查询***接收应用程序产生的数据以及用于指示查询***写入应用程序产生的数据的写入消息;
步骤S304,查询***在根据写入消息对应用程序产生的数据进行数据写入操作之后,向应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息。
这里的应用程序可以是任何应用程序。应用程序产生数据,并准备将产生的数据写入到存储***和查询***中。具体地,***一般需要通过相应的写入数据的接口程序分别将对应的数据写入存储***和查询***。
为了保证写入存储***中的数据与写入查询***中的数据相同,应用程序在准备好数据D后,会同时向存储***和查询***发送写入消息T1和数据D,并检测存储***和查询***是否能够成功写入数据,其中,写入消息T1包括:发送给存储***的用于指示存储***写入产生的数据的写入消息和发送给查询***的用于指示查询***写入产生的数据的写入消息。
由于存储***和查询***在接收到写入消息T1和数据D以后,都会尝试开启一个事务直接对数据D进行存储,并且在存储过程中,如果数据D能存储成功,则给应用程序返回一个准备就绪的信息T2,如果数据D存储失败,则记录日志,并给应用程序返回一个写入失败的信息T3。因此,应用程序可以分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。实际上,对于存储***和查询***而言,在本次数据写入操作中,无论哪个***数据写入失败,应用程序都会放弃本次数据写入操作,只有在两个***都成功完成本次的数据写入操作后,应用程序才不会放弃本次数据写入操作。需要说明的是,上述存储***和查询***会由于服务器繁忙,或者服务器宕机,或者网络中断等原因而导致数据存储失败。
通过上述实施例,可以达到考虑存储***和查询***的实际写入情况来确定是否放弃当前数据写入操作的目的,从而实现保证查询***和存储***中数据的一致性的技术效果,进而解决相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
实施例4
根据本发明实施例,提供了一种数据写入装置的装置实施例。
图4是根据本发明实施例的一种可选的数据写入装置的示意图,如图4所示,该装置包括:第一发送单元402,用于使得应用程序将产生的数据和用于指示存储***写入产生的数据的写入消息发送给存储***,并将产生的数据和用于指示查询***写入产生的数据的写入消息发送给查询***;确定单元404,用于使得应用程序分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。
这里的应用程序可以是任何应用程序。应用程序产生数据,并准备将产生的数据写入到存储***和查询***中。具体地,***一般需要通过相应的写入数据的接口程序分别将对应的数据写入存储***和查询***。
为了保证写入存储***中的数据与写入查询***中的数据相同,应用程序在准备好数据D后,会同时向存储***和查询***发送写入消息T1和数据D,并检测存储***和查询***是否能够成功写入数据,其中,写入消息T1包括:发送给存储***的用于指示存储***写入产生的数据的写入消息和发送给查询***的用于指示查询***写入产生的数据的写入消息。
由于存储***和查询***在接收到写入消息T1和数据D以后,都会尝试开启一个事务直接对数据D进行存储,并且在存储过程中,如果数据D能存储成功,则给应用程序返回一个准备就绪的信息T2,如果数据D存储失败,则记录日志,并给应用程序返回一个写入失败的信息T3。因此,应用程序可以分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。实际上,对于存储***和查询***而言,在本次数据写入操作中,无论哪个***数据写入失败,应用程序都会放弃本次数据写入操作,只有在两个***都成功完成本次的数据写入操作后,应用程序才不会放弃本次数据写入操作。需要说明的是,上述存储***和查询***会由于服务器繁忙,或者服务器宕机,或者网络中断等原因而导致数据存储失败。
通过上述实施例,可以达到考虑存储***和查询***的实际写入情况来确定是否放弃当前数据写入操作的目的,从而实现保证查询***和存储***中数据的一致性的技术效果,进而解决相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
可选地,上述确定单元还用于使得:在接收到存储***和/或查询***返回的消息为写入失败消息时,应用程序确定放弃本次数据写入操作;或者在预设时间段内未接收到存储***和/或查询***返回的消息时,应用程序确定放弃本次数据写入操作。
也即,实施时,可以通过两种方式确定放弃本次数据写入操作,包括:方式1,根据返回的消息的种类来确定,具体地,在存储***和查询***中至少之一返回的消息为写入失败消息时,应用程序可以确定放弃本次数据写入操作;方式2,只要存储***和/或查询***在预设时间段内没有返回消息,那么无论它们在该预设时间段之外是否返回消息,应用程序都会确定放弃本次数据写入操作,也即,如果应用程序迟迟未收到存储***或查询***返回的消息,则认为存储***或查询***写入失败,从而取消该事务的执行。需要说明的是,在放弃本次数据写入操作之后,应用程序可以再次发起写入本次所针对的数据的请求。这样,可以防止某些写入由于某次写入失败而导致最终写入失败。
进一步可选地,上述装置还包括:第二发送单元,用于在应用程序确定放弃本次数据写入操作之后,应用程序向存储***或查询***中数据写入成功的一方发送用于指示存储***或查询***回滚本次写入的数据的回滚消息。
具体地,应用程序会收集存储***和查询***返回的消息,如果收到存储***或查询***发来的表示写入失败的消息,则表明该数据在存储***或查询***中不能正常存储,此时,应用程序会放弃本次数据写入操作,将并将写入失败状态记录到日志中,从而向存储***或查询***中的另外一个发送回滚消息,对应的当存储***或查询***接收到应用程序发来的回滚信息后,存储***或查询***会回滚该事务,并记录回滚信息。比如,如果存储***写入失败而查询***写入成功,则应用程序会向查询***发送一个回滚消息,使其放弃本次已经写入成功的数据;同样,如果查询***写入失败而存储***写入成功,则应用程序会向存储***发送一个回滚消息,使其放弃本次已经写入成功的数据;当然,如果查询***和存储***都写入失败,应用程序无需做任何处理。
通过本发明实施例,采用分阶段提交策略,在存储***和查询***中的任一个存储失败的情况下,使另一个***放弃本次已经存储成功的数据,可以防止存储***和查询***中的一方存储了某个或者某些数据,而另一方并未存储该个或者该些数据而导致的存储***和查询***中的数据不一致。
可选地,上述确定单元还用于使得在接收到存储***和查询***返回的消息都为写入成功消息时,应用程序确定不放弃本次数据写入操作。
其中,写入成功消息即是应用程序收到的用于表示存储***或者查询***准备就绪的消息。只有收到上述两个***的写入成功消息时,才认为本次数据写入成功,此时,应用程序会将写入成功的状态记录成日志,并发送一个提交事务的消息给存储***和查询***。
进一步可选地,上述装置还包括:提交单元,用于使得应用程序确定不放弃本次数据写入操作之后,应用程序向存储***和查询***提交用于指示本次数据写入成功的事务。
进一步,在事务进行过程中,在存储***或查询***宕机时并重启后,可以通过询问应用程序得到其未完成事务究竟是否需要再次提交的信息,这样,可以防止宕机等意外故障而导致数据存储失败。另外,在本发明中,应用程序可以并行同时给存储***和查询***发送多个数据,也可在每次数据写入操作中提交批量数据。
通过本发明实施例,可以有效地保证存储***和查询***的数据一致性,并且通过乐观写的方式以及分阶段提交策略,可以减少写入等待时间。所谓乐观写的方式是指系应用程序认为数据在理想状态下能够正确地同时写入查询***和存储***,只有在某个***返回失败消息时,才认为数据不能正确地同时写入查询***和存储***,并需要进行回滚等操作。
实施例5
根据本发明实施例,提供了一种数据写入装置的装置实施例。
图5是根据本发明实施例的另一种可选的数据写入装置的示意图,如图5所示,该装置包括:第一接收单元502,用于使得存储***接收应用程序产生的数据以及用于指示存储***写入应用程序产生的数据的写入消息;第一执行单元504,用于使得存储***在根据写入消息对应用程序产生的数据进行数据写入操作之后,向应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息。
这里的应用程序可以是任何应用程序。应用程序产生数据,并准备将产生的数据写入到存储***和查询***中。具体地,***一般需要通过相应的写入数据的接口程序分别将对应的数据写入存储***和查询***。
为了保证写入存储***中的数据与写入查询***中的数据相同,应用程序在准备好数据D后,会同时向存储***和查询***发送写入消息T1和数据D,并检测存储***和查询***是否能够成功写入数据,其中,写入消息T1包括:发送给存储***的用于指示存储***写入产生的数据的写入消息和发送给查询***的用于指示查询***写入产生的数据的写入消息。
由于存储***和查询***在接收到写入消息T1和数据D以后,都会尝试开启一个事务直接对数据D进行存储,并且在存储过程中,如果数据D能存储成功,则给应用程序返回一个准备就绪的信息T2,如果数据D存储失败,则记录日志,并给应用程序返回一个写入失败的信息T3。因此,应用程序可以分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。实际上,对于存储***和查询***而言,在本次数据写入操作中,无论哪个***数据写入失败,应用程序都会放弃本次数据写入操作,只有在两个***都成功完成本次的数据写入操作后,应用程序才不会放弃本次数据写入操作。需要说明的是,上述存储***和查询***会由于服务器繁忙,或者服务器宕机,或者网络中断等原因而导致数据存储失败。
通过上述实施例,可以达到考虑存储***和查询***的实际写入情况来确定是否放弃当前数据写入操作的目的,从而实现保证查询***和存储***中数据的一致性的技术效果,进而解决相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
实施例6
根据本发明实施例,提供了一种数据写入装置的装置实施例。
图6是根据本发明实施例的再一种可选的数据写入装置的示意图,如图6所示,该装置包括:第二接收单元602,用于使得查询***接收应用程序产生的数据以及用于指示查询***写入应用程序产生的数据的写入消息;第二执行单元604,用于使得查询***在根据写入消息对应用程序产生的数据进行数据写入操作之后,向应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息。
这里的应用程序可以是任何应用程序。应用程序产生数据,并准备将产生的数据写入到存储***和查询***中。具体地,***一般需要通过相应的写入数据的接口程序分别将对应的数据写入存储***和查询***。
为了保证写入存储***中的数据与写入查询***中的数据相同,应用程序在准备好数据D后,会同时向存储***和查询***发送写入消息T1和数据D,并检测存储***和查询***是否能够成功写入数据,其中,写入消息T1包括:发送给存储***的用于指示存储***写入产生的数据的写入消息和发送给查询***的用于指示查询***写入产生的数据的写入消息。
由于存储***和查询***在接收到写入消息T1和数据D以后,都会尝试开启一个事务直接对数据D进行存储,并且在存储过程中,如果数据D能存储成功,则给应用程序返回一个准备就绪的信息T2,如果数据D存储失败,则记录日志,并给应用程序返回一个写入失败的信息T3。因此,应用程序可以分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。实际上,对于存储***和查询***而言,在本次数据写入操作中,无论哪个***数据写入失败,应用程序都会放弃本次数据写入操作,只有在两个***都成功完成本次的数据写入操作后,应用程序才不会放弃本次数据写入操作。需要说明的是,上述存储***和查询***会由于服务器繁忙,或者服务器宕机,或者网络中断等原因而导致数据存储失败。
通过上述实施例,可以达到考虑存储***和查询***的实际写入情况来确定是否放弃当前数据写入操作的目的,从而实现保证查询***和存储***中数据的一致性的技术效果,进而解决相关技术中无法保证查询***和存储***中数据的一致性的技术问题。
上述数据写入装置包括处理器和存储器,上述第一发送单元和确定单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数解析文本内容。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品的实施例,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:应用程序将产生的数据和用于指示存储***写入产生的数据的写入消息发送给存储***;应用程序将产生的数据和用于指示查询***写入产生的数据的写入消息发送给查询***;应用程序分别接收并根据存储***和查询***返回的消息确定是否放弃本次数据写入操作。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (12)
1.一种数据写入方法,其特征在于,包括:
应用程序将产生的数据和用于指示存储***写入所述产生的数据的写入消息发送给所述存储***;
所述应用程序将所述产生的数据和用于指示查询***写入所述产生的数据的写入消息发送给所述查询***;
所述应用程序分别接收并根据所述存储***和所述查询***返回的消息确定是否放弃本次数据写入操作;
其中,所述应用程序分别接收并根据所述存储***和所述查询***返回的消息确定是否放弃本次数据写入操作包括:
在接收到所述存储***和/或所述查询***返回的消息为写入失败消息时,所述应用程序确定放弃本次数据写入操作;或者
在预设时间段内未接收到所述存储***和/或所述查询***返回的消息时,所述应用程序确定放弃本次数据写入操作。
2.根据权利要求1所述的方法,其特征在于,在所述应用程序确定放弃本次数据写入操作之后,所述方法还包括:
所述应用程序向所述存储***或所述查询***中数据写入成功的一方发送用于指示所述存储***或所述查询***回滚本次写入的数据的回滚消息。
3.根据权利要求1所述的方法,其特征在于,所述应用程序分别接收并根据所述存储***和所述查询***返回的消息确定是否放弃本次数据写入操作包括:
在接收到所述存储***和所述查询***返回的消息都为写入成功消息时,所述应用程序确定不放弃本次数据写入操作。
4.根据权利要求3所述的方法,其特征在于,所述应用程序确定不放弃本次数据写入操作之后,所述方法还包括:
所述应用程序向所述存储***和所述查询***提交用于指示本次数据写入成功的事务。
5.一种数据写入方法,其特征在于,包括:
存储***接收应用程序产生的数据以及用于指示所述存储***写入所述应用程序产生的数据的写入消息;
所述存储***在根据所述写入消息对所述应用程序产生的数据进行数据写入操作之后,向所述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息;其中,向所述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息之后,包括:在接收到所述存储***返回的消息为写入失败消息时,确定放弃本次数据写入操作;或者在预设时间段内未接收到所述存储***返回的消息时,确定放弃本次数据写入操作。
6.一种数据写入方法,其特征在于,包括:
查询***接收应用程序产生的数据以及用于指示所述查询***写入所述应用程序产生的数据的写入消息;
所述查询***在根据所述写入消息对所述应用程序产生的数据进行数据写入操作之后,向所述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息;其中,向所述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息之后,包括:在接收到所述查询***返回的消息为写入失败消息时,确定放弃本次数据写入操作;或者在预设时间段内未接收到所述查询***返回的消息时,确定放弃本次数据写入操作。
7.一种数据写入装置,其特征在于,包括:
第一发送单元,用于使得应用程序将产生的数据和用于指示存储***写入所述产生的数据的写入消息发送给所述存储***,并将所述产生的数据和用于指示查询***写入所述产生的数据的写入消息发送给所述查询***;
确定单元,用于使得所述应用程序分别接收并根据所述存储***和所述查询***返回的消息确定是否放弃本次数据写入操作;
其中,所述确定单元还用于使得:在接收到所述存储***和/或所述查询***返回的消息为写入失败消息时,所述应用程序确定放弃本次数据写入操作;或者
在预设时间段内未接收到所述存储***和/或所述查询***返回的消息时,所述应用程序确定放弃本次数据写入操作。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第二发送单元,用于在所述应用程序确定放弃本次数据写入操作之后,所述应用程序向所述存储***或所述查询***中数据写入成功的一方发送用于指示所述存储***或所述查询***回滚本次写入的数据的回滚消息。
9.根据权利要求7所述的装置,其特征在于,所述确定单元还用于使得在接收到所述存储***和所述查询***返回的消息都为写入成功消息时,所述应用程序确定不放弃本次数据写入操作。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
提交单元,用于使得所述应用程序确定不放弃本次数据写入操作之后,所述应用程序向所述存储***和所述查询***提交用于指示本次数据写入成功的事务。
11.一种数据写入装置,其特征在于,包括:
第一接收单元,用于使得存储***接收应用程序产生的数据以及用于指示所述存储***写入所述应用程序产生的数据的写入消息;
第一执行单元,用于使得所述存储***在根据所述写入消息对所述应用程序产生的数据进行数据写入操作之后,向所述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息;其中,所述装置还用于向所述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息之后,在接收到所述存储***返回的消息为写入失败消息时,确定放弃本次数据写入操作;或者在预设时间段内未接收到所述存储***返回的消息时,确定放弃本次数据写入操作。
12.一种数据写入装置,其特征在于,包括:
第二接收单元,用于使得查询***接收应用程序产生的数据以及用于指示所述查询***写入所述应用程序产生的数据的写入消息;
第二执行单元,用于使得所述查询***在根据所述写入消息对所述应用程序产生的数据进行数据写入操作之后,向所述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息;其中,所述装置还用于向所述应用程序返回作为确定是否放弃本次数据写入操作的依据的返回消息之后,在接收到所述查询***返回的消息为写入失败消息时,确定放弃本次数据写入操作;或者在预设时间段内未接收到所述查询***返回的消息时,确定放弃本次数据写入操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510960541.3A CN106897024B (zh) | 2015-12-18 | 2015-12-18 | 数据写入方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510960541.3A CN106897024B (zh) | 2015-12-18 | 2015-12-18 | 数据写入方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106897024A CN106897024A (zh) | 2017-06-27 |
CN106897024B true CN106897024B (zh) | 2020-07-31 |
Family
ID=59189954
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510960541.3A Active CN106897024B (zh) | 2015-12-18 | 2015-12-18 | 数据写入方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106897024B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113448649B (zh) * | 2021-07-06 | 2023-07-14 | 聚好看科技股份有限公司 | 一种基于Redis的首页数据加载的服务器及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477447A (zh) * | 2009-01-21 | 2009-07-08 | 杭州华三通信技术有限公司 | 磁盘快照方法与装置 |
CN103780638A (zh) * | 2012-10-18 | 2014-05-07 | 腾讯科技(深圳)有限公司 | 数据同步方法及*** |
CN105159991A (zh) * | 2015-09-01 | 2015-12-16 | 北京皮尔布莱尼软件有限公司 | 一种保持数据一致性的方法、装置、***和应用服务器 |
-
2015
- 2015-12-18 CN CN201510960541.3A patent/CN106897024B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477447A (zh) * | 2009-01-21 | 2009-07-08 | 杭州华三通信技术有限公司 | 磁盘快照方法与装置 |
CN103780638A (zh) * | 2012-10-18 | 2014-05-07 | 腾讯科技(深圳)有限公司 | 数据同步方法及*** |
CN105159991A (zh) * | 2015-09-01 | 2015-12-16 | 北京皮尔布莱尼软件有限公司 | 一种保持数据一致性的方法、装置、***和应用服务器 |
Also Published As
Publication number | Publication date |
---|---|
CN106897024A (zh) | 2017-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106899648B (zh) | 一种数据处理方法和设备 | |
CN109284073B (zh) | 数据存储方法、装置、***、服务器、控制节点及介质 | |
US20150213100A1 (en) | Data synchronization method and system | |
US20210182052A1 (en) | Method, device, and apparatus for updating application program, and storage medium | |
US20200272452A1 (en) | Automated transparent distribution of updates to server computer systems in a fleet | |
CN107506266B (zh) | 一种数据恢复方法及*** | |
CN110807064B (zh) | Rac分布式数据库集群***中的数据恢复装置 | |
CN105824846B (zh) | 数据迁移方法及装置 | |
EP3147797B1 (en) | Data management method, node and system for database cluster | |
CN106155839B (zh) | 一种用于备份数据的方法与设备 | |
CN108510287B (zh) | 客户回访的判断方法、电子装置及计算机可读存储介质 | |
CN106970856B (zh) | 对数据进行备份、恢复及挂载的数据管理***及方法 | |
CN103198122A (zh) | 重启内存数据库的方法和装置 | |
WO2017028375A1 (zh) | 一种版本升级方法及*** | |
CN108228789B (zh) | 从节点触发的同步异常恢复方法及装置 | |
CN103634388B (zh) | 处理存储服务器中控制器重启的方法和相关设备及通信*** | |
KR101424568B1 (ko) | 트랜잭션 재시작 가능한 클라이언트 장치와 데이터베이스 서버 및 방법 | |
CN108200157B (zh) | 主节点触发回退的日志同步方法及装置 | |
CN112765126B (zh) | 数据库事务的管理方法、装置、计算机设备和存储介质 | |
CN105892954A (zh) | 基于多副本的数据存储方法和装置 | |
CN106897024B (zh) | 数据写入方法及装置 | |
CN104407806A (zh) | 独立磁盘冗余阵列组硬盘信息的修改方法和装置 | |
CN111130856A (zh) | 一种服务器配置方法、***、设备及计算机可读存储介质 | |
CN105808556B (zh) | 一种数据库的操作方法及数据库引擎 | |
CN115858668A (zh) | 分布式事务处理方法、装置、电子装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 100083 No. 401, 4th Floor, Haitai Building, 229 North Fourth Ring Road, Haidian District, Beijing Applicant after: Beijing Guoshuang Technology Co.,Ltd. Address before: 100086 Cuigong Hotel, 76 Zhichun Road, Shuangyushu District, Haidian District, Beijing Applicant before: Beijing Guoshuang Technology Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |