CN113326268A - 一种数据写入、读取方法及装置 - Google Patents

一种数据写入、读取方法及装置 Download PDF

Info

Publication number
CN113326268A
CN113326268A CN202110709787.9A CN202110709787A CN113326268A CN 113326268 A CN113326268 A CN 113326268A CN 202110709787 A CN202110709787 A CN 202110709787A CN 113326268 A CN113326268 A CN 113326268A
Authority
CN
China
Prior art keywords
data
task
write
database
request
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
Application number
CN202110709787.9A
Other languages
English (en)
Inventor
尹强
王和平
黄山
杨峙岳
刘有
杨永坤
华德义
白乐
徐嘉杨
饶进阳
邸帅
卢道和
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
WeBank Co Ltd
Original Assignee
WeBank Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202110709787.9A priority Critical patent/CN113326268A/zh
Publication of CN113326268A publication Critical patent/CN113326268A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/258Data format conversion from or to a database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/273Asynchronous replication or reconciliation

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及金融科技(Fintech)领域,公开一种数据写入、读取方法及装置,对接收的第一数据的复写请求进行语法解析,确定抽象语法树;抽象语法树包括N个第一写任务节点;针对每个第一写任务节点:确定写入的第一数据库及对应的转换器;通过转换器将第一写任务节点转换为复写请求的执行树中的第一写任务节点;在执行执行树的N个第一写任务节点时,向N个第一数据库分别发送N个第一写任务;第一写任务用于将第一数据写入对应的第一数据库。通过该方式,可以实现对于任意的业务场景下的第一数据,都可以生成相应的第一写任务,降低对每个第一写任务对应的第一数据库的存储引擎的依赖,提高对不同业务数据的同步复写的效率和灵活性。

Description

