CN117951111A - 任务迁移方法及装置、电子设备、存储介质 - Google Patents

任务迁移方法及装置、电子设备、存储介质 Download PDF

Info

Publication number
CN117951111A
CN117951111A CN202311502630.4A CN202311502630A CN117951111A CN 117951111 A CN117951111 A CN 117951111A CN 202311502630 A CN202311502630 A CN 202311502630A CN 117951111 A CN117951111 A CN 117951111A
Authority
CN
China
Prior art keywords
data
task
test result
engine
test
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
CN202311502630.4A
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.)
Mashang Consumer Finance Co Ltd
Original Assignee
Mashang Consumer Finance 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 Mashang Consumer Finance Co Ltd filed Critical Mashang Consumer Finance Co Ltd
Priority to CN202311502630.4A priority Critical patent/CN117951111A/zh
Publication of CN117951111A publication Critical patent/CN117951111A/zh
Pending legal-status Critical Current

Links

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/21Design, administration or maintenance of databases
    • G06F16/214Database migration support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • 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/23Updating
    • G06F16/2365Ensuring data consistency and integrity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • G06F9/5088Techniques for rebalancing the load in a distributed system involving task migration

Landscapes

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

Abstract

本申请提供了一种任务迁移方法及装置、电子设备、存储介质,该方法包括:获取第一引擎执行第一测试任务得到的第一测试结果,以及第二引擎执行第二测试任务得到的第二测试结果;对第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及对第二测试结果中的数据进行数据类型转换处理,得到第四测试结果,其中,数据类型转换处理用于将数据的数据类型转换为第一预设类型;获取第三测试结果的第一校验值,以及,获取第四测试结果的第二校验值;根据第一校验值和第二校验值,得到校验结果;根据校验结果,确定是否将目标任务从第一引擎迁移至第二引擎中。根据本申请的实施例能够提升目标任务的迁移效率,以及保障迁移处理的准确性。

Description