一种数据写入、读取方法及装置
技术领域
本申请实施例涉及金融科技(Fintech)领域,尤其涉及一种数据写入、读取方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术(例如:大数据、云计算或区块链)应用在金融领域,传统金融业正在逐步向金融科技转变,在大数据技术的背景下,需要基于数据库对海量数据进行存储。
为了保证数据的高可用,一种方式是通过单写主集群,然后通过异步复制的方式来同步主集群的数据到备集群,以达到数据的最终一致性。然而,在这种主备集群异步复制的技术方案下,如果用户写入操作频繁且数据量巨大,则跨集群间的异步复制会造成巨大的同步成本,如对带宽要求非常高。在异步复制出现高延迟时,主集群一旦宕机就会出现很长一段时间备集群不能提供服务,对客户端产生很大的影响;另外,这种技术方案对主备集群的版本有要求,一般会强制要求主集群和备集群的相关存储引擎的版本必须一致,否则很可能会导致主集群复制同步的数据,备集群不能正常解析;进一步的,一旦主集群出现异常导致用户切到备集群,这时备集群作为主集群提供服务,原先的主集群恢复后,需要手动进行回切,才能发起由新主集群(原备集群)到新备集群(原主集群)的数据异步复制同步,产生巨大的运维成本。
发明内容
本申请提供一种数据写入、读取方法及装置,用以实现在任意业务场景、无需使用指定的存储引擎的状态下,快速地对复写\复读请求进行响应。
第一方面,本申请实施例提供一种数据写入方法,该方法可以由数据读写服务器执行,包括:接收第一数据的复写请求;对所述第一数据的复写请求进行语法解析,确定所述第一数据的复写请求的抽象语法树;所述抽象语法树包括N个第一写任务节点;所述N为大于1的正整数;针对所述N个第一写任务节点中的每个第一写任务节点:确定所述第一写任务节点写入的第一数据库及所述第一数据库对应的转换器;通过所述第一数据库对应的转换器,将所述第一写任务节点转换为所述第一数据的复写请求的执行树中的第一写任务节点,所述第一数据的复写请求的执行树包括:N个第一写任务节点;在执行所述第一数据的复写请求的执行树的N个第一写任务节点时,向N个第一数据库分别发送N个第一写任务;所述第一写任务用于将所述第一数据写入对应的第一数据库。
针对不同业务场景下的第一数据,可能写入不同的第一数据库,导致现有技术中在执行复写请求和写入数据库时,需要针对每种业务设计相应的执行代码。通过上述方法,数据读写服务器对于接收到第一数据的复写请求进行语法解析后,获得的抽象语法树,可以不依赖于第一数据对应的业务场景,并针对于每一个写任务节点,在确定该第一写任务节点写入的第一数据库后,可以基于写入每个第一数据库对应的转换器,将该第一写任务节点转换为在执行树中的第一写任务节点。使得数据读写服务器在执行执行树中的第一写任务节点时,将第一数据写入第一数据库,实现不同数据写入不同数据库的需求。可以看出,在该方案中,抽象语法树和执行树的整体架构可以统一设置,通过不同第一数据库对应的转换器,可以实现相应的执行树中的第一写任务节点的生成,实现不同数据写入不同数据库,从而,避免针对每种业务对应的数据,相应生成整套的执行代码,降低了用户使用成本及运维成本。
在一种可能的实现方法中,在确定所述N个第一写任务中的一个第一写任务写入失败时,触发所述第一数据的复写请求的执行树,新增第一回放任务;所述第一回放任务为所述失败的第一写任务的回放任务;在执行所述第一回放任务后,向回放数据库中发送所述失败的第一写任务。
基于该方案,在将N个第一写任务分别写入到对应的第一数据库的过程中,可能发生当中的一个或者几个第一写任务写入失败,此时为了可以提升数据写入的准确度,则可以触发第一数据的复写请求的执行树,以新增第一回放任务,并在执行该第一回放任务后,向回放数据库中写入该失败的第一写任务,由回放数据库对该失败的第一写任务进行临时存储,以在第一数据库恢复正常后,将回放数据库中存储的第一写任务重新写入第一数据库中。通过上述方法,增加了数据复写架构的容错性。
在一种可能实现的方法中,在所述回放数据库中存在至少一个失败的第一写任务时,触发所述第一数据的复写请求的执行树中,新增第一回写任务;在执行所述第一回写任务后,向所述失败的第一写任务对应的第一数据库重新发送所述失败的第一写任务。
基于该方案,在因为第一数据库异常而将至少一个失败的第一写任务写入到回放数据库后,为了能够及时地将回放数据库中临时存储的至少一个失败的第一写任务重新写回第一数据库中,则可以触发第一数据的复写请求的执行树,以新增第一回写任务,并在执行该第一回写任务后,向失败的第一写任务对应的第一数据库重新发送失败的第一写任务,如此将可以实现及时地将临时存储于回放数据库中的第一数据写入到已经恢复正常的第一数据库中。
在一种可能实现的方法中,接收第二数据的复写请求,所述第二数据的复写请求和所述第一数据的复写请求存在关联关系;对所述第二数据的复写请求进行语法解析,确定第二数据的复写请求的抽象语法树;所述第二数据的复写请求的抽象语法树包括:K个第二写任务节点;所述K为大于1的正整数;针对所述K个第二写任务节点中的每个第二写任务节点:确定所述第二写任务节点写入的第二数据库及所述第二数据库对应的转换器;通过所述第二数据库对应的转换器,将所述第二写任务节点转换为所述第二数据的复写请求的执行树中的第二写任务节点;在所述第一数据的复写请求的执行树未执行成功时,在所述第二数据的复写请求的执行树中,新增第二回放任务;在执行所述第二回放任务后,将所述K个第二写任务写入回放数据库。
基于该方案,在将第一数据写入到对应的第一数据库的过程中,如果在发生写入异常的同时,还接收到与第一数据的复写请求存在关联关系的第二数据的复写请求,则此时为了保证数据写入的正确性,可以在第二数据的复写请求的执行树中新增第二回放任务,并在执行该第二回放任务后,将第二数据的复写请求对应的K个第二写任务写入回放数据库。
在一种可能实现的方法中,在所述第一数据的复写请求的执行树执行成功时,触发所述第二数据的复写请求的执行树新增第二回写任务;所述第二回写任务用于将所述回放数据库的至少一个第二写任务回写至所述至少一个第二写任务对应的第二数据库;在执行所述第二回写任务后,从所述回放数据库调用所述至少一个第二写任务,并向所述至少一个第二写任务对应的第二数据库发送所述至少一个第二写任务。
基于该方案,在将第二数据的复写请求对应的K个第二写任务写入回放数据库中后,在某个时刻,如果第一数据的复写请求的执行树执行成功,则为了可以及时地将位于回放数据库中的第二写任务写入到对应的第二数据库中,则可以触发第二数据的复写请求的执行树,以新增第二回写任务,从而在第二回写任务执行后,则可以对回放数据库中的至少一个第二写任务进行调用,以将第二写任务写入对应的第二数据库中。
第二方面,本申请实施例提供一种数据读取方法,该方法包括:接收第一数据的复读请求;对所述第一数据的复读请求进行语法解析,确定第一数据的复读请求的抽象语法树;所述抽象语法树包括N个第一读任务节点;所述N为大于1的正整数;针对所述N个第一读任务节点中的每个第一读任务节点:确定所述第一读任务节点读取的第一数据库及所述第一数据库对应的转换器;通过所述第一数据库对应的转换器,将所述第一读任务节点转换为所述第一数据的复读请求的执行树中的第一读任务节点,所述第一数据的复读请求的执行树包括:N个第一读任务节点;在执行所述第一数据的复读请求的执行树的N个第一读任务节点时,向N个第一数据库分别发送N个第一读任务;所述第一读任务用于从对应的第一数据库中读取所述第一数据。
目前,对于一个数据的读取请求,在将该数据从对应的数据库中进行读取时,首先将对该数据的读取请求进行解析,从而确定出将该数据从对应的数据库中进行读取的业务代码,如此,针对于不同的业务场景下的每一个数据的读取请求,都需要为之解析以得到对应的从数据库中进行读取的业务代码,显然该数据读取过程并没有很好地实现与业务场景的解耦,增加了用户使用成本及运维成本。基于本方案,对于接收到第一数据的复读请求,通过对它进行语法解析,从而可确定它所对应的包括有N个第一读任务节点的抽象语法树,并针对于每一个读任务节点,在确定该第一读任务节点读取的第一数据库及第一数据库对应的转换器后,就可以通过转换器将该第一读任务节点转换为在执行树中的第一读任务节点,从而在执行执行树中的第一读任务节点时就可以将第一读任务发送到对应的第一数据库,实现了与业务场景的解耦,降低了用户使用成本及运维成本。
第三方面,本申请实施例提供一种数据写入装置,该装置包括:接收单元,用于接收第一数据的复写请求;抽象语法树确定单元,用于对所述第一数据的复写请求进行语法解析,确定所述第一数据的复写请求的抽象语法树;所述抽象语法树包括N个第一写任务节点;所述N为大于1的正整数;转换器确定单元,用于针对所述N个第一写任务节点中的每个第一写任务节点:确定所述第一写任务节点写入的第一数据库及所述第一数据库对应的转换器;转换单元,用于通过所述第一数据库对应的转换器,将所述第一写任务节点转换为所述第一数据的复写请求的执行树中的第一写任务节点,所述第一数据的复写请求的执行树包括:N个第一写任务节点;发送单元,用于在执行所述第一数据的复写请求的执行树的N个第一写任务节点时,向N个第一数据库分别发送N个第一写任务;所述第一写任务用于将所述第一数据写入对应的第一数据库。
在一种可能实现的方法中,所述装置还包括处理单元,用于在确定所述N个第一写任务中的一个第一写任务写入失败时,触发所述第一数据的复写请求的执行树,新增第一回放任务;所述第一回放任务为所述失败的第一写任务的回放任务;所述发送单元,还用于在执行所述第一回放任务后,向回放数据库中发送所述失败的第一写任务。
在一种可能实现的方法中,所述处理单元,还用于在所述回放数据库中存在至少一个失败的第一写任务时,触发所述第一数据的复写请求的执行树中,新增第一回写任务;所述发送单元,还用于在执行所述第一回写任务后,向所述失败的第一写任务对应的第一数据库重新发送所述失败的第一写任务。
在一种可能实现的方法中,所述接收单元,还用于接收第二数据的复写请求,所述第二数据的复写请求和所述第一数据的复写请求存在关联关系;所述抽象语法树确定单元,还用于对所述第二数据的复写请求进行语法解析,确定第二数据的复写请求的抽象语法树;所述第二数据的复写请求的抽象语法树包括:K个第二写任务节点;所述K为大于1的正整数;所述转换器确定单元,还用于针对所述K个第二写任务节点中的每个第二写任务节点:确定所述第二写任务节点写入的第二数据库及所述第二数据库对应的转换器;所述转换单元,还用于通过所述第二数据库对应的转换器,将所述第二写任务节点转换为所述第二数据的复写请求的执行树中的第二写任务节点;所述处理单元,还用于在所述第一数据的复写请求的执行树未执行成功时,在所述第二数据的复写请求的执行树中,新增第二回放任务;所述处理单元,还用于在执行所述第二回放任务后,将所述K个第二写任务写入回放数据库。
在一种可能实现的方法中,所述处理单元,还用于在所述第一数据的复写请求的执行树执行成功时,触发所述第二数据的复写请求的执行树新增第二回写任务;所述第二回写任务用于将所述回放数据库的至少一个第二写任务回写至所述至少一个第二写任务对应的第二数据库;所述发送单元,还用于在执行所述第二回写任务后,从所述回放数据库调用所述至少一个第二写任务,并向所述至少一个第二写任务对应的第二数据库发送所述至少一个第二写任务。
第四方面,本申请实施例提供一种数据读取装置,该装置包括:接收单元,用于接收第一数据的复读请求;抽象语法树确定单元,对所述第一数据的复读请求进行语法解析,确定第一数据的复读请求的抽象语法树;所述抽象语法树包括N个第一读任务节点;所述N为大于1的正整数;转换器确定单元,用于针对所述抽象语法树中的N个第一读任务节点中的每个第一读任务节点:确定所述第一读任务节点读取的第一数据库及所述第一数据库对应的转换器;转换单元,用于通过所述第一数据库对应的转换器,将所述第一读任务节点转换为所述第一数据的复读请求的执行树中的第一读任务节点;,所述第一数据的复读请求的执行树包括:N个第一读任务节点;发送单元,用于在执行所述第一数据的复读请求的执行树的N个第一读任务节点时,向N个第一数据库分别发送N个第一读任务;所述第一读任务用于从对应的第一数据库中读取所述第一数据。
第五方面,本申请实施例提供了一种计算设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行如第一方面、第二方面任一实现方法。
第六方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如第一方面、第二方面任一实现方法。
附图说明
图1为本申请实施例提供的一种系统架构的示意图;
图2为一种数据双写方案的示意图;
图3为本申请实施例提供的一种数据写入方法的流程示意图;
图4为本申请实施例提供的一种将第一数据的复写请求转换为第一数据的写事件的示意图;
图5为本申请实施例提供的一种逻辑执行树的示意图;
图6为本申请实施例提供的一种逻辑执行树的示意图;
图7为本申请实施例提供的一种物理执行树的示意图;
图8a为本申请实施例提供的一种任务写入回放数据库的示意图;
图8b为本申请实施例提供的一种对失败的第一写任务进行重试的示意图;
图9为本申请实施例提供的一种回放数据库写入的示意图;
图10为本申请实施例提供的一种对第二数据的写入方法的示意图;
图11为本申请实施例提供的一种回写任务的示意图;
图12为本申请实施例提供的一种数据追平时的任务写入示意图;
图13为本申请实施例提供的一种数据读取方法的流程示意图;
图14为本申请实施例提供的一种数据单读的示意图;
图15为本申请实施例提供的一种数据双读的示意图;
图16为本申请实施例提供的一种数据写入装置的结构示意图;
图17为本申请实施例提供的一种数据读取装置的结构示意图;
图18为本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
如图1所示,为本申请实施例提供的一种系统架构的示意图,该系统中包括客户端110、数据读写服务器111和至少两个数据库,如图1所示,设包括数据库112和数据库113。
其中,客户端110可为智能手机、电脑、iPad等终端设备或执行数据写入请求功能的应用程序或部件,用于向数据读写服务器111发送第一数据的复写请求,该第一数据的复写请求中可以包括指示信息,该指示信息用于指示数据库的标识信息,该数据库可以是第一数据的复写请求携带的数据写入的目标数据库。数据库112可以为一个独立的数据库,也可以为多个数据库组成的数据库服务集群,本申请对此不做限定;数据库113可以为一个独立的数据库,也可以为多个数据库组成的数据库服务集群,本申请对此不做限定。
数据读写服务器111可以对客户端110发送的第一数据的复写请求进行解析,确定第一数据写入的数据库,并向该数据库写入第一数据。
一种可能的方式,为了保证数据的高可用,数据读写服务器111可通过异步复制的方式,将第一数据写入到多个数据库中,多个数据库可以是主集群和备集群。下面以主备集群为第一数据写入的数据库为例,进行说明。如图2所示,为一种数据双写方案的示意图,其中,数据读写服务器111可以先单写主集群,然后通过异步复制的方式来同步主集群的数据到备集群,以达到数据的最终一致性。
由于图2所示的数据双写方案存在同步成本大、对存储引擎存在依赖性以及运维成本大的弊端,对此目前市面上也还存在主备集群同时双写的技术方案。然而,已知的主备多活、从客户端源头双写数据的技术方案,大多都是紧耦合业务应用场景,其只能在某一个业务应用场景下针对某个特定的存储引擎才能实现主备双写,例如:针对HBase引擎,在某些实时写少实时查询多,写多是通过批量导入的方式的场景下,由于实时写少对整个业务查询的影响很小,所以客户端只需要开双线程直接双写即可,从而达到多活的效果。显然该主备集群同时双写的技术方案并不具备业务无关以及存储引擎无关的通用性。
针对上述技术问题,本申请实施例基于如图1所示的架构,提供一种数据写入方法,如图3所示,该方法包括:
步骤301,接收第一数据的复写请求。
在步骤301中,可由数据读写服务器接收客户端发送的第一数据的复写请求。
数据读写服务器可用于接收客户端发送的第一数据的复写请求。在一些实施例中,数据库可以是关系数据库,也可以还是非关系型数据库。
以数据库为关系型数据库为例,数据读写服务器可通过结构化查询语言(Structured Query Language,SQL),可以实现对关系数据库的操作。此时,第一数据的复写请求可以是SQL语句。例如,第一数据的复写请求可以是存储任务写请求(StorageJobWriteReq)。SQL语句可以包括:关键字、数据库的表名、数据库的列名等信息。其中,关键字用于指示“对表进行查询”或者“在数据库中写入第一数据”等操作信息。数据库管理系统(Database Management System,DBMS)可以根据对数据库的操作对应的指令,设置不同的SQL语句。
再比如,数据库为非关系型数据库,例如,Hbase数据库,数据读写服务器可以根据第一数据的复写请求,生成Hbase数据库对应的抽象语法树。当然,还可以是其他类型的数据库,本申请不做限定。
步骤302,对所述第一数据的复写请求进行语法解析,确定所述第一数据的复写请求的抽象语法树。
其中,所述抽象语法树包括N个第一写任务节点;所述N为大于1的正整数。
在步骤302中,以SQL为例,针对客户端提交的一个第一数据的复写请求,数据读写服务器可以对第一数据的复写请求进行语法解析,获得SQL的语法结构化描述。解析的方式可以包括生成SQL语句对应的树结构。根据解析的方式,树结构可以包括:抽象语法树(Abstracted Syntax Tree),逻辑执行树(Logical Tree)和物理执行树(Physical Tree)。
为便于数据读写服务器对第一数据的复写请求进行解析,可以为第一数据的复写请求建立第一数据的写事件,例如,第一数据的写事件可以为存储写事件(StorageWriteJob)。第一数据的写事件是第一数据的复写请求解析后的树形结构的起始模块或触发模块。第一数据的写事件可以包括第一数据的复写请求的信息。如图4所示,为本申请实施例提供的一种将第一数据的复写请求转换为第一数据的写事件的示意图。
第一数据的写事件可以用于生成并执行抽象语法树(Abstracted Syntax Tree)和执行树。其中,执行数可以包括以下至少一项:逻辑执行树(Logical Tree)和物理执行树(Physical Tree)。
在一种可能的实现方式中,可以通过数据读写服务器的编译器Parser,对第一数据的写事件进行词法分析,生成一个抽象语法树Abstracted Syntax Tree。其中,在对第一数据的写事件进行词法分析的阶段,可以根据预先定义的SQL词法文法,对SQL语句进行分词处理,输出SQL关键字、常量、变量、操作符等分词序列(TOKEN)。根据预先定义的SQL语法文法,对分词序列进行语法分析,建立层次化的抽象语法树。即抽象语法树可以是数据读写服务器针对SQL语句的词法、语法和语义分析,确定SQL语句中的关键字(例如:Select,From,Where等),根据预设规则自动分拆为不同词元,并作为节点形成抽象语法树的树型基本结构,再以二叉树方式加载第一数据的复写请求的信息(例如:查询字段,表名,条件等),最后形成二叉树结构的抽象语法树。该抽象语法树包括N个第一写任务节点。
考虑到第一写任务节点可能写入失败,为区分第一数据的第一写任务节点与其他写任务节点,在执行抽象语法树时,可以将该执行过程标识为第一数据的写事件的存储写阶段,例如,存储写阶段1(StorageWriteStage1)。
步骤303,针对所述N个第一写任务节点中的每个第一写任务节点:确定所述第一写任务节点写入的第一数据库及所述第一数据库对应的转换器。
以SQL架构为例,在获得抽象语法树后,数据读写服务器可以根据业务需求,对N个第一写任务节点中的每一个写任务节点,确定该第一写任务节点写入的第一数据库以及该第一数据库对应的转换器。通过该转换器,可以根据抽象语法树,生成逻辑执行树,通过逻辑执行树可以在第一数据的复写请求为双写请求时,生成两个第一写任务,两个第一写任务用于数据读写服务器向对应的两个数据库分别发送各自的第一写任务。这两个数据库中的每一个即为一个第一数据库。进而,通过逻辑执行树生成执行每个写任务节点的物理执行树。
步骤304,通过所述第一数据库对应的转换器,将所述第一写任务节点转换为所述第一数据的复写请求的执行树中的第一写任务节点,所述第一数据的复写请求的执行树包括:N个第一写任务节点。
以SQL架构为例,第一数据的复写请求的执行树可以包括:第一数据的复写请求的逻辑执行树和第一数据的复写请求的物理执行树。
如图5所示,为本申请实施例提供的一种逻辑执行树的示意图,数据读写服务器可以通过转换器,为抽象语法树的存储写阶段(例如,存储写阶段1)生成逻辑执行树的两个叶子节点,每个叶子节点对应一个第一写任务节点。举例来说,第1个第一写任务节点为存储写任务1(StorageWriteTask1),第2个第一写任务节点可以为存储写任务2(StorageWriteTask2)。例如,存储写任务1(StorageWriteTask1)可以是向第一数据库1(例如,数据库212)写入第一数据的第一写任务,存储写任务2(StorageWriteTask2)可以是向第一数据库2(例如,数据库213)写入第一数据的第一写任务。在一些实施例中,第一数据库1可以是主数据库,第一数据库2可以是备用数据库。第一数据库1的存储引擎可以与第一数据库2的存储引擎不同。
在一些实施例中,转换器可以为计划器Planner,从而,通过计划器可将抽象语法树转换为逻辑执行树。在另一些实施例中,转换器可以为单独设置的转换器,通过计划器,触发该转换器为逻辑执行树的存储写阶段生成两个叶子节点,每个叶子节点对应一个第一写任务节点。
此时,在生成N个第一写任务节点后,计划器还可以为逻辑执行树的存储写阶段1和存储写事件生成对应的任务节点,该任务节点用于数据读写服务器根据存储写事件对应的任务之间的关系,确定第一数据的写事件中的逻辑执行树。例如,如图6所示,逻辑执行树的存储写阶段1对应的任务节点包括:存储写阶段的起始任务(SGStageTask(Start)),存储写阶段的结束任务(SGStageTask(End))。
存储写事件对应的任节点包括:存储写事件的起始任务(SGJobTask(Start)),存储写事件的结束任务(SGJobTask(End))。
说明的是,由于接下来树形结构的节点的名称较长,故从逻辑执行树开始,对节点的名称进行了简化,将Storage简写为SG,忽略Write。
通过存储写事件的起始任务,触发存储写事件开始执行,再执行存储写事件中的逻辑执行树的存储写阶段的起始任务,触发存储写任务1和存储写任务2的执行,在存储写任务1和存储写任务2执行完后,执行逻辑执行树的存储写阶段的结束任务,逻辑执行树的存储写阶段的结束任务执行完后,执行存储写事件的结束任务。
在生成逻辑执行树后,数据读写服务器通过优化器Optimizer,将逻辑执行树转换为物理执行树Physical Tree,优化器主要根据数据读取、表连接方式、表连接顺序、排序等技术对第一数据的写事件进行优化,对应生成物理执行树的执行任务。
如图7所示,为本申请实施例提供的一种物理执行树的示意图。第一数据的写事件的物理执行树的执行任务节点可以包括:存储写事件的起始执行任务(SGJobExecTask(Start)),存储写事件的结束执行任务(SGJobExecTask(End));存储写阶段的起始执行任务(SGStageExecTask(Start)),存储写阶段的结束执行任务(SGStageExecTask(End)),存储写执行任务1(SGExecTask1)和存储写执行任务2(SGExecTask2)。
其中,存储写执行任务1可以是物理执行树中的第一写任务1,存储写执行任务2可以是物理执行树中的第一写任务2。存储写执行任务1可以是经优化器对存储写任务1(逻辑执行树中的第一写任务1)优化后得到的。数据读写服务器可以在执行存储写执行任务1时,向存储写执行任务1对应的第一数据库(如第一数据库1)发送第一写任务1。
存储写执行任务2可以是经优化器对存储写任务2(逻辑执行树中的第一写任务2)优化后得到的。数据读写服务器可以在执行存储写执行任务2时,向存储写执行任务2对应的第一数据库(如第一数据库2)发送第一写任务2。
通过存储写事件的起始执行任务,触发存储写事件开始执行,执行存储写事件中的物理执行树的存储写阶段的起始执行任务,触发存储写执行任务1和存储写执行任务2的执行,在存储写执行任务1和存储写执行任务2执行完后,触发执行物理执行树的存储写阶段的结束执行任务,在物理执行树的存储写阶段的结束执行任务执行完后,执行存储写事件的结束执行任务。
步骤305,在执行所述第一数据的复写请求的执行树的N个第一写任务节点时,向N个第一数据库分别发送N个第一写任务;所述第一写任务用于将所述第一数据写入对应的第一数据库。
其中,数据读写服务器可以执行第一数据的写事件对应的物理执行树,向N个第一数据库分别发送N个第一写任务。
结合图7,在数据读写服务器执行物理执行树时,可以在执行到存储写执行任务1和存储写执行任务2时,可以向存储写执行任务1对应的第一数据库1发送第一写任务1,向存储写执行任务2对应的第一数据库2发送第一写任务2。每个第一写任务用于将本次需要写入的第一数据写入对应的数据库中。在第一写任务1和第一写任务2执行成功时,触发执行物理执行树的存储写阶段的结束执行任务,在物理执行树的存储写阶段的结束执行任务执行完后,执行存储写事件的结束执行任务。此时,可以确定第一数据的写入事件运行成功,即第一数据的复写请求写入成功。
在一些实施例中,考虑到第一写任务可能写入失败,为提高第一写任务的成功率,可以在确定所述N个第一写任务中的M个执行失败时,在回放数据库中存储所述M个失败的第一写任务;其中,回放数据库可以是除第一数据库1和第一数据库2之外的数据库,所述M为小于或等于N的正整数。从而,在后续第一写任务对应的第一数据库恢复正常时,可以将回放数据库中存储的失败的第一写任务同步到该第一数据库中。例如,在所述回放数据库中存在至少一个失败的第一写任务时,根据所述至少一个失败的第一写任务中的任一失败的第一写任务,向所述失败的第一写任务对应的第一数据库重新发送所述失败的第一写任务。
考虑到写入请求架构的兼容性,在确定所述N个第一写任务中的一个第一写任务写入失败时,可以触发所述第一数据的复写请求的执行树,新增第一回放任务;所述第一回放任务为所述失败的第一写任务的回放任务;在执行所述第一回放任务后,向回放数据库中发送所述失败的第一写任务。
以一种可能的实现方式,如图8a所示,为本申请实施例提供的一种任务写入回放数据库的示意图,在检测到存储写执行任务2执行失败后,重试模块可以在存储写执行任务2(SGExecTask2)之后增加一个第一回放任务,该第一回放任务用于向回放数据库(PlaybackService)写入该存储写执行任务2。举例来说,第一回放任务可以是回放数据库的写入任务(PlaybackWrittenTask)。
假设是图7中的存储写执行任务2写失败,为提高重写效率,在将失败的第一写任务写入回放数据库之前,还可触发执行重试模块Reheater,重试模块检测到存储写执行任务2失败,会修正物理执行树。例如,如图8b所示,为本申请实施例提供的一种失败的第一写任务重试的示意图,其中,重试模块可为该物理执行树的存储写执行任务2节点后面,加上一个存储写执行任务2-重试1(SGExecTask2(retry1))节点。
需要说明的是,重试模块是指执行该物理执行树失败时的一个再热能力。再热允许根据物理执行树执行失败后的不同情况,对物理执行树进行二次修改再提交执行,确保第一数据的写事件最终能执行成功。
如果存储写执行任务2-重试1节点执行成功,则不会触发执行重试模块,第一数据的复写请求正常结束。这里考虑G次重试(G的数值可标签化配置,例如本申请实施例中将G设置为2)都失败,这时触发重试模块将该任务标识为执行失败,并触发回放。
一种可能的实现方式,第一回放任务和重试可以都执行,例如,如图9所示,为本申请实施例提供的一种任务写入回放数据库的示意图,重试模块可以在存储写执行任务2-重试2(SGExecTask2(retry2))之后增加一个第一回放任务,该第一回放任务用于向回放数据库(PlaybackService)写入该存储写执行任务2。从而,提高第一写任务的成功率。
需要说明的是,将失败的第一写任务通过重试模块执行重试的过程,可以是在回放数据库中存储所述失败的第一写任务之前执行的,也可以是在回放数据库中存储所述失败的第一写任务之后执行的,也可以是在回放数据库中存储所述失败的第一写任务之后,不执行所述失败的第一写任务的重试。以提高第一写任务的写入效率。具体实现方式可以根据实际需要确定,在此不做限定。
考虑到数据读写服务器可能会接收到其他数据的写入请求,例如,第二数据的复写请求。针对该第二数据的复写请求,本申请可对所述第二数据的复写请求进行语法解析,确定第二数据的复写请求的抽象语法树;所述第二数据的复写请求的抽象语法树包括:K个第二写任务节点;所述K为大于1的正整数;针对所述K个第二写任务节点中的每个第二写任务节点:确定所述第二写任务节点写入的第二数据库及所述第二数据库对应的转换器;通过所述第二数据库对应的转换器,将所述第二写任务节点转换为所述第二数据的复写请求的执行树中的第二写任务节点。
在一些实施例中,第二数据的复写请求和所述第一数据的复写请求可能存在关联关系。
下面以方式1和方式2举例说明关联关系可能的方式。
方式1,关联关系可以是指,第二数据的写入条件为第一数据成功写入。即,第二数据必须在第一数据成功写入后,才能执行第二数据的写入操作。该第二数据的写入条件可以通过数据之间的写入优先级确定的,例如,第一数据的写入优先级高于第二数据的写入优先级。在数据读写服务器确定第一数据的写入优先级高于第二数据的写入优先级时,可以确定第二数据的复写请求和所述第一数据的复写请求可能存在关联关系。
为提高第二数据的写入成功率,在第一数据和第二数据存在关联关系时,数据读写服务器可以将K个第二写任务都写往回放数据库,等待回放。
一种可能的实现方式,可以在所述第一数据的复写请求的执行树未执行成功时,在所述第二数据的复写请求的执行树中,新增第二回放任务;在执行所述第二回放任务后,将所述K个第二写任务写入回放数据库。
方式2,第二数据的复写请求和所述第一数据的复写请求的关联关系还可以是:至少一个第一写任务写入的第一数据库(例如,包括第一数据库1和第一数据库2)和至少一个第二写任务写入的第二数据库位于同一数据库集群中,或者,第二数据库为第一数据库,此时,在第一数据库1和第一数据库2中的至少一个数据库出现第一写任务失败时,失败的第一写任务写入到回放数据库。由于第一写任务失败可能是第一数据库不可用导致的,因此,为避免第二数据写入第二数据库也写入失败,可以将K个第二写任务中的至少一个第二写任务写入回放数据库。
一种可能的实现方式,可以在第二数据的复写请求的执行树中新增第二回放任务。其中,新增的第二回放任务可以用于数据读写服务器将K个第二写任务中的至少一个第二写任务写入回放数据库。或者,新增的第二回放任务可以包括至少一个第二回放子任务,每个第二回放子任务可以用于数据读写服务器在执行每个第二回放子任务时,将该第二回放子任务对应的第二写任务写入回放数据库。
在一些可能的场景中,K个第二写任务中的至少一个第二写任务可以是根据第一数据的写入请求第一数据的复写请求的执行情况生成的。在数据读写服务器确定K个第二写任务中存在向第一数据库写入的至少一个第二写任务时,数据读写服务器可以根据第一数据库的可用情况,确定是否执行该至少一个第二写任务。例如,在确定第一数据库1不可用时,可以将该至少一个第二写任务写往回放数据库。在确定第一数据库1可用时,可以将该至少一个第二写任务写入第一数据库。或者,在确定第一数据库1可用后,可以将存储在回放数据库的第二写任务写入第一数据库。
下面以图10举例说明新增第二回放任务的可能的场景。针对第二回放子任务的场景可以参考该示例。如图10所示,以第二写任务包括第二写任务1和第二写任务2为例,第二写任务1对应写入第一数据库1,第二写任务2对应写入第二数据库1,其中,第二数据库1和第一数据库1为不同的数据库。
此时,第二数据的写事件对应的物理执行树的执行任务可以包括:
存储写事件的起始执行任务,存储写事件的结束执行任务;物理执行树的存储写阶段的起始执行任务,物理执行树的存储写阶段的结束执行任务,第二回放任务和存储写执行任务2。
其中,第二回放任务可以是数据读写服务器根据写入第一数据库1的第二写任务1生成的。第二回放任务的生成方式具体可以参考第一回放任务根据第一写任务2的生成方式,在此不再赘述。存储写执行任务2可以是对应写入第二数据库1的第二写任务2生成的。数据读写服务器执行该物理执行树时,可以执行第二回放任务,向回放数据库写入第二写任务1,向存储写执行任务1对应的第一数据库发送第一写任务1。数据读写服务器执行该物理执行树时,可以执行存储写执行任务2,向回放数据库写入第二写任务2,向存储写执行任务2对应的第二数据库1发送第二写任务2。
再比如,在任一个第一写任务失败时,触发K个第二写任务都写往回放数据库,此时,K个第二写任务可以是物理执行树中生成的K个回放写任务。
在本申请的某些实施中,在所述第一数据的复写请求的执行树执行成功时,触发所述第二数据的复写请求的执行树新增第二回写任务;所述第二回写任务用于将所述回放数据库的至少一个第二写任务回写至所述至少一个第二写任务对应的第二数据库;在执行所述第二回写任务后,从所述回放数据库调用所述至少一个第二写任务,并向所述至少一个第二写任务对应的第二数据库发送所述至少一个第二写任务。
举例来说,数据读写服务器确定所述第一数据的复写请求执行成功的方式可以是在第一数据库不向回放数据库写入失败的第一写任务,或者,回放数据库中向第一数据库重新发送的失败的第一写任务结束后,此时,第一数据库可能已恢复正常,如图11所示,为本申请实施例提供的一种新增第二回写任务的示意图,数据读写服务器可以在所述回放数据库中存在至少一个失败的第一写任务时,触发所述第二数据的复写请求的执行树新增第二回写任务;在执行所述第二回写任务后,从回放数据库中调用至少一个第二写任务,并向所述至少一个第二写任务对应的第二数据库重新发送所述至少一个第二写任务。
在一些实施例中,该第二回写任务可以用于试探该数据库是否已经恢复。也可以是在确定第二数据库恢复后,生成的第二回写任务。例如,该第二回写任务可以是新的写入该数据库的写入任务。该写入任务可以是比第二写任务复杂度更低的任务,避免重复试探导致占用较大的计算开销。
结合方式1,该第二回写任务可以是向该第二回写任务对应的第二写任务的第二数据库重新发送第二写任务。此时,在该第二写任务写入成功时,可以确定该第一写任务成功,第二写任务可以写入第二数据库。
结合方式2,该第二回写任务可以是向所述第二写任务对应的第一数据库重新发送所述第二写任务。此时,在所述第二写任务写入成功时,可以确定该第一数据库已经恢复。
例如,针对上述方式2中使用第二回写任务确认故障数据库(例如,第一数据库)是否已经恢复正常可用,其确认结果可包括以下两种:
结果1:第二回写任务失败,则等待下次触发;
结果2:第二回写任务写成功,这时第二回写任务会触发广播试探回放成功事件,该试探回放成功事件用于指示回放监听器将回放数据库中存储的失败的第一写任务或第二写任务重新写入至对应的数据库。在回放监听器对回放数据库中存储的失败的第一写任务或第二写任务进行重新写入至对应的数据库时,重新写入至对应的数据库的第一写任务或第二写任务可以增加相应数据库的标签,该标签用于指示重新写入至对应的数据库的第一写任务或第二写任务不会触发双写。
在本申请的某些实施中,所述失败的第一写任务写入到对应的第一数据库的写入速度大于所述第二写任务写入到回放数据库的写入速度。
其中,针对结果2,需要讨论回放的数据追平场景:如图12所示,为本申请实施例提供的一种数据追平时的任务写入示意图,其中,一方面回写监听器不停回写(例如,第一数据的第一写任务在执行第一回写任务),另一方面又会有新的写任务(例如,新增的失败的第二数据的第二写任务,或新增的第二写任务)不断写入回放数据库;如果回写的速度跟不上新的写任务的写入回放数据库的速度,会导致需回写的任务持续增长,触发告警和事件广播;如果回写的速度更快,则某一段时间后,回放数据库会出现只有几条需回放的任务,这时回写监听器回写完成,交由回写优化器将剩余的至少一条写任务和新增的回放任务合并,例如,可以将新增的第一回放任务对应的第一回写任务和回放数据库中剩余的第一回写任务合并,生成合并的第一回写任务,该合并的第一回写任务可以新增到用户提交的第一数据的复写请求对应的物理执行树中。再比如,可以将新增的第二回放任务对应的第二回写任务和回放数据库中剩余的第二回写任务合并,生成合并的第二回写任务,新增到用户提交的第二数据的复写请求对应的物理执行树中。从而,在执行合并的回写任务(例如,第一回写任务或第二回写任务)的同时,将新的回放任务也执行完回写,完成所有回写任务的同时,追平回写任务和回放任务。
基于同样的构思,本申请实施例还提供一种数据读取方法,如图13所示,该方法包括:
步骤1301,接收第一数据的复读请求。
步骤1302,对所述第一数据的复读请求进行语法解析,确定第一数据的复读请求的抽象语法树;所述第一数据的复读请求的抽象语法树包括N个第一读任务节点;所述N为大于1的正整数。
步骤1303,针对所述抽象语法树中的N个第一读任务节点中的每个第一读任务节点:确定所述第一读任务节点读取的第一数据库及所述第一数据库对应的转换器。
步骤1304,通过所述第一数据库对应的转换器,将所述第一读任务节点转换为所述第一数据的复读请求的执行树中的第一读任务节点。
步骤1305,在执行所述第一数据的复读请求的执行树的N个第一读任务节点时,向N个第一数据库分别发送N个第一读任务。
通过该方式,可以实现对于任意的业务场景下的第一数据,都可以生成相应的第一读任务,降低对每个第一读任务对应的第一数据库的存储引擎的依赖,无需针对每种业务场景对应读取的第一数据的第一数据库单独生成与该第一数据库的存储引擎适配的调用接口,提高对不同业务数据的同步复读的效率和灵活性。
如图14所示,为本申请实施例提供的一种数据单读示意图,其中,在数据读取服务器对其中一个第一数据库读取失败后,可切换到另一个第一数据库进行读取。其中,图14中的(a)表示数据读取服务器在接收到数据读取请求时,对数据读取请求进行解析,建立读事件、读阶段和读任务;图14中的(b)表示当前先从读执行任务1对应的数据库1中对数据进行读取;图14中的(c)表示在无法从数据库1中读取数据时,则从读执行任务2对应的数据库2中对数据进行读取。
在本申请的某些实施中,在确定所述N个第一读任务中的M个执行失败时,忽略所述M个失败的第一读任务;所述M为小于或等于N的正整数。
如图15所示,为本申请实施例提供的一种数据双读示意图,其中,图15中的(a)表示数据读取服务器在接收到数据读取请求时,对数据读取请求进行解析,建立读事件、读阶段和两个读任务;图15中的(b)表示的是与图15中的(a)对应的逻辑执行树;图15中的(c)表示的是与图15中的(b)对应的物理执行树。该方式中,先向客户端返回数据的即可认为数据读取成功。
如果有一个数据库目前状态不正常(例如,在写入该数据库的任一写入任务不成功时,认为数据库状态不正常;或者,在写入该数据库的写入任务不成功的数量大于预设阈值时,认为数据库状态不正常),且双读采用的是如图15所示的方案,则此时双读会自动优化成单读,即第一步、第二步如图15所示,会转换成双读任务的逻辑执行树;但是优化成物理执行树时,会转换成图14所示的单读任务的物理执行树。
如图16所示,本申请实施例还提供一种数据写入装置,该装置包括:
接收单元1601,用于接收第一数据的复写请求。
抽象语法树确定单元1602,用于对所述第一数据的复写请求进行语法解析,确定所述第一数据的复写请求的抽象语法树;所述抽象语法树包括N个第一写任务节点;所述N为大于1的正整数。
转换器确定单元1603,用于针对所述N个第一写任务节点中的每个第一写任务节点:确定所述第一写任务节点写入的第一数据库及所述第一数据库对应的转换器。
转换单元1604,用于通过所述第一数据库对应的转换器,将所述第一写任务节点转换为所述第一数据的复写请求的执行树中的第一写任务节点,所述第一数据的复写请求的执行树包括:N个第一写任务节点。
发送单元1605,用于在执行所述第一数据的复写请求的执行树的N个第一写任务节点时,向N个第一数据库分别发送N个第一写任务;所述第一写任务用于将所述第一数据写入对应的第一数据库。
进一步的,对于该装置,还包括处理单元1606,用于在确定所述N个第一写任务中的一个第一写任务写入失败时,触发所述第一数据的复写请求的执行树,新增第一回放任务;所述第一回放任务为所述失败的第一写任务的回放任务;所述发送单元,还用于在执行所述第一回放任务后,向回放数据库中发送所述失败的第一写任务。
进一步的,对于该装置,处理单元1606,还用于在所述回放数据库中存在至少一个失败的第一写任务时,触发所述第一数据的复写请求的执行树中,新增第一回写任务;发送单元1605,还用于在执行所述第一回写任务后,向所述失败的第一写任务对应的第一数据库重新发送所述失败的第一写任务。
进一步的,对于该装置,接收单元1601,还用于接收第二数据的复写请求,所述第二数据的复写请求和所述第一数据的复写请求存在关联关系;抽象语法树确定单元1602,还用于对所述第二数据的复写请求进行语法解析,确定第二数据的复写请求的抽象语法树;所述第二数据的复写请求的抽象语法树包括:K个第二写任务节点;所述K为大于1的正整数;转换器确定单元1603,还用于针对所述K个第二写任务节点中的每个第二写任务节点:确定所述第二写任务节点写入的第二数据库及所述第二数据库对应的转换器;转换单元1604,还用于通过所述第二数据库对应的转换器,将所述第二写任务节点转换为所述第二数据的复写请求的执行树中的第二写任务节点;处理单元1606,还用于在所述第一数据的复写请求的执行树未执行成功时,在所述第二数据的复写请求的执行树中,新增第二回放任务;处理单元1606,还用于在执行所述第二回放任务后,将所述K个第二写任务写入回放数据库。
进一步的,对于该装置,处理单元1606,还用于在所述第一数据的复写请求的执行树执行成功时,触发所述第二数据的复写请求的执行树新增第二回写任务;所述第二回写任务用于将所述回放数据库的至少一个第二写任务回写至所述至少一个第二写任务对应的第二数据库;发送单元1605,还用于在执行所述第二回写任务后,从所述回放数据库调用所述至少一个第二写任务,并向所述至少一个第二写任务对应的第二数据库发送所述至少一个第二写任务。
基于同样的构思,本申请实施例还提供一种数据读取装置,如图17所示,该装置包括:
接收单元1701,用于接收第一数据的复读请求。
抽象语法树确定单元1702,对所述第一数据的复读请求进行语法解析,确定第一数据的复读请求的抽象语法树;所述第一数据的复读请求的抽象语法树包括N个第一读任务节点;所述N为大于1的正整数。
转换器确定单元1703,用于针对所述抽象语法树中的N个第一读任务节点中的每个第一读任务节点:确定所述第一读任务节点读取的第一数据库及所述第一数据库对应的转换器。
转换单元1704,用于通过所述第一数据库对应的转换器,将所述第一读任务节点转换为所述第一数据的复读请求的执行树中的第一读任务节点。
发送单元1705,用于在执行所述第一数据的复读请求的执行树的N个第一读任务节点时,向N个第一数据库分别发送N个第一读任务。
本申请实施例还提供了一种计算设备,该计算设备具体可以为桌面计算机、便携式计算机、智能手机、平板电脑、个人数字助理(Personal Digital Assistant,PDA)等。该计算设备可以包括中央处理器(Center Processing Unit,CPU)、存储器、输入/输出设备等,输入设备可以包括键盘、鼠标、触摸屏等,输出设备可以包括显示设备,如液晶显示器(Liquid Crystal Display,LCD)、阴极射线管(Cathode Ray Tube,CRT)等。
存储器,可以包括只读存储器(ROM)和随机存取存储器(RAM),并向处理器提供存储器中存储的程序指令和数据。在本申请实施例中,存储器可以用于存储数据写入、读取方法的程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行数据写入、读取方法。
如图18所示,为本申请实施例提供的一种计算设备的示意图,该计算设备包括:
处理器1801、存储器1802、收发器1803、总线接口1804;其中,处理器1801、存储器1802与收发器1803之间通过总线1805连接;
所述处理器1801,用于读取所述存储器1802中的程序,执行上述数据写入、读取方法;
处理器1801可以是中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。还可以是硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。
所述存储器1802,用于存储一个或多个可执行程序,可以存储所述处理器1801在执行操作时所使用的数据。
具体地,程序可以包括程序代码,程序代码包括计算机操作指令。存储器1802可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器1802也可以包括非易失性存储器(non-volatile memory),例如快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器1802还可以包括上述种类的存储器的组合。
存储器1802存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
操作指令:包括各种操作指令,用于实现各种操作。
操作系统:包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
总线1805可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图18中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
总线接口1804可以为有线通信接入口,无线总线接口或其组合,其中,有线总线接口例如可以为以太网接口。以太网接口可以是光接口,电接口或其组合。无线总线接口可以为WLAN接口。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行数据写入、读取方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种数据写入方法,其特征在于,包括:
接收第一数据的复写请求;
对所述第一数据的复写请求进行语法解析,确定所述第一数据的复写请求的抽象语法树;所述抽象语法树包括N个第一写任务节点;所述N为大于1的正整数;
针对所述N个第一写任务节点中的每个第一写任务节点:确定所述第一写任务节点写入的第一数据库及所述第一数据库对应的转换器;
通过所述第一数据库对应的转换器,将所述第一写任务节点转换为所述第一数据的复写请求的执行树中的第一写任务节点,所述第一数据的复写请求的执行树包括:N个第一写任务节点;
在执行所述第一数据的复写请求的执行树的N个第一写任务节点时,向N个第一数据库分别发送N个第一写任务;所述第一写任务用于将所述第一数据写入对应的第一数据库。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
在确定所述N个第一写任务中的一个第一写任务写入失败时,触发所述第一数据的复写请求的执行树,新增第一回放任务;所述第一回放任务为所述失败的第一写任务的回放任务;
在执行所述第一回放任务后,向回放数据库中发送所述失败的第一写任务。
3.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
在所述回放数据库中存在至少一个失败的第一写任务时,触发所述第一数据的复写请求的执行树中,新增第一回写任务;
在执行所述第一回写任务后,向所述失败的第一写任务对应的第一数据库重新发送所述失败的第一写任务。
4.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收第二数据的复写请求,所述第二数据的复写请求和所述第一数据的复写请求存在关联关系;
对所述第二数据的复写请求进行语法解析,确定第二数据的复写请求的抽象语法树;所述第二数据的复写请求的抽象语法树包括:K个第二写任务节点;所述K为大于1的正整数;
针对所述K个第二写任务节点中的每个第二写任务节点:确定所述第二写任务节点写入的第二数据库及所述第二数据库对应的转换器;
通过所述第二数据库对应的转换器,将所述第二写任务节点转换为所述第二数据的复写请求的执行树中的第二写任务节点;
在所述第一数据的复写请求的执行树未执行成功时,在所述第二数据的复写请求的执行树中,新增第二回放任务;
在执行所述第二回放任务后,将所述K个第二写任务写入回放数据库。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:
在所述第一数据的复写请求的执行树执行成功时,触发所述第二数据的复写请求的执行树新增第二回写任务;所述第二回写任务用于将所述回放数据库的至少一个第二写任务回写至所述至少一个第二写任务对应的第二数据库;
在执行所述第二回写任务后,从所述回放数据库调用所述至少一个第二写任务,并向所述至少一个第二写任务对应的第二数据库发送所述至少一个第二写任务。
6.一种数据读取方法,其特征在于,所述方法包括:
接收第一数据的复读请求;
对所述第一数据的复读请求进行语法解析,确定第一数据的复读请求的抽象语法树;所述抽象语法树包括N个第一读任务节点;所述N为大于1的正整数;
针对所述N个第一读任务节点中的每个第一读任务节点:确定所述第一读任务节点读取的第一数据库及所述第一数据库对应的转换器;
通过所述第一数据库对应的转换器,将所述第一读任务节点转换为所述第一数据的复读请求的执行树中的第一读任务节点,所述第一数据的复读请求的执行树包括:N个第一读任务节点;
在执行所述第一数据的复读请求的执行树的N个第一读任务节点时,向N个第一数据库分别发送N个第一读任务;所述第一读任务用于从对应的第一数据库中读取所述第一数据。
7.一种数据写入装置,其特征在于,包括:
接收单元,用于接收第一数据的复写请求;
抽象语法树确定单元,用于对所述第一数据的复写请求进行语法解析,确定所述第一数据的复写请求的抽象语法树;所述抽象语法树包括N个第一写任务节点;所述N为大于1的正整数;
转换器确定单元,用于针对所述N个第一写任务节点中的每个第一写任务节点:确定所述第一写任务节点写入的第一数据库及所述第一数据库对应的转换器;
转换单元,用于通过所述第一数据库对应的转换器,将所述第一写任务节点转换为所述第一数据的复写请求的执行树中的第一写任务节点,所述第一数据的复写请求的执行树包括:N个第一写任务节点;
发送单元,用于在执行所述第一数据的复写请求的执行树的N个第一写任务节点时,向N个第一数据库分别发送N个第一写任务;所述第一写任务用于将所述第一数据写入对应的第一数据库。
8.一种数据读取装置,其特征在于,包括:
接收单元,用于接收第一数据的复读请求;
抽象语法树确定单元,对所述第一数据的复读请求进行语法解析,确定第一数据的复读请求的抽象语法树;所述抽象语法树包括N个第一读任务节点;所述N为大于1的正整数;
转换器确定单元,用于针对所述抽象语法树中的N个第一读任务节点中的每个第一读任务节点:确定所述第一读任务节点读取的第一数据库及所述第一数据库对应的转换器;
转换单元,用于通过所述第一数据库对应的转换器,将所述第一读任务节点转换为所述第一数据的复读请求的执行树中的第一读任务节点;,所述第一数据的复读请求的执行树包括:N个第一读任务节点;
发送单元,用于在执行所述第一数据的复读请求的执行树的N个第一读任务节点时,向N个第一数据库分别发送N个第一读任务;所述第一读任务用于从对应的第一数据库中读取所述第一数据。
9.一种计算机设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行如权利要求1-5任一项所述的方法或如权利要求6所述的方法。
10.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1-5任一项所述的方法或如权利要求6所述的方法。
CN202110709787.9A 2021-06-25 2021-06-25 一种数据写入、读取方法及装置 Pending CN113326268A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110709787.9A CN113326268A (zh) 2021-06-25 2021-06-25 一种数据写入、读取方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110709787.9A CN113326268A (zh) 2021-06-25 2021-06-25 一种数据写入、读取方法及装置