任务迁移方法及装置、电子设备、存储介质
技术领域
本申请涉及大数据技术领域,特别涉及一种任务迁移方法及装置、电子设备、存储介质。
背景技术
在大数据领域,企业大多数会使用Hive SQL或Spark SQL等作为离线批处理引擎,而由于技术更新迭代的原因,引擎版本或引擎类型通常需要进行迭代升级,当引擎版本或引擎类型迭代升级之后,通常需要对线上生产环境中大量运行很久的生产任务进行迁移,然而,由于版本更新、代码变更等原因,在从旧引擎中迁移任务到新引擎时往往存在不确定性,可能导致线上出现生产事故。相关技术中,一般是采取由人工整理旧引擎中的待迁移任务,并按批次进行迁移,迁移后,再由迁移人员根据经验对迁移后任务在新引擎中生成的数据进行校验,以确保迁移后任务生成的数据与在旧引擎中生成的数据保持一致。
发明内容
本申请提供一种任务迁移方法及装置、电子设备、存储介质,可以提升目标任务的迁移效率,以及保障迁移处理的准确性。
第一方面,本申请提供了一种任务迁移方法,该任务迁移方法包括:
获取第一引擎执行第一测试任务得到的第一测试结果,以及第二引擎执行第二测试任务得到的第二测试结果;其中,所述第一测试任务、所述第二测试任务为与目标任务具有相同数据处理流程的任务;
对所述第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及对所述第二测试结果中的数据进行所述数据类型转换处理,得到第四测试结果,其中,所述数据类型转换处理用于将数据的数据类型转换为第一预设类型;
获取所述第三测试结果的第一校验值,以及,获取所述第四测试结果的第二校验值;
根据所述第一校验值和所述第二校验值,得到校验结果,其中,所述校验结果用于表示所述第一执行结果和所述第二执行结果是否匹配;
根据所述校验结果,确定是否将所述目标任务从所述第一引擎迁移至所述第二引擎中。
第二方面,本申请提供了一种任务迁移装置,该任务迁移装置包括:
结果获取单元,用于获取第一引擎执行第一测试任务得到的第一测试结果,以及第二引擎执行第二测试任务得到的第二测试结果;其中,所述第一测试任务、所述第二测试任务为与目标任务具有相同数据处理流程的任务;
数据转换单元,用于对所述第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及对所述第二测试结果中的数据进行所述数据类型转换处理,得到第四测试结果,其中,所述数据类型转换处理用于将数据的数据类型转换为第一预设类型;
校验值获取单元,用于获取所述第三测试结果的第一校验值,以及,获取所述第四测试结果的第二校验值;
校验结果获取单元,用于根据所述第一校验值和所述第二校验值,得到校验结果,其中,所述校验结果用于表示所述第一执行结果和所述第二执行结果是否匹配;
迁移处理单元,用于根据所述校验结果,确定是否将所述目标任务从所述第一引擎迁移至所述第二引擎中。
第三方面,本申请提供了一种电子设备,该电子设备包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的一个或多个计算机程序,一个或多个所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述第一方面的任务迁移方法。
第四方面,本申请提供了一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序在被处理器执行时实现上述第一方面的任务迁移方法。
本申请所提供的实施例,针对第一引擎所执行的任务中,等待迁入第二引擎中的目标任务,为提升目标任务的迁移效率,本申请并不依赖于人工进行任务迁移,而是在得到与目标任务具有相同数据处理流程的第一测试任务和第二测试任务之后,通过获取第一引擎执行第一测试任务得到的第一测试结果,以及第二引擎执行第二测试任务得到的第二测试结果;之后,为了避免内容相同但格式不同的数据对校验结果带来干扰,本申请并不直接获取第一测试结果和第二测试结果的校验值,而是采取分别对第一测试结果和第二测试结果中的数据进行数据类型转换处理,得到第三测试结果和第四测试结果,再分别获取该第三测试结果的第一校验值和第四测试结果的第二校验值,根据该第一校验值和第二校验值比对第一测试结果和第二测试结果是否匹配,以根据得到的校验结果,确定是否将目标任务从第一引擎迁移至第二引擎中。
由于第一测试任务和第二测试任务之间仅在于所处的引擎不同,而其数据处理流程均与目标任务相同,因此,在确定是否将目标任务从第一引擎迁移入第二引擎之前,先获取该第一测试任务和第二测试任务,并将第一测试任务在旧引擎中执行,以及将第二测试任务在新引擎中执行,以避免直接在新引擎中执行目标任务对生产环境带来干扰。另外,为了保证校验结果的准确性,本申请在获取到第一测试结果和第二测试结果之后,并不是直接获取其校验值,而是对其各自包含的数据进行数据类型转换处理,以将其包含的数据均转换为第一预设类型,从而保障数据在内容和格式上的一致性,提升得到的校验结果的准确性,以进一步保障迁移处理的准确性。由此可知,基于本申请的实施例对待迁移的目标任务进行迁移,一方面可以提升目标任务的迁移效率,另一方面也可以保障迁移处理的准确性。
应当理解,本部分所描述的内容并非旨在标识本申请的实施例的关键或重要特征,也不用于限制本申请的范围。本申请的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用来提供对本申请的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请,并不构成对本申请的限制。通过参考附图对详细示例实施例进行描述,以上和其他特征和优点对本领域技术人员将变得更加显而易见,在附图中:
图1为本申请实施例提供的一种任务迁移方法的流程图;
图2为本申请实施例提供的数据类型转换处理的流程图;
图3为本申请实施例提供的迁移处理的流程图;
图4为本申请实施例提供的一种任务迁移装置的框图;
图5为本申请实施例提供的一种电子设备的框图。
具体实施方式
为使本领域的技术人员更好地理解本申请的技术方案,以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在不冲突的情况下,本申请各实施例及实施例中的各特征可相互组合。
如本文所使用的,术语“和/或”包括一个或多个相关列举条目的任何和所有组合。
本文所使用的术语仅用于描述特定实施例,且不意欲限制本申请。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由……制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其它特征、整体、步骤、操作、元件、组件和/或其群组。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。
除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本申请的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
相关技术中,为避免直接将旧引擎,例如Spark2.0上运行的生产任务迁移至新引擎,例如Spark3.0上带来生产事故,一般依赖于迁移人员手工进行任务迁移和校验,该种迁移方法一方面是存在效率低下的问题,另一方面由于人员对迁移后任务生成的数据和迁移前任务生成的数据进行校验时是依赖于人工进行校验,因此,可能因为主观因素而造成误判。
为提升任务迁移效率,针对待迁移任务,也可以考虑在旧引擎和新引擎中同时执行该任务,针对任务生成的执行结果1和执行结果2,可以通过分别获取其循环冗余校验码(CRC,Cyclic Redundancy Check)值,得到执行结果1对应的校验值1和执行结果2对应的校验值2,并通过比较校验值1和校验值2是否匹配,例如,通过比较校验值1和校验值2是否相同,以校验待迁移任务在新引擎中生成的数据与在旧引擎中生成的数据是否相同,从而避免在将任务迁移至新引擎后,因为新引擎的版本或代码变更而造成生成的数据出现偏差,进而导致出现线上生产事故的问题。
该种任务迁移方法虽然可以提升迁移效率,然而,执行结果1和执行结果2中的数据量通常较大,直接计算其CRC值往往耗时较长,从而依然可能影响迁移效率;另外,执行结果中往往可能包含无法直接得到数值的数据类型,因此,相关技术中该种直接获取执行结果1和执行结果2的CRC值作为校验值并进行判断的方式依然可能存在准确性低的问题。
有鉴于此,为在提升任务迁移效率的同时还确保迁移处理的准确性,在本申请实施例中,考虑到目标任务为线上任务,因此,若直接在旧引擎和新引擎中执行目标任务,并分别获取执行结果进行校验,则可能会对线上生产环境带来影响,因此,在本申请实施例中,并不直接在旧引擎和新引擎中直接执行该目标任务,而是分别获取与目标任务具有相同数据处理流程的第一测试任务和第二测试任务,并获取第一引擎执行第一测试任务得到的第一测试结果,以及第二引擎执行第二测试任务得到的第二测试结果,即,获取与目标任务对应的第一测试任务和第二测试任务作为测试任务,基于该两个任务进行迁移前测试,以避免对线上生产环境带来影响;另一方面,针对在旧引擎中执行第一测试任务得到的第一测试结果,以及在新引擎中执行第二测试任务得到的第二测试结果,考虑到其中可能包含无法直接得到数值的数据类型,例如,Map、Set等用于承载无序字段的集合类型,为提升迁移准确性,本申请先对第一测试结果和第二测试结果进行数据类型转换处理,以将第一测试结果和第二测试结果中的数据转换为第一预设类型,该第一预设类型为可以直观得到数值的数值类型,通过获取进行数据类型转换处理后得到的第三测试结果和第四测试结果的校验值,并比较其校验值得到表示第一测试结果和第二测试结果是否的校验结果,即可高效且准确的将目标任务迁移至第二引擎中。
请参看图1,其为本申请实施例提供的任务迁移方法的流程示意图。该方法可以应用于电子设备中,该电子设备与大数据平台中的各设备通信连接,该电子设备可以是物理服务器,例如可以为刀片服务器、机架式服务器等,或者也可以是虚拟服务器,例如可以是部署在云端的服务器集群,此处不做特殊限定;当然,一些实施例中,该电子设备也可以为终端设备,例如可以为平板电脑或者个人计算机,此处不做特殊限定。
如图1所示,本申请实施例提供的任务迁移方法包括如下步骤S101-S105,以下予以详细说明。
步骤S101,获取第一引擎执行第一测试任务得到的第一测试结果,以及第二引擎执行第二测试任务得到的第二测试结果;其中,第一测试任务、第二测试任务为与目标任务具有相同数据处理流程的任务。
在本申请实施例中,目标任务,是指在大数据引擎中用于执行特定的数据处理流程的任务,目标任务的编码可以基于结构化查询语言(SQL,Structured Query Language)生成。例如,目标任务可以为“insert into real_db.real_table from real_db.table”,即,执行将数据库“real_db”的数据表“table”中的数据插入数据库“real_db”的数据表“real_table”中的数据处理流程。
第一引擎,是指目标任务当前所处的大数据引擎,也可以称为旧引擎,第一引擎例如可以为spark2.0;第二引擎是待迁入目标任务的引擎,也可以称为新引擎,第二引擎例如可以为spark3.0。当然,此处是以第一引擎和第二引擎为不同版本的大数据引擎为例进行说明,在实际实施时,其也可以为不同类别的引擎,此处不做特殊限定。
在相关技术中,无论是人工进行任务迁移还是自动进行任务迁移,通常是直接将待迁移的目标任务直接在旧引擎和新引擎中执行并校验其在新旧引擎中生成的数据是否匹配,该种方式往往可能会对生产环境带来影响,即,可能在生产环境中写入“脏”数据,在校验完成后,还需要人工对校验过程中在生产环境中生成的数据进行清理,存在费时费力的问题。
为此,在本申请实施例中,并不直接在新旧引擎,即第一引擎和第二引擎中执行目标任务,而是分别获取与目标任务具有相同数据处理流程的第一测试任务和第二测试任务进行测试,以避免对生产环境造成影响。
在一些实施例中,第一引擎执行第一测试任务后得到的第一测试结果写入第一数据库,第二引擎执行第二测试任务后得到的第二测试结果写入第二数据库;目标任务为第一引擎所执行的任务中,等待迁入第二引擎中的任务,目标任务执行数据处理流程后将得到的执行结果写入原始数据库;原始数据库、第一数据库和第二数据库具有相同库表结构。
具体地,第一测试任务的第一编码可以通过将目标任务的目标编码对应的原始数据库替换为第一数据库后得到,第二测试任务的第二编码可以通过将目标任务的目标编码对应的原始数据库替换为第二数据库后得到,其中,该原始数据库、第一数据库和第二数据库具有相同库表结果,即,原始数据库、第一数据库和第二数据库可以为数据库实例名不同,但是具有相同数据库结构,即库表结构的数据库。
即,在本申请实施例中,原始数据库、第一数据库和第二数据库的区别仅在于数据库实例名不同,其对应的数据库配置、数据表等均完全一致。
例如,目标任务的目标编码可以为“insert into real_db.real_table fromreal_db.table”,即,原始数据库为“real_db”,可以通过将该原始数据库分别替换为与其结构完全一致的第一数据库“old_db”和第二数据库“new_db”得到第一测试任务的第一编码以及第二测试任务的第二编码,即第一编码可以为“insert into old_db.real_tablefrom real_db.table”,第二编码可以为“insert into new_db.real_table from real_db.table”,以避免新旧引擎在执行第一测试任务和第二测试任务时在生产环境中的原始数据库“real_db”中写入脏数据。
需要说明的是,以上是以分别替换原始数据库为第一数据库和第二数据库来生成第一编码和第二编码为例进行说明,在实际实施时,为避免对生产环境带来干扰,也可以考虑创建临时数据库实例,例如,创建第三数据库“tmp_db”,并在“tmp_db”中分别创建与数据表“real_table”对应的第一数据表“tmp_table1”和第二数据表“tmp_table2”,即,第一编码可以为“insert into tmp_db.tmp_table1 from real_db.table”,第二编码可以为“insert into tmp_db.tmp_table2 from real_db.table”,这样虽然也不会对生产环境带来干扰,但是,在执行基于该种方式生成的第一测试任务和第二测试任务时,由于新旧引擎均需要向同一数据库“tmp_db”的不同数据表中写入数据,因此,可能会对后续评估新旧引擎执行任务的性能造成影响,因此,在本申请中,优选将原始数据库分别替换为第一数据库和第二数据库得到第一编码和第二编码的实施方式。
第一测试结果,可以是第一引擎执行第一测试任务后得到的结果,例如,第一测试结果可以为执行上述第一测试任务后在old_db.real_table中插入的至少一条数据记录,第二测试结果可以为执行上述第二测试任务后在new_db.real_table中插入的至少一条数据记录。
步骤S102,对第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及对第二测试结果中的数据进行数据类型转换处理,得到第四测试结果,其中,数据类型转换处理用于将数据的数据类型转换为第一预设类型。
第一预设类型,是可以直接得到数据对象中的数值的数据类型,在本申请实施例中,第一预设类型可以为字符串类型,例如,可以为Java编程语言中的String类型。
在相关技术中,在新旧引擎中分别执行目标任务得到两个执行结果之后,通常不会对执行结果中不同数据类型的数据进行针对性处理,而是会将两个执行结果均视为一个整体,然后分别获取其crc值作为校验值1和校验值2,通过比较校验值1和校验值2是否相同的方式来确定该两个执行结果是否相同。然而,针对第二预设类型,即,集合类型的数据,该种数据其实是一个对象,其具体数值并不是直接可得的,若不对其进行针对性处理,则获取crc值时通常并不会读取该种数据类型内部的数据,这就使得计算得到的crc值是存在偏差的,因此,基于该种方式计算校验值并获取校验结果来作为是否迁移目标任务的判断依据,往往不够准确。
为此,在本申请实施例中,为使得用于判断是否迁移目标任务的校验结果更为准确,在得到第一测试结果和第二测试结果之后,并不直接获取其校验值,而是先分别对第一测试结果和第二测试结果中的数据进行数据类型转换处理,以得到与第一测试结果对应的第三测试结果,以及与第二测试结果对应的第四测试结果。
步骤S103,获取第三测试结果的第一校验值,以及,获取第四测试结果的第二校验值;以及,步骤S104,根据第一校验值和第二校验值,得到校验结果,其中,校验结果用于表示第一执行结果和第二执行结果是否匹配。
在基于上述步骤S102得到可以直接得到包含的数据对象中所有数值的第三测试结果和第四测试结果之后,可以分别获取其第一校验值和第二校验值,并根据第一校验值和第二校验值确定第一测试结果和第二测试结果是否匹配。
其中,在本申请实施例中,第一测试结果和第二测试结果是否匹配的匹配条件,可以为第一校验值和第二校验值相同。
步骤S105,根据校验结果,确定是否将目标任务从第一引擎迁移至第二引擎中。
在得到校验结果之后,若校验结果相同,则可以将目标任务从第一引擎迁移至第二引擎中,例如,可以通过调用调度系统,例如,YARN的接口将目标任务迁移至第二引擎中,其详细处理过程此处不再赘述。
可见,基于本申请实施例提供的任务迁移方法,由于第一测试任务和第二测试任务之间仅在于所处的引擎不同,因此,在确定是否将目标任务从第一引擎迁移入第二引擎之前,先获取与目标任务具有相同数据处理流程的该第一测试任务和第二测试任务,并将第一测试任务在旧引擎中执行,以及将第二测试任务在新引擎中执行,以避免在新引擎中执行目标任务对生产环境带来干扰。另外,为了保证校验结果的准确性,本申请在获取到第一测试结果和第二测试结果之后,并不是直接获取其校验值,而是对其各自包含的数据进行数据类型转换处理,以将其包含的数据均转换为第一预设类型,从而保障数据在内容和格式上的一致性,提升得到的校验结果的准确性,以进一步保障迁移处理的准确性。由此可知,基于该任务迁移方法对待迁移的目标任务进行迁移,一方面可以提升任务迁移效率,另一方面也可以保障迁移处理的准确性。
在一些实施例中,第一预设类型可以为字符串类型,请参看图2,其为本申请实施例提供的数据类型转换处理的流程图。如图2所示,在上述步骤S102中,所述对第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及,对第二测试结果中的数据进行数据类型转换处理,得到第四测试结果,可以包括以下步骤S201-S203:
步骤S201,按照字段名称对第一测试结果中的数据记录进行第一预设排序处理,得到第五测试结果,以及,按照字段名称对第二测试结果中的数据记录进行第一预设排序处理,得到第六测试结果,第一排序处理用于调整数据记录中各个字段的排列顺序。
在本申请实施例中,第一测试结果和第二测试结果中可以分别包括至少一条数据记录。
例如,第一测试结果可以为old_db.real_table中的数据记录,第二测试结果可以为new_db.real_table中的数据记录。
在实际实施时,第一测试结果和第二测试结果中数据记录虽然都对应有相同的字段,但是在读取到缓存中进行处理时,其分别对应的字段顺序可能不同,例如,在real_table包含字段A、字段B和字段C三个字段的情况下,读取到缓存中的第一测试结果中的数据记录可能是按字段A、字段C和字段B的顺序排列,而读取到缓存中的第二测试结果中的数据记录可能是按字段C、字段B和字段A的顺序排列。
由于数据顺序会对其校验值造成影响,因此,为提升准确性,在本申请实施例中,先根据字段名称对第一测试结果中的数据记录和第二测试结果中的数据记录进行第一预设排序处理,例如,进行升序排列处理,得到第五测试结果和第六测试结果。
步骤S202,对第五测试结果中的至少一条第一数据记录分别进行字符串类型转换处理,得到至少一个第一目标字符串,以及,对第六测试结果中的至少一条第二数据记录分别进行字符串类型转换处理,得到至少一个第二目标字符串。
在该种实施方式中,任一第一数据记录对应的第一目标字符串可以通过以下步骤得到:确定第一数据记录的每个字段中,数据类型不为字符串类型的数据,并对数据进行字符串类型转换处理,得到每个字段中数据对应的字符串;根据第一数据记录中每个字段的顺序,使用预设分隔符对每个字段中数据对应的字符串进行拼接处理,得到第一数据记录对应的第一目标字符串。
在本申请实施例中,该预设分隔符可以为逗号,即,为符号“,”。
第一数据记录例如可以为表1中所示的数据记录:
id(long) name(string) age(int) score(double) data(map)
1 张xx 18 99.0 k1:v1,k2:v2
表1
如表1所示,字段“name”的数据类型为string类型,因此,可以不必对该字段中的数据进行数据类型转换处理,而对于数据类型为基础数据类型的字段“id”、“age”、“score”中的数据,以及为map集合类型的字段“data”,则需要分别对其中的数据进行数据类型转换处理。
在需要将基础数据类型转换为字符串类型时,可以直接调用编程语言中的转换方法对其进行转换处理,例如,针对int类型的age字段中的数据18,可以通过String.valueof(18)得到其字符串“18”。
另外,在一些实施例中,数据类型可以包括第二预设类型,该第二预设类型可以包括由多个子数据组成的集合类型。在该步骤S202中,所述确定第一数据记录的每个字段中,数据类型不为字符串类型的数据,并对数据进行字符串类型转换处理,得到每个字段中数据对应的字符串,可以包括:针对第一数据记录的字段中,数据对应的数据类型为第二预设类型的目标数据,获取目标数据中的子数据构建第一数据集,对第一数据集中的子数据进行第二预设排序处理,得到第二数据集;使用预设分隔符对第二数据集中的子数据依次进行拼接处理,得到目标数据对应的字符串。
该第二预设排序处理可以为升序处理或逆序处理,此处不做特殊限定。
该第二预设类型可以为集合类型,该集合类型可以为Map、Set等用于承载多个子数据的数据类型,该子数据可以为无序的键值对或者也可以为任意的字段,例如,Map类型的基本形式可以为:public interface Map<K,V>,其中,Map中包含两个参数,K表示键(Key),V表示值(Value),一个Map中不能包含重复的值,例如,针对一个Map类型的数据User,其包含的数据可以为{k1:v1,k2:v2};Set类型的基本形式可以为:public interfaceSet<String>,其中,Set中包含一个参数,即,直接用于存储字符串,Set的存储特点是无序不可重复,例如,针对一个Set类型的数据Age,其包含的数据可以为{“5”,“10”,…}。
例如,针对上述表1所示数据记录中的字段data,根据表1所示可知该字段中的数据为map类型,则可以先获取其包含的子数据1:“k2:v2”和子数据2:“k1:v1”构建第一数据集{“k2:v2”,“k1:v1”},之后,为避免数据顺序对校验值带来干扰,先对第一数据集中的子数据进行第二预设排序处理,例如,进行升序处理,得到第二数据集{“k1:v1”,“k2:v2”},之后,可以使用预设分隔符,即逗号将第二数据集中的子数据进行拼接得到该map类型的数据对应的字符串“k1:v1,k2:v2”。
在得到第一数据记录的各字段中数据的字符串之后,可以根据字段顺序对各字符串进行拼接处理,得到第一数据记录对应的第一目标字符串。
例如,针对表1所示数据记录,经过上述数据类型转换处理后可以得到其对应的第一目标字符串为“1,张三,18,99.0,K1:v1,k2:v2”。
需要说明的是,第二数据记录对应的第二目标字符串的获取原理与第一目标字符串的获取原理类似,此处不再赘述。
步骤S203,根据至少一个第一目标字符串,得到第三测试结果,以及,根据至少一个第二目标字符串,得到第四测试结果。
可见,在本申请实施例中,在获取第一测试任务和第二测试任务的执行结果之前,通过对其先按照字段名称进行排序处理,再对排序后得到的执行结果中的各数据记录中数据分别进行数据类型转换处理,尤其是对不能直接得到其数值的数据,例如数据类型为第二预设类型的数据进行数据类型转换,得到可以直观得到各数据数值的目标字符串,并基于得到的各数据记录对应的目标字符串生成第三测试结果和第四测试结果,可以提升后续得到的第一校验值和第二校验值的准确性,进而提升任务迁移处理的准确性。
在一些实施例中,在上述步骤S103中,所述获取第三测试结果的第一校验值,以及,获取第四测试结果的第二校验值,包括:使用预设散列算法分别获取至少一个第一目标字符串的散列值,得到至少一个第一散列值,以及,使用预设散列算法分别获取至少一个第二目标字符串的散列值,得到至少一个第二散列值;获取该至少一个第一散列值得和值作为第一校验值,以及,获取该至少一个第二散列值得和值作为第二校验值。
在本申请实施例中,该预设散列算法可以为哈希算法,例如,可以使用spark引擎中提供的库函数hash()计算第三测试结果中的第一目标字符串的哈希值作为第一散列值,以及,计算第四测试结果中的第二目标字符串的哈希值作为第二散列值;之后,即可根据得到的第一散列值和第二散列值,分别得到第一校验值和第二校验值。
具体地,以第三测试结果中的第一目标字符串为str11和str12,第四测试结果中的第二目标字符串为str21和str22为例,则可以通过hash(str11)得到散列值1:hash_code_str11,通过hash(str12)得到散列值2:hash_code_str12,通过hash(str21)得到散列值3:hash_code_str21,通过hash(str22)得到散列值4:hash_code_str22,之后,可以获取散列值1和散列值2得和值作为校验值1,以及获取散列值3和散列值4得和值作为校验值2。
即,校验值1可以为:sum(hash_code_str11+hash_code_str12),校验值2可以为:sum(hash_code_str21+hash_code_str22)。
另外,在该种实施例中,在第三测试结果和第四测试结果中的第一目标字符串以及第二目标字符串的数量为多个的情况下,在获取各第一目标字符串的第一散列值,以及各第二目标字符串的第二散列值时,可以基于MapReduce的分治算法(divide andconquer)思路将计算第一散列值以及第二散列值的任务分解为多个任务进行处理,再通过获取计算得到的多个第一目标字符串的和值的方式得到第一校验值,以及得到第二校验值,从而可以快速得到第一校验值和第二校验值,进而得到校验结果,以根据校验结果对目标任务进行迁移处理,提升任务迁移速度。
可见,基于本申请实施例提供的方法,在计算执行结果的总校验值时,通过对执行结果进行拆分,使得可以先并行处理执行结果中各数据记录的校验值,再通过求和的方式获取执行结果的总校验值,可以大幅提升计算效率,进而提升目标任务的迁移速度。
在一些实施例中,在上述步骤S105中,所述根据校验结果,确定是否将目标任务从第一引擎迁移至第二引擎中,包括:在校验结果表示第一测试结果和第二测试结果匹配的情况下,将目标任务从第一引擎迁移至第二引擎中。
在该种实施方式中,第一测试结果和第二测试结果匹配,是指第一测试结果和第二测试结果中的数据相同。
具体地,若计算得到的第一校验值和第二校验值相同,则说明第一测试结果和第二测试结果中的数据是相同的,即,表示在第一引擎和第二引擎,即新旧引擎中执行相同的任务所得到的数据是相同的,在该种情况下,则可以将目标任务从第一引擎迁移至第二引擎中。
另外,如图3所示,在一些实施例中,在上述步骤S105中,所述根据校验结果,确定是否将目标任务从第一引擎迁移至第二引擎中,可以包括以下步骤S301-304:
步骤S301,在校验结果表示第一测试结果和第二测试结果匹配的情况下,获取第一测试任务对应的第一性能数据和第一文件信息,以及,获取第二测试任务对应的第二性能数据和第二文件信息。
其中,第一性能数据可以用于表示第一引擎执行第一测试任务的性能,第二性能数据用于表示第二引擎执行第二测试任务的性能。
第一性能数据可以为第一引擎执行第一测试任务的中央处理器(CPU,CentralProcessing Unit)耗时、内存消耗以及运行时间等指标中的至少一项;第二性能数据可以为第二引擎执行第二测试任务的CPU耗时、内存消耗以及运行时间等指标中的至少一项。
可以理解的是,在实际实施时,第一性能数据和第二性能数据相对应,即,若第一性能数据为第一测试任务的中央处理器耗时,则为了方便比对,第二性能数据也可以为第二测试任务的中央处理器耗时。
第一文件信息包括第一测试结果对应的第一文件数量和第一文件大小,第二文件信息包括第二测试结果对应的第二文件数量和第二文件大小。
其中,第一文件数量是指第一引擎执行该第一测试任务所生成的数据文件的数量,第一文件大小是指单个数据文件的大小;第二文件数量是指第二引擎执行该第二测试任务所生成的数据文件的数量,第二文件大小是指单个数据文件的大小。
步骤S302,根据第一性能数据和第二性能数据,得到第一比对结果。
第一比对结果可以是将第一性能数据和第二性能数据中的指标进行对应比较,以得到第一比对结果。
第一比对结果用于表示第二引擎的性能是否优于第一引擎,例如,在第一性能数据和第二性能数据分别为CPU耗时和内存消耗该两个指标的情况下,若第二性能数据中的CPU耗时大于第一性能数据中的CPU耗时,并且,第二性能数据中的内存消耗还小于第一性能数据中的内存消耗,则说明第二引擎的性能由于第一引擎,可以设置第一比对结果的数值为第一预设数值,例如设置为1,否则,则可以将第一比对结果的数值设置为第二预设数值,例如设置为0。
步骤S303,根据第一文件数量、第二文件数量、第一文件大小和第二文件大小,得到第二比对结果,其中,第二比对结果用于表示第二引擎生成的数据文件与第一引擎生成的数据文件之间的误差。
该第二比对结果,可以通过获取第一文件数量和第二文件数量之间的波动值,以及第一文件大小和第二文件大小之间的波动值得到。
例如,以A表示第一文件数量,以B表示第二文件数量,则可以通过获取A与B之间的差值的绝对值,并将该差值的绝对值再与A相除得到文件数量之间的波动值C;以及,以D表示第一文件大小,以E表示第二文件大小,则可以通过获取D与E之间的差值的绝对值,并将该差值的绝对值再与D相除得到文件大小之间的波动值E;之后,第一比对结果可以获取C和E中的最大值得到。当然,此处仅为举例说明如何得到第二比对结果,在实际实施时,该第二比对结果也可以通过其他方式得到,此处不做特殊说明。
需要说明的是,在该种实施方式中,之所以在第一测试结果和第二测试结果相匹配的情况下,还对第一文件信息和第二文件信息进行比对,是考虑到若第二引擎在执行第二测试任务时,若生成的文件数量以及每一数据文件的大小波动较大,则可能会对数据读取或者存储系统管理造成负载,例如,若产生的文件数量太多,则存储系统管理负载将会显著增加,而如果产生的文件数量太少,则在后续需要并发读取数据时,数据的读取效率将会大幅降低,因此,通过增加从文件的维度衡量目标任务是否适合迁入第二引擎,可以避免因目标任务迁入第二引擎而导致发生生产事故。
步骤S304,在第一比对结果表示第二引擎的性能优于第一引擎,并且,第二比对结果表示第二引擎生成的数据文件与第一引擎生成的数据文件之间的误差在预设范围内的情况下,将目标任务迁移至第二引擎中。
该预设范围可以为5%,或者,也可以根据需要进行设置,此处不做特殊限定。
可见,在本申请实施例中,为了保障任务执行效率,可以在保障第二引擎与第一引擎执行目标任务所产生的数据匹配的情况下,还从多种维度衡量目标任务是否适合迁移至第二引擎中,以保障目标任务被准确迁入第二引擎,避免错误的迁移处理而可能带来的生产事故。
在一些实施例中,目标任务的目标编码采用结构化查询语言编写,第一测试任务的编码通过将目标编码对应的原始数据库替换为第一数据库后得到,第二测试任务的编码通过将目标编码对应的原始数据库替换为第二数据库后得到;在上述步骤S101中,获取第一引擎执行第一测试任务得到的第一测试结果,以及,第二引擎执行第二测试任务得到的第二测试结果,包括:在第一测试任务的编码以及第二测试任务的编码中包含时间函数的情况下,在执行时间函数的过程中,对时间函数对应的库函数进行拦截处理,使时间函数的返回结果为预设数值;获取根据预设数值分别生成的第一测试结果和第二测试结果。
该时间函数可以是now()、current_timestamp()等用于获取当前时间的函数。
具体地,在目标任务的目标编码中包含时间函数,例如包含now()函数的情况下,则与其对应的第一测试任务和第二测试任务中也会包含该时间函数,然而,在第一引擎和第二引擎中分别执行第一测试任务和第二测试任务时,第一测试任务和第二测试任务的执行时间通常并不会完全一致,使得第一测试任务和第二测试任务中的now()函数将会在第一测试结果和第二测试结果中写入不同的时间戳,从而导致第一测试结果和第二测试结果的数据不同,而可能发生误判的情况。
为此,在本申请实施例中,考虑到时间函数的返回值不一致并不是由于新引擎的版本或代码变更而导致的,为避免因为时间函数执行时机不同而导致的误判问题,在本申请实施例中,对系统时间函数进行面向切面编程(AOP,Aspect Oriented Programming),这样,在第一测试任务以及第二测试任务的编码中得到时间函数被执行,并调用系统的库函数的情况下,对该库函数进行拦截,以使得该时间函数的返回值均为预设数值,即,均为相同数值,以避免因为时间函数的返回值不同而导致第一测试结果和第二结果不同,从而导致误判。
可见,基于本申请实施例提供的方法,通过基于AOP编程对系统时间函数进行拦截,可以进一步提升得到的校验结果的准确性,避免因为误判而影响目标任务的迁移。
需要说明的是,在实际实施时,为提升执行效率,在获取校验结果的过程中,也可以对上述步骤S102-S103中的处理进行封装处理,例如,可以对第一引擎以及第二引擎中用于获取哈希值的函数hash()进行重新编写,将上述步骤S102-S103中的处理封装入hash()中,这样,在第一引擎执行第一测试任务得到第一测试结果,以及第二引擎执行第二测试任务得到第二测试结果之后,可以通过select sum(hash(*))as sum_hash from dbxx.tblxx的形式直接得到第一测试结果的第一校验值以及,第二测试结果的第二校验值。
例如,在第一测试任务的编码为“insert into old_db.real_table from real_db.table”,第二测试任务的编码为“insert into new_db.real_table from real_db.table”的情况下,在第一引擎中执行第一测试任务和在第二引擎中执行第二测试任务之后,可以在第一引擎中执行指令“select sum(hash(*))as sum_hash from old_db.real_table”直接得到第一校验值,以及,在第二引擎中执行指令“select sum(hash(*))as sum_hash from new_db.real_table”直接得到第二校验值。
通过对上述步骤S102-S103中的处理进行封装,可以简化开发人员的开发工作,提升该方法的扩展性。
在一些实施例中,在执行上述步骤S102之前,该方法还包括:获取第一测试结果中数据记录的第一数量,以及,获取第二测试结果中数据记录的第二数量;若第一数量和第二数量相同,则执行步骤S102。
即,若第一测试结果和第二测试结果中数据记录的数量不同,则说明第一测试结果和第二测试结果不匹配,即,其数量不相同,该种情况下,可以不必执行后续处理,而是可以快速得出目标任务不适合迁入第二引擎的判断结果。
可以理解,本申请提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本申请不再赘述。本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
此外,本申请还提供了任务迁移装置、电子设备、计算机可读存储介质,上述均可用来实现本申请提供的任一种任务迁移方法,相应技术方案和描述和参见方法部分的相应记载,不再赘述。
图4为本申请实施例提供的一种任务迁移装置的框图。
参照图4,本申请实施例提供了一种任务迁移装置,可以应用于电子设备,该任务迁移装置400包括:结果获取单元401、数据转换单元402、校验值获取单元403、校验结果获取单元404和迁移处理单元405。
该结果获取单元401,用于获取第一引擎执行第一测试任务得到的第一测试结果,以及第二引擎执行第二测试任务得到的第二测试结果;其中,第一测试任务、第二测试任务为与目标任务具有相同数据处理流程的任务。
该数据转换单元402,用于对第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及对第二测试结果中的数据进行数据类型转换处理,得到第四测试结果,其中,数据类型转换处理用于将数据的数据类型转换为第一预设类型。
该校验值获取单元403,用于获取第三测试结果的第一校验值,以及,获取第四测试结果的第二校验值。
该校验结果获取单元404,用于根据第一校验值和第二校验值,得到校验结果,其中,校验结果用于表示第一执行结果和第二执行结果是否匹配。
该迁移处理单元405,用于根据校验结果,确定是否将目标任务从第一引擎迁移至第二引擎中。
在一些实施例中,第一预设类型包括字符串类型;该数据转换单元402在对第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及,对第二测试结果中的数据进行数据类型转换处理,得到第四测试结果时,可以用于:按照字段名称对第一测试结果中的数据记录进行第一预设排序处理,得到第五测试结果,以及,按照字段名称对第二测试结果中的数据记录进行第一预设排序处理,得到第六测试结果,第一排序处理用于调整数据记录中各个字段的排列顺序;对第五测试结果中的至少一条第一数据记录进行字符串类型转换处理,得到至少一个第一目标字符串,以及,对第六测试结果中的至少一条第二数据记录进行字符串类型转换处理,得到至少一个第二目标字符串;根据至少一个第一目标字符串,得到第三测试结果,以及,根据至少一个第二目标字符串,得到第四测试结果。
在一些实施例中,该数据转换单元402在获取任一第一数据记录对应的第一目标字符串时,可以用于:确定第一数据记录的每个字段中,数据类型不为字符串类型的数据,并对数据进行字符串类型转换处理,得到每个字段中数据对应的字符串;根据第一数据记录中每个字段的顺序,使用预设分隔符对每个字段中数据对应的字符串进行拼接处理,得到第一数据记录对应的第一目标字符串。
在一些实施例中,数据类型包括第二预设类型,第二预设类型包括由多个子数据组成的集合类型;该数据转换单元402在确定第一数据记录的每个字段中,数据类型不为字符串类型的数据,并对数据进行字符串类型转换处理,得到每个字段中数据对应的字符串时,可以用于:针对第一数据记录的字段中,数据对应的数据类型为第二预设类型的目标数据,获取目标数据中的子数据构建第一数据集,对第一数据集中的子数据进行第二预设排序处理,得到第二数据集;使用预设分隔符对第二数据集中的子数据依次进行拼接处理,得到目标数据对应的字符串。
在一些实施例中,该校验值获取单元403在获取第三测试结果的第一校验值,以及,获取第四测试结果的第二校验值时,可以用于:使用预设散列算法分别获取至少一个第一目标字符串的散列值,得到至少一个第一散列值,以及,使用预设散列算法分别获取至少一个第二目标字符串的散列值,得到至少一个第二散列值;获取至少一个第一散列值的和值作为第一校验值,以及,获取至少一个第二散列值的和值作为第二校验值。
在一些实施例中,该迁移处理单元405在根据校验结果,确定是否将目标任务从第一引擎迁移至第二引擎时,可以用于:在校验结果表示第一测试结果和第二测试结果匹配的情况下,获取第一测试任务对应的第一性能数据和第一文件信息,以及,获取第二测试任务对应的第二性能数据和第二文件信息;第一测试任务第二测试任务第一文件信息包括第一测试结果对应的第一文件数量和第一文件大小,第二文件信息包括第二测试结果对应的第二文件数量和第二文件大小;根据第一性能数据和第二性能数据,得到第一比对结果;根据第一文件数量、第二文件数量、第一文件大小和第二文件大小,得到第二比对结果,其中,第二比对结果用于表示第二引擎生成的数据文件与第一引擎生成的数据文件之间的误差;在第一比对结果表示第二引擎的性能优于第一引擎,并且,第二比对结果表示第二引擎生成的数据文件与第一引擎生成的数据文件之间的误差在预设范围内的情况下,将目标任务迁移至第二引擎中。
在一些实施例中,目标任务的目标编码采用结构化查询语言编写,第一测试任务的编码通过将目标编码对应的原始数据库替换为第一数据库后得到,第二测试任务的编码通过将目标编码对应的原始数据库替换为第二数据库后得到;结果获取单元401在获取第一引擎执行第一测试任务得到的第一测试结果,以及,第二引擎执行第二测试任务得到的第二测试结果时,可以用于:在第一测试任务的编码以及第二测试任务的编码中包含时间函数的情况下,在执行时间函数的过程中,对时间函数对应的库函数进行拦截处理,使时间函数的返回结果为预设数值;获取根据预设数值分别生成的第一测试结果和第二测试结果。
综上,本申请实施例提供的任务迁移装置,由于第一测试任务和第二测试任务之间仅在于所处的引擎不同,而其数据处理流程均与目标任务相同,因此,在确定是否将目标任务从第一引擎迁移入第二引擎之前,先基于结果获取单元获取该第一测试任务和第二测试任务,并将第一测试任务在旧引擎中执行,以及将第二测试任务在新引擎中执行,以避免直接在新引擎中执行目标任务对生产环境带来干扰。另外,为了保证校验结果的准确性,本申请在获取到第一测试结果和第二测试结果之后,并不是直接获取其校验值,而是基于数据转换单元对其各自包含的数据进行数据类型转换处理,以将其包含的数据均转换为第一预设类型,从而保障数据在内容和格式上的一致性,提升得到的校验结果的准确性,以进一步保障迁移处理的准确性。由此可知,基于本申请的实施例对待迁移的目标任务进行迁移,一方面可以提升目标任务的迁移效率,另一方面也可以保障迁移处理的准确性。
图5为本申请实施例提供的一种电子设备的框图。
参照图5,本申请实施例提供了一种电子设备,该电子设备500包括:至少一个处理器501;至少一个存储器502,以及一个或多个I/O接口503,连接在处理器501与存储器502之间;其中,存储器502存储有可被至少一个处理器501执行的一个或多个计算机程序,一个或多个计算机程序被至少一个处理器501执行,以使至少一个处理器501能够执行上述的任务迁移方法。
本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其中,计算机程序在被处理器执行时实现上述的任务迁移方法。计算机可读存储介质可以是易失性或非易失性计算机可读存储介质。
本申请实施例还提供了一种计算机程序产品,包括计算机可读代码,或者承载有计算机可读代码的非易失性计算机可读存储介质,当所述计算机可读代码在电子设备的处理器中运行时,所述电子设备中的处理器执行上述的任务迁移方法。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读存储介质上,计算机可读存储介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。
如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读程序指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM)、静态随机存取存储器(SRAM)、闪存或其他存储器技术、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读程序指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本申请操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本申请的各个方面。
这里所描述的计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software DevelopmentKit,SDK)等等。
这里参照根据本申请实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本申请的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本申请的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本文已经公开了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其他实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本申请的范围的情况下,可进行各种形式和细节上的改变。