Publications (1)

Publication Number Publication Date
CN113326268A true CN113326268A (zh) 2021-08-31

Family

ID=77424902

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110709787.9A Pending CN113326268A (zh) 2021-06-25 2021-06-25 一种数据写入、读取方法及装置

Country Status (1)

Country Link
CN (1) CN113326268A (zh)

Similar Documents

Publication Publication Date Title
CN107506451B (zh) 用于数据交互的异常信息监控方法及装置
CN112131237B (zh) 数据同步方法、装置、设备及计算机可读介质
US9031910B2 (en) System and method for maintaining a cluster setup
RU2554847C2 (ru) Контрольные точки для файловой системы
US8904225B2 (en) Stream data processing failure recovery method and device
US20200019543A1 (en) Method, apparatus and device for updating data, and medium
US20130346366A1 (en) Front end and backend replicated storage
US20150213100A1 (en) Data synchronization method and system
US20120259824A1 (en) Maintaining index data in a database
CN111324610A (zh) 一种数据同步的方法及装置
US10061629B2 (en) Compact binary event log generation
JP2016502193A (ja) バックアップシステムからのデータベースのストリーミング復元
US11748215B2 (en) Log management method, server, and database system
US12093241B2 (en) Method for replaying log on data node, data node, and system
US20130086418A1 (en) Data processing failure recovery method, system and program
US20200104404A1 (en) Seamless migration of distributed systems
CN112416654B (zh) 一种数据库日志重演方法、装置、设备及存储介质
CN111176887A (zh) MySQL误操作回滚方法、设备及系统
US20230012642A1 (en) Method and device for snapshotting metadata, and storage medium
CN112612850A (zh) 数据同步方法及装置
CN115757616A (zh) 一种基于二进制日志的数据一致性校验方法、装置及介质
CN116501700B (zh) 一种app格式化文件离线存储方法、装置、设备及存储介质
CN113326268A (zh) 一种数据写入、读取方法及装置
CN111026764B (zh) 一种数据存储方法、装置、电子产品及存储介质
CN114896276A (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