Claims (10)

1.一种任务迁移方法,其特征在于,包括:
获取第一引擎执行第一测试任务得到的第一测试结果,以及第二引擎执行第二测试任务得到的第二测试结果;其中,所述第一测试任务、所述第二测试任务为与目标任务具有相同数据处理流程的任务;
对所述第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及对所述第二测试结果中的数据进行所述数据类型转换处理,得到第四测试结果,其中,所述数据类型转换处理用于将数据的数据类型转换为第一预设类型;
获取所述第三测试结果的第一校验值,以及,获取所述第四测试结果的第二校验值;
根据所述第一校验值和所述第二校验值,得到校验结果,其中,所述校验结果用于表示所述第一执行结果和所述第二执行结果是否匹配;
根据所述校验结果,确定是否将所述目标任务从所述第一引擎迁移至所述第二引擎中。
2.根据权利要求1所述的方法,其特征在于,所述第一引擎执行所述第一测试任务后得到的第一测试结果写入第一数据库,所述第二引擎执行所述第二测试任务后得到的第二测试结果写入第二数据库;
所述目标任务为所述第一引擎所执行的任务中,等待迁入所述第二引擎中的任务,所述目标任务执行所述数据处理流程后将得到的执行结果写入原始数据库;
所述原始数据库、所述第一数据库和所述第二数据库具有相同库表结构。
3.根据权利要求1所述的方法,其特征在于,所述第一预设类型包括字符串类型;
所述对所述第一测试结果中的数据进行数据类型转换处理,得到第三测试结果,以及,对所述第二测试结果中的数据进行所述数据类型转换处理,得到第四测试结果,包括:
按照字段名称对所述第一测试结果中的数据记录进行第一预设排序处理,得到第五测试结果,以及,按照字段名称对所述第二测试结果中的数据记录进行所述第一预设排序处理,得到第六测试结果,所述第一排序处理用于调整数据记录中各个字段的排列顺序;
对所述第五测试结果中的至少一条第一数据记录进行字符串类型转换处理,得到至少一个第一目标字符串,以及,对所述第六测试结果中的至少一条第二数据记录进行所述字符串类型转换处理,得到至少一个第二目标字符串;
根据所述至少一个第一目标字符串,得到所述第三测试结果,以及,根据所述至少一个第二目标字符串,得到所述第四测试结果。
4.根据权利要求3所述的方法,其特征在于,任一第一数据记录对应的第一目标字符串通过以下步骤得到:
确定所述第一数据记录的每个字段中,数据类型不为字符串类型的数据,并对所述数据进行字符串类型转换处理,得到每个字段中数据对应的字符串;
根据所述第一数据记录中每个字段的顺序,使用预设分隔符对所述每个字段中数据对应的字符串进行拼接处理,得到所述第一数据记录对应的第一目标字符串。
5.根据权利要求4所述的方法,其特征在于,所述数据类型包括第二预设类型,所述第二预设类型包括由多个子数据组成的集合类型;
所述确定所述第一数据记录的每个字段中,数据类型不为字符串类型的数据,并对所述数据进行字符串类型转换处理,得到每个字段中数据对应的字符串,包括:
针对所述第一数据记录的字段中,数据对应的数据类型为所述第二预设类型的目标数据,获取所述目标数据中的子数据构建第一数据集,对所述第一数据集中的子数据进行第二预设排序处理,得到第二数据集;
使用所述预设分隔符对所述第二数据集中的子数据依次进行拼接处理,得到所述目标数据对应的字符串。
6.根据权利要求3所述的方法,其特征在于,所述获取所述第三测试结果的第一校验值,以及,获取所述第四测试结果的第二校验值,包括:
使用预设散列算法分别获取所述至少一个第一目标字符串的散列值,得到至少一个第一散列值,以及,使用所述预设散列算法分别获取所述至少一个第二目标字符串的散列值,得到至少一个第二散列值;
获取所述至少一个第一散列值的和值作为第一校验值,以及,获取所述至少一个第二散列值的和值作为所述第二校验值。
7.根据权利要求1所述的方法,其特征在于,所述根据所述校验结果,确定是否将所述目标任务从所述第一引擎迁移至所述第二引擎中,包括:
在所述校验结果表示所述第一测试结果和所述第二测试结果匹配的情况下,获取所述第一测试任务对应的第一性能数据和第一文件信息,以及,获取所述第二测试任务对应的第二性能数据和第二文件信息;第一测试任务第二测试任务所述第一文件信息包括所述第一测试结果对应的第一文件数量和第一文件大小,所述第二文件信息包括所述第二测试结果对应的第二文件数量和第二文件大小;
根据所述第一性能数据和所述第二性能数据,得到第一比对结果;
根据所述第一文件数量、所述第二文件数量、所述第一文件大小和所述第二文件大小,得到第二比对结果,其中,所述第二比对结果用于表示第二引擎生成的数据文件与所述第一引擎生成的数据文件之间的误差;
在所述第一比对结果表示所述第二引擎的性能优于所述第一引擎,并且,所述第二比对结果表示所述第二引擎生成的数据文件与所述第一引擎生成的数据文件之间的误差在预设范围内的情况下,将所述目标任务迁移至所述第二引擎中。
8.根据权利要求1所述的方法,其特征在于,所述目标任务的目标编码采用结构化查询语言编写,所述第一测试任务的编码通过将所述目标编码对应的原始数据库替换为第一数据库后得到,所述第二测试任务的编码通过将所述目标编码对应的原始数据库替换为第二数据库后得到;
所述获取第一引擎执行第一测试任务得到的第一测试结果,以及,第二引擎执行第二测试任务得到的第二测试结果,包括:
在所述第一测试任务的编码以及所述第二测试任务的编码中包含时间函数的情况下,在执行所述时间函数的过程中,对所述时间函数对应的库函数进行拦截处理,使所述时间函数的返回结果为预设数值;
获取根据所述预设数值分别生成的所述第一测试结果和所述第二测试结果。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的一个或多个计算机程序,一个或多个所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1-8中任一项所述的任务迁移方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序在被处理器执行时实现如权利要求1-8中任一项所述的任务迁移方法。
CN202311502630.4A 2023-11-13 2023-11-13 任务迁移方法及装置、电子设备、存储介质 Pending CN117951111A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311502630.4A CN117951111A (zh) 2023-11-13 2023-11-13 任务迁移方法及装置、电子设备、存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311502630.4A CN117951111A (zh) 2023-11-13 2023-11-13 任务迁移方法及装置、电子设备、存储介质

Publications (1)

Publication Number Publication Date
CN117951111A true CN117951111A (zh) 2024-04-30

Family

ID=90800344

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311502630.4A Pending CN117951111A (zh) 2023-11-13 2023-11-13 任务迁移方法及装置、电子设备、存储介质

Country Status (1)

Country Link
CN (1) CN117951111A (zh)

Similar Documents

Publication Publication Date Title
US10579638B2 (en) Automating extract, transform, and load job testing
US20170220628A1 (en) Verifying data consistency
US10572470B2 (en) Enhanced FSCK mechanism for improved consistency in case of erasure coded object storage architecture built using clustered file system
CN113312338A (zh) 数据一致性的校验方法、装置、设备、介质及程序产品
US9134975B1 (en) Determining which computer programs are candidates to be recompiled after application of updates to a compiler
CN109376142B (zh) 数据迁移方法及终端设备
CN111258990A (zh) 索引库数据迁移方法、装置、设备及存储介质
KR20220000880A (ko) 서버 초기화 정보의 중앙 집중화를 위한 시스템 및 방법
CN117951111A (zh) 任务迁移方法及装置、电子设备、存储介质
CN114391136A (zh) 增强的虚拟机镜像管理系统
CN114879985B (zh) 一种证书文件的安装方法、装置、设备及存储介质
US20230385495A1 (en) Efficient circuit simulation method and apparatus, device, and storage medium
CN116186050A (zh) 一种基于哈希算法的数据更新方法及设备
CN109814911A (zh) 用于管理脚本程序的方法、装置、计算机设备及存储介质
US20230071862A1 (en) Automatic workflow generation based on annotated code statements
US20200341911A1 (en) Method, device, and computer program product for managing storage system
CN112559444A (zh) Sql文件迁移方法、装置、存储介质及设备
US11561979B2 (en) Dynamically detecting and correcting errors in queries
US11010151B2 (en) Software patch ordering
CN109901997B (zh) 金融系统升级方法及装置、电子设备、存储介质
CN116450602A (zh) 一种数据迁移方法、装置、电子设备和存储介质
CN116150758A (zh) 漏洞检测方法、装置、通信设备及计算机可读存储介质
CN118656357A (zh) 一种数据迁移方法、装置、电子设备、存储介质及产品
CN118051418A (zh) 回归测试方法及装置、电子设备、存储介质
CN114490583A (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