CN113326311A - 一种数据转换方法及装置 - Google Patents
一种数据转换方法及装置 Download PDFInfo
- Publication number
- CN113326311A CN113326311A CN202110709674.9A CN202110709674A CN113326311A CN 113326311 A CN113326311 A CN 113326311A CN 202110709674 A CN202110709674 A CN 202110709674A CN 113326311 A CN113326311 A CN 113326311A
- Authority
- CN
- China
- Prior art keywords
- data
- conversion
- type
- determining
- source data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 200
- 238000000034 method Methods 0.000 title claims abstract description 105
- 238000013507 mapping Methods 0.000 claims abstract description 21
- 238000012216 screening Methods 0.000 claims abstract description 7
- 238000012545 processing Methods 0.000 claims description 36
- 230000006870 function Effects 0.000 claims description 19
- 238000003860 storage Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 7
- 230000002457 bidirectional effect Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 2
- 244000046052 Phaseolus vulgaris Species 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 230000001364 causal effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
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)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种数据转换方法及装置,该方法为:接收待转换的源数据,并确定所述源数据对应的注解,所述注解至少包括源数据与对应的目标数据的映射关系以及自定义方法的注解;基于所述注解中的映射关系,确定所述源数据中第一子数据对应的第一数据类型和与所述第一子数据对应的第一目标子数据对应的第二数据类型;基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式;所述预设转换条件用于基于数据类型、以及所述数据类型对应的属性的取值范围和所述注解,筛选对子数据进行转换的转换方式;基于所述转换方式对所述源数据中第一子数据进行转换,获得所述第一目标子数据。
Description
技术领域
本发明实施例涉及金融科技(Fintech)领域,尤其涉及一种数据转换方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。
目前,在进行不同类型的数据转换时,一般使用Spring框架提供的原生数据转换工具BeanUtils或在此基础上进一步封装的Dozer或ModelMapper组件进行数据转换工作。
然而,前述的数据转换处理方式,在初始化数据结构过程中使用反射技术,对应用的资源消耗较高处理时间相对也更长,且原生SDK(Software Development Kit,软件开发工具包)在涉及到属性类型转换以及业务逻辑上的转换时无法满足要求,需要自定义转化器实现,且需要实现converter接口,同时手动将转化器注册到配置中心,即存在较多非业务核心内容的开发工作,导致数据转换的效率低。
发明内容
本发明提供一种数据转换方法及装置,用于提高数据转换效率。
第一方面,本发明提供一种数据转换方法,所述方法包括:接收待转换的源数据,并确定所述源数据对应的注解,所述注解至少包括源数据与对应的目标数据的映射关系以及自定义方法的注解;基于所述注解中的映射关系,确定所述源数据中第一子数据对应的第一数据类型和与所述第一子数据对应的第一目标子数据对应的第二数据类型;基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式;所述预设转换条件用于基于数据类型、以及所述数据类型对应的属性的取值范围和所述注解,筛选对子数据进行转换的转换方式;基于所述转换方式对所述源数据中第一子数据进行转换,获得所述第一目标子数据。
上述方法中,可以基于注解确定源数据中第一子数据对应的第一目标子数据以及第一目标子数据对应的第二数据类型,从而基于第一数据类型、第二数据类型以及预设转换条件,对应确定对第一子数据进行转换的转换方式,并基于该转换方式对第一子数据进行转换,从而可以获得对应的第一目标子数据。即基于注解实现数据的转换,这样的方式,省去了基于反射获取数据结构、属性以及转换的过程,可以大幅提高数据转换效率。
可选的,所述基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式,包括:当确定所述第一数据类型和所述第二数据类型不同时,确定所述第一数据类型对应的第一取值范围,以及所述第二数据类型对应的第二取值范围;若第一数据类型和所述第二数据类型兼容,且确定所述第一取值范围不大于所述第二取值范围,则确定转换方式为隐式类型转换方式;其中,所述隐式类型转换方式为基于软件工具包SDK对应执行转换;若所述第一数据类型和所述第二数据类型兼容,且确定所述第一取值范围大于所述第二取值范围,则确定转换方式为强制类型转换方式;其中,所述强制类型转换方式为基于软件工具包SDK对应的转换基础上扩展的转换方式。
上述方法中,当确定第一数据类型和第二数据类型不同时,则可以确定第一数据类型和第二数据类型分别对应的取值范围,从而基于取值范围的大小,对应确定转换方式,从而可以实现对多种数据类型的数据的转换。
可选的,所述基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式,包括:当确定所述第一数据类型和所述第二数据类型不同,且所述第一子数据中包括业务逻辑,则确定转换方式为自定义转换;所述自定义转换为基于所述自定义方法的注解确定目标个性化函数。
上述方法中,当源数据中第一子数据包括业务逻辑时,则可以基于注解中的自定义方法的注解对应确定目标个性化函数,从而基于目标个性化函数实现对源数据和目标数据的转换,这样的方式,可以提供一个对业务逻辑的数据进行转换的接口,从而基于该接口即自定义方法的注解实现数据的转换。
可选的,所述方法还包括:在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值;确定所述源数据的哈希值和所述目标数据对应的键值对,并将所述键值对对应缓存至缓存池中;当再次接收到第一源数据,且确定所述第一源数据的哈希值与所述源数据的哈希值相同,则基于所述键值对从所述缓存池中获取所述目标数据,将所述目标数据作为所述第一源数据转换后的第一目标数据。
上述方法中,将源数据的哈希值和目标数据对应的键值对缓存到缓存池中,当接收到新的源数据即第一源数据,且该第一源数据的哈希值与源数据的哈希值相同,则可以基于键值对以源数据的哈希值为key从缓存池中获取对应的valu即目标数据,即避免了再次执行基于第一源数据对应的注解进行映射以及确定目标数据的过程,提高了数据转换效率。
可选的,所述源数据的哈希值基于以下公式确定: 其中,A用于表征所述源数据,HashValue(A)用于表征所述源数据的哈希值,M用于表征基于所述第一数据结构和随机素数确定的初始哈希值,N用于表征乘数因子,NAME(A)用于表征所述源数据对应的第一数据类型,append()用于表征java语言中追加新的对象的运算规则,MD5用于表征java语言中防止数据碰撞的运算规则。
上述方法中,公式中M基于随机素数对应确定,即对源数据中每个子数据对应的哈希值的确定基础不同,且引入了MD5算法,从而可以进一步降低了碰撞概率,即确保原始数据的唯一性,且同时重写后的公式可以用于子数据的键值对key值标记,为后续数据调用提高简单快速的实现方案。
可选的,所述在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值的步骤之前,还包括:确定单位时间内对所述源数据进行转换的请求流量是否大于预设阈值;当确定单位时间内对所述源数据进行转换的请求流量大于预设阈值,执行在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值的步骤。
上述方法中,可对单位时间内对源数据进行转换的请求流量进行监控,从而在请求流量大于预设阈值即请求流量较大时,可以提供基于缓存池中确定目标数据的方式,避免由于再次进行相同数据的转换过程的执行,提高数据转换的效率。
可选的,所述方法还包括:确定所述源数据中的第二子数据,并基于所述注解,确定所述第二子数据的第三数据类型和所述第二子数据对应的第二目标子数据的第四数据类型;当确定所述第三数据类型与所述第二数据类型相同,且所述第四数据类型与所述第一数据类型相同时,则确定所述注解中的反向赋值方法的注解;基于所述反向赋值方法的注解,调用执行对应的反向赋值函数对所述第二子数据进行转换处理,获得所述第二目标子数据。
上述方法中,可以基于注解中的反向赋值方法的注解,实现对双向数据进行转换的支持,从而可以高效的实现第一数据类型以及第二数据类型的数据之间的双向转换,提高数据转换的效率。
第二方面,本发明提供一种数据转换装置,所述装置包括:确定单元,用于接收待转换的源数据,并确定所述源数据对应的注解,所述注解至少包括源数据与对应的目标数据的映射关系以及自定义方法的注解;第一处理单元,用于基于所述注解中的映射关系,确定所述源数据中第一子数据对应的第一数据类型和与所述第一子数据对应的第一目标子数据对应的第二数据类型;第二处理单元,用于基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式;所述预设转换条件用于基于数据类型、以及所述数据类型对应的属性的取值范围和所述注解,筛选对子数据进行转换的转换方式;获得单元,用于基于所述转换方式对所述源数据中第一子数据进行转换,获得所述第一目标子数据。
可选的,所述第二处理单元,具体用于:当确定所述第一数据类型和所述第二数据类型不同时,确定所述第一数据类型对应的第一取值范围,以及所述第二数据类型对应的第二取值范围;若第一数据类型和所述第二数据类型兼容,且确定所述第一取值范围不大于所述第二取值范围,则确定转换方式为隐式类型转换方式;其中,所述隐式类型转换方式为基于软件工具包SDK对应执行转换;若所述第一数据类型和所述第二数据类型兼容,且确定所述第一取值范围大于所述第二取值范围,则确定转换方式为强制类型转换方式;其中,所述强制类型转换方式为基于软件工具包SDK对应的转换基础上扩展的转换方式。
可选的,所述第二处理单元,具体用于:当确定所述第一数据类型和所述第二数据类型不同,且所述第一子数据中包括业务逻辑,则确定转换方式为自定义转换;所述自定义转换为基于所述自定义方法的注解确定目标个性化函数。
可选的,所述装置还包括第三处理单元,用于:在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值;确定所述源数据的哈希值和所述目标数据对应的键值对,并将所述键值对对应缓存至缓存池中;当再次接收到第一源数据,且确定所述第一源数据的哈希值与所述源数据的哈希值相同,则基于所述键值对从所述缓存池中获取所述目标数据,将所述目标数据作为所述第一源数据转换后的第一目标数据。
可选的,所述源数据的哈希值基于以下公式确定:
其中,A用于表征所述源数据,HashValue(A)用于表征所述源数据的哈希值,M用于表征基于所述第一数据结构和随机素数确定的初始哈希值,N用于表征乘数因子,NAME(A)用于表征所述源数据对应的第一数据类型,append()用于表征java语言中追加新的对象的运算规则,MD5用于表征java语言中防止数据碰撞的运算规则。
可选的,所述第三处理单元还用于,确定单位时间内对所述源数据进行转换的请求流量是否大于预设阈值;
当确定单位时间内对所述源数据进行转换的请求流量大于预设阈值,在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值。
可选的,所述装置还包括第四处理单元,用于:确定所述源数据中的第二子数据,并基于所述注解,确定所述第二子数据的第三数据类型和所述第二子数据对应的第二目标子数据的第四数据类型;当确定所述第三数据类型与所述第二数据类型相同,且所述第四数据类型与所述第一数据类型相同时,则确定所述注解中的反向赋值方法的注解;基于所述反向赋值方法的注解,调用执行对应的反向赋值函数对所述第二子数据进行转换处理,获得所述第二目标子数据。
上述第二方面及第二方面各个可选装置的有益效果,可以参考上述第一方面及第一方面各个可选方法的有益效果,这里不再赘述。
第三方面,本发明提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。
第四方面,本发明提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍。
图1为本发明实施例提供的一种数据转换方法的步骤流程示意图;
图2为本发明实施例提供的一种数据转换方法的示意图;
图3为本发明实施例提供的对目标数据和源数据进行缓存的示意图;
图4为本发明实施例提供的一种数据转换装置的结构示意图。
具体实施方式
为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本发明实施例以及实施例中的具体特征是对本发明技术方案的详细的说明,而不是对本发明技术方案的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
需要说明的是,本发明的说明书和权利要求中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的图像在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
目前,现有技术中,首先通过java反射机制获取前置数据各个节点的属性并维护至对应的动态类当中,然后根据类转化工具遍历所有各节点属性映射相应的转化工具,且在步骤中,开发人员需要根据数据结构的不同属性自定义转化工具,最后从动态类中获取类属性通过对应转化器转值并赋值给到目标数据中。
可见,现有技术在初始化数据结构过程中使用反射技术,对应用的资源消耗较高处理时间相对也更长,且需要手动将转化器注册到配置中心,存在较多非业务核心内容的开发工作,以及仅可以进行单向数据转换。很显然,现有技术中在进行数据转换时,存在前述问题。
鉴于此,本发明实施例提供一种数据转换方法,通过该方法可以利用注解方式配置数据转换,绕过耗时较大反射运算过程。配置更加简单灵活,同时大幅提高转化效率。并且,基于注解的扩展性,支持双向数据转换以及转换过程中更加复杂的业务逻辑。此外,通过设计链式Hash算法保证原始数据的唯一性,在可以整体结构直接转化的基础上引入可配置的缓存机制进一步提高数据通道的转换效率。
为进一步说明本发明实施例提供的数据转换方法的方案,下面结合附图以及具体实施方式对此进行详细的说明。虽然本发明实施例提供了如下述实施例或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本发明实施例提供的执行顺序。所述方法在实际的处理过程中或者装置执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的应用环境)。
以下结合图1所示的方法流程图对本发明实施例中数据转换方法进行说明,下面对本发明实施例的方法流程进行介绍。
步骤101:接收待转换的源数据,并确定源数据对应的注解,注解至少包括源数据与对应的目标数据的映射关系以及自定义方法的注解。
在步骤101之前,可以基于java语言中几种注解类型,对源数据、目标数据以及数据转换方式进行标记和处理,且可以基于注解类型对多种数据类型的数据进行转换。
示例性的,可以以@source类型的注解标记源数据、以@target类型的注解标记目标数据以及以@method类型的注解标记自定义方法。
在步骤101中,可以接收待转换的源数据,并确定源数据的对应注解,其中,该注解至少包括源数据与对应的目标数据的映射关系以及自定义方法的注解。
步骤102:基于注解中的映射关系,确定源数据中第一子数据对应的第一数据类型和与第一子数据对应的第一目标子数据对应的第二数据类型。
需要说明的是,在本发明实施例中,第一子数据可理解为源数据中的任意一个子数据。
步骤103:基于第一数据类型、第二数据类型以及预设转换条件,确定对源数据中第一子数据进行转换的转换方式;预设转换条件用于基于数据类型、以及数据类型对应的属性的取值范围和注解,筛选对子数据进行转换的转换方式。
基于第一数据类型和第二数据类型是否相同,确定对源数据中第一子数据进行转换的转换方式的实现可以包括:
方式一:
先对第一数据类型与第二数据类型是否相同进行判断,当确定第一数据类型与第二数据类型相同,则可以确定对应的传统数据赋值函数,并基于该传统数据赋值函数对源数据进行转换,获得第一子数据对应的第一目标子数据。
方式二:
当确定第一数据类型和第二数据类型不同时,确定第一数据类型对应的第一取值范围,以及第二数据类型对应的第二取值范围。
示例性的,第一数据类型和第二数据类型可以为布尔型、字节型、短整型、整型、长整型、字符型、单精度浮点型以及双精度浮点型中的任一种。
例如,若第一数据类型为整型,则第一数据类型对应的第一取值范围为:-2147483648~2147483647;第二数据类型为长整型,则第二数据对应的第二取值范围为:-9223372036854775808~9223372036854775807。
进一步,在一种可能的实施方式中,基于第一数据类型和第二数据类型是否兼容,以及数据类型分别对应的取值范围,该方法还进一步包括:
情况1,若第一数据类型和第二数据类型兼容,且确定第一取值范围不大于第二取值范围,则确定转换方式为隐式类型转换方式;其中,隐式类型转换方式为基于软件工具包SDK对应执行转换。
示例性的,若第一数据类型为整型,且第二数据类型为长整型,且确定第一数据类型对应的第一取值范围不大于第二数据对应的第二取值范围,则确定对第一子数据进行转换的方式为隐式类型转换方式。
例如,源数据中第一子数据的数据类型为int类型,且具体数值为:500,第一子数据对应的第一目标子数据为double类型,判断为隐式转换方式,从而基于隐式转换方式对第一子数据500进行转换,可以获得第一目标子数据为:500.0。
情况2,若第一数据类型和第二数据类型兼容,且确定所述第一取值范围大于所述第二取值范围,则确定转换方式为强制类型转换方式;其中,强制类型转换方式为基于软件工具包SDK对应的转换基础上扩展的转换方式。
示例性的,若第一数据类型为双精度浮点型,且第二数据类型为整型,且确定第一数据类型对应的第一取值范围大于第二数据对应的第二取值范围,则确定对第一子数据进行转换的方式为强制类型转换方式。
例如,源数据中第一子数据的数据类型为float类型,且第一子数据的具体数值为:100.01f;第一子数据对应的第一目标子数据的数据类型为BigDecimal类型,那么,对第一子数据在SDK基础上进行转换后,获得的结果即第一目标子数据为BigDecimal(100.01),且可以判断数据转换后数据对应的精度未丢失,转换结束。
又如,源数据的第一子数据的数据类型为double类型,且第一子数据的具体数值为:100.01;第一子数据对应的第一目标子数据的类型为int类型,则基于SDK进行强制转换后,获得的结果即第一目标子数据为100,且可以判断精度丢失,发出提示信息,提示人员进行处理。
在本发明实施例中,当确定第一数据类型和第二数据类型不同,且第一数据类型和第二数据类型不兼容时,可以执行以下方式三。
方式三:
当确定第一数据类型和第二数据类型不同,且第一子数据中包括业务逻辑,则确定转换方式为自定义转换;自定义转换为基于自定义方法的注解确定目标个性化函数。
例如,源数据中的第一子数据的数据类型为性别枚举类型,且对应的取值范围:M-男性,F-女性;基于映射关系对应确定的第一目标子数据的数据类型为String字符串类型,且对应的取值范围为:0-男性,1-女性,则可以基于@method注解确定对应的自定义逻辑,当识别到第一子数据为M时,确定第一目标子数据为0,否则确定第一目标子数据为1。
步骤104:基于转换方式对源数据中第一子数据进行转换,获得第一目标子数据。
在步骤104中,可以对源数据中第一子数据对应确定的转换方式,对源数据中第一子数据进行转换,从而获得第一目标子数据。需要说明的是,可以基于前述步骤101-104中所执行的方法,对源数据中的所有子数据进行转换。
请参见图2,图2为本发明示例性示出的进行数据转换的示意图。其中,图2中的A数据可以理解为源数据、B数据可以理解为与源数据对应的目标数据;图2中的A1、A2、A3可以理解为源数据中的子数据,B1、B2、B3可以理解为目标数据中与源数据的子数据对应的子数据;属性可以理解为数据类型,值可以理解为该子数据对应的具体数值。
可见,在本发明实施例中省去了在执行中反射获取数据结构、属性以及转换的过程,可以大幅提高运营中的数据转换效率,且在实际实施过程中,发现基于本发明实施例提供的数据转换方法可以极大的提高数据转换效率。
此外,本发明提供的数据转换方案基于注解实现,相比传统的数据转换有更好的可扩展性,更加适于模块化的开发工作,且可以基于对一个子数据或映射关系可以加上不同注解从而实现不同的功能。示例性的,当出现双向数据转换或者是链表形式的子数据进行数据转换时,则可以通过自定义注解实现。
示例性的,确定源数据中的第二子数据,并基于注解,确定第二子数据的第三数据类型和第二子数据对应的第二目标子数据的第四数据类型;当确定第三数据类型与第二数据类型相同,且第四数据类型与第一数据类型相同时,则确定注解中的反向赋值方法的注解;基于反向赋值方法的注解,调用执行对应的反向赋值函数对第二子数据进行转换处理,获得第二目标子数据。需要说明的是,第二子数据为源数据中任一与第一子数据对应的第一目标子数据的数据类型相同的子数据。
可见,第二子数据与前述的第一子数据为双向数据转换,则可以基于翻转的@source注解和@target注解,对应的确定映射关系,并对应确定反向赋值方法的注解,从而可以基于反向赋值方法的注解,调用执行对应的反向赋值函数对第二子数据进行转换处理,获得第二目标子数据。并且,若对子数据的数据类型判断后确定支持隐式转换或强制转换,则整个反向转换过程对于用户来讲,并未产生影响,且并不需要开发新的转换模块,提高数据的转换效率。
另外,针对链表数据进行数据转换时,通过维护特殊数据集合,例如List、Set、Array等,当确定数据为特殊数据集合后则直接进行循环分组处理,从而可以实现在保证安全的前提下进行多线程并发处理。
在本发明实施例中,还提供了基于缓存池来进一步提高数据转换效率的方案。示例性的,确定单位时间内对源数据进行转换的请求流量是否大于预设阈值;当确定单位时间内对源数据进行转换的请求流量大于预设阈值,在基于注解确定源数据对应的目标数据时,确定源数据的哈希值。也就是说,本发明实施中还对单位时间内对源数据进行转换的请求流量进行监控,从而在请求流量大于预设阈值即请求流量较大时,可以提供基于缓存池中确定目标数据的方式,避免由于再次进行相同数据的转换过程的执行,提高数据转换的效率。
示例性的,可以基于链式哈希算法对应确定源数据的哈希值,计算哈希值可以基于不同的数据类型对应确定随机素数,然后构建哈希初始值,再基于对应确定的乘数因子,按照HashCode计算原则在构建数据映射同时处理HashValue:
HashValue1=M*N+HashValue(A1);
HashValue2=HashValue1*N+HashValue(A2);
HashValue3=HashValue1*N+HashValue(A3);
……;
从而最终确定源数据对应的哈希值为:
其中,A用于表征源数据,HashValue(A)用于表征源数据的哈希值,M用于表征基于第一数据结构和随机素数确定的初始哈希值,N用于表征乘数因子,NAME(A)用于表征源数据对应的第一数据类型,append()用于表征java语言中追加新的对象的运算规则,MD5用于表征java语言中防止数据碰撞的运算规则。
进一步地,可以确定源数据的哈希值和目标数据对应的键值对,并将键值对对应缓存至缓存池中;当再次接收到第一源数据,且确定第一源数据的哈希值与源数据的哈希值相同,则基于键值对从缓存池中获取目标数据,将目标数据作为第一源数据转换后的第一目标数据。需要说明的是,在本发明实施例中,第一源数据的哈希值的确定方式与确定源数据的方式相同,这里不再赘述。
举例来讲,当再次接收到第一源数据时,对第一源数据基于哈希运算,获得hashValue(C),当确定hashValue(C)与源数据的哈希值即HashValue(A)相同时,可以从缓存池中获取以HashValue(A)作为key获取与其对应的value即目标数据。若可以获取到value,则将该value作为第一源数据对应的目标数据,可直接返回并使用。若未获取到value,则进行基于前述步骤101-104执行数据转换,返回目标数据的同时,将第一源数据的hashValue(C)与目标数据的json结构体,作为一组<key,value>键值即键值对,对应存入缓存池中,以便为后续其它数据的哈希值与hashValue(C)相同时,提供快速转换的基础。
在本发明实施例中,若为双向数据转换,即从目标数据到源数据进行转换时,也可以执行前述基于缓存池提高数据转换效率的方案,即将以目标数据的哈希值为key,源数据为value的键值对对应缓存到缓存池中,从而再次接收到待转换的数据时,将该数据的哈希值与目标数据的哈希值进行比对,当确定该数据的哈希值与目标数据的哈希值相同时,基于以目标数据的哈希值为key,从缓存池中获取对应的value作为与该数据对应的转换后的数据。需要说明的是,对该待转换的数据和目标数据进行哈希处理的方式,可以参见前述确定源哈希值的方式执行,这里不再赘述。
请参见附图3,图3示例性示出了对目标数据和源数据进行缓存的示意图。在对源数据到目标数据进行转换过程中,另外启动新的线程,对源数据和目标数据进行特定哈希运算,得到用于标记A数据的数据类型和值的唯一性HashValue(A),以及用于标记B数据的数据类型和值的唯一性的HashValue(B),并以<key,value>的形式将源数据和转换的数据类型的json形式保存至缓存池中,同理可将反向的转换映射以键值对即<key,value>的形式保存至缓存池中,从而当再次接收到与源数据的数据类型相同的第一源数据时,则可以直接确定对应的目标数据。
在实际实施过程中,在某些数据结构或***中,TPS(Transaction Per Second,事务每秒处理量)较低的情况下对大量数据进行缓存化,对于***的吞吐性能提升有限,反而会占用较多的cache资源,鉴于此,可以通过守护线程对***各个请求接口流量进行监控根据不同tps大小动态动态调整cache准入权限以及cache存活时间,对***的性能和资源占用进行平衡和优化。例如,后续如果接收到相同结构的数据源,则可以直接从缓存池中获取数据并返回,省去重复的映射和转换处理工作,对于具有复杂业务逻辑处理的数据转换具有较好的优化效果。
如图4所示,本发明提供一种数据转换装置,包括:确定单元401,用于接收待转换的源数据,并确定所述源数据对应的注解,所述注解至少包括源数据与对应的目标数据的映射关系以及自定义方法的注解;第一处理单元402,用于基于所述注解中的映射关系,确定所述源数据中第一子数据对应的第一数据类型和与所述第一子数据对应的第一目标子数据对应的第二数据类型;第二处理单元403,用于基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式;所述预设转换条件用于基于数据类型、以及所述数据类型对应的属性的取值范围和所述注解,筛选对子数据进行转换的转换方式;获得单元404,用于基于所述转换方式对所述源数据中第一子数据进行转换,获得所述第一目标子数据。
可选的,所述第二处理单元403,具体用于:当确定所述第一数据类型和所述第二数据类型不同时,确定所述第一数据类型对应的第一取值范围,以及所述第二数据类型对应的第二取值范围;若第一数据类型和所述第二数据类型兼容,且确定所述第一取值范围不大于所述第二取值范围,则确定转换方式为隐式类型转换方式;其中,所述隐式类型转换方式为基于软件工具包SDK对应执行转换;若所述第一数据类型和所述第二数据类型兼容,且确定所述第一取值范围大于所述第二取值范围,则确定转换方式为强制类型转换方式;其中,所述强制类型转换方式为基于软件工具包SDK对应的转换基础上扩展的转换方式。
可选的,所述第二处理单元403,具体用于:当确定所述第一数据类型和所述第二数据类型不同,且所述第一子数据中包括业务逻辑,则确定转换方式为自定义转换;所述自定义转换为基于所述自定义方法的注解确定目标个性化函数。
可选的,所述装置还包括第三处理单元,用于:在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值;确定所述源数据的哈希值和所述目标数据对应的键值对,并将所述键值对对应缓存至缓存池中;当再次接收到第一源数据,且确定所述第一源数据的哈希值与所述源数据的哈希值相同,则基于所述键值对从所述缓存池中获取所述目标数据,将所述目标数据作为所述第一源数据转换后的第一目标数据。
可选的,所述源数据的哈希值基于以下公式确定:
其中,A用于表征所述源数据,HashValue(A)用于表征所述源数据的哈希值,M用于表征基于所述第一数据结构和随机素数确定的初始哈希值,N用于表征乘数因子,NAME(A)用于表征所述源数据对应的第一数据类型,append()用于表征java语言中追加新的对象的运算规则,MD5用于表征java语言中防止数据碰撞的运算规则。
可选的,所述第三处理单元还用于,确定单位时间内对所述源数据进行转换的请求流量是否大于预设阈值;当确定单位时间内对所述源数据进行转换的请求流量大于预设阈值,在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值。
可选的,所述装置还包括第四处理单元,用于:确定所述源数据中的第二子数据,并基于所述注解,确定所述第二子数据的第三数据类型和所述第二子数据对应的第二目标子数据的第四数据类型;当确定所述第三数据类型与所述第二数据类型相同,且所述第四数据类型与所述第一数据类型相同时,则确定所述注解中的反向赋值方法的注解;基于所述反向赋值方法的注解,调用执行对应的反向赋值函数对所述第二子数据进行转换处理,获得所述第二目标子数据。
本发明实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行本发明实施例提供的一种数据转换方法及任一可选方法。
本发明实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行本发明实施例提供的一种数据转换方法及任一可选方法。
最后应说明的是:本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种数据转换方法,其特征在于,所述方法包括:
接收待转换的源数据,并确定所述源数据对应的注解,所述注解至少包括源数据与对应的目标数据的映射关系以及自定义方法的注解;
基于所述注解中的映射关系,确定所述源数据中第一子数据对应的第一数据类型和与所述第一子数据对应的第一目标子数据对应的第二数据类型;
基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式;所述预设转换条件用于基于数据类型、以及所述数据类型对应的属性的取值范围和所述注解,筛选对子数据进行转换的转换方式;
基于所述转换方式对所述源数据中第一子数据进行转换,获得所述第一目标子数据。
2.如权利要求1所述的方法,其特征在于,所述基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式,包括:
当确定所述第一数据类型和所述第二数据类型不同时,确定所述第一数据类型对应的第一取值范围,以及所述第二数据类型对应的第二取值范围;
若第一数据类型和所述第二数据类型兼容,且确定所述第一取值范围不大于所述第二取值范围,则确定转换方式为隐式类型转换方式;其中,所述隐式类型转换方式为基于软件工具包SDK对应执行转换;
若所述第一数据类型和所述第二数据类型兼容,且确定所述第一取值范围大于所述第二取值范围,则确定转换方式为强制类型转换方式;其中,所述强制类型转换方式为基于软件工具包SDK对应的转换基础上扩展的转换方式。
3.如权利要求1所述的方法,其特征在于,所述基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式,包括:
当确定所述第一数据类型和所述第二数据类型不同,且所述第一子数据中包括业务逻辑,则确定转换方式为自定义转换;所述自定义转换为基于所述自定义方法的注解确定目标个性化函数。
4.如权利要求1-3任一所述的方法,其特征在于,所述方法还包括:
在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值;
确定所述源数据的哈希值和所述目标数据对应的键值对,并将所述键值对对应缓存至缓存池中;
当再次接收到第一源数据,且确定所述第一源数据的哈希值与所述源数据的哈希值相同,则基于所述键值对从所述缓存池中获取所述目标数据,将所述目标数据作为所述第一源数据转换后的第一目标数据。
6.如权利要求4所述的方法,其特征在于,所述在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值的步骤之前,还包括:
确定单位时间内对所述源数据进行转换的请求流量是否大于预设阈值;
当确定单位时间内对所述源数据进行转换的请求流量大于预设阈值,执行在基于所述注解确定所述源数据对应的目标数据时,确定所述源数据的哈希值的步骤。
7.如权利要求1-3任一所述的方法,其特征在于,所述方法还包括:
确定所述源数据中的第二子数据,并基于所述注解,确定所述第二子数据的第三数据类型和所述第二子数据对应的第二目标子数据的第四数据类型;
当确定所述第三数据类型与所述第二数据类型相同,且所述第四数据类型与所述第一数据类型相同时,则确定所述注解中的反向赋值方法的注解;
基于所述反向赋值方法的注解,调用执行对应的反向赋值函数对所述第二子数据进行转换处理,获得所述第二目标子数据。
8.一种数据转换装置,其特征在于,所述装置包括:
确定单元,用于接收待转换的源数据,并确定所述源数据对应的注解,所述注解至少包括源数据与对应的目标数据的映射关系以及自定义方法的注解;
第一处理单元,用于基于所述注解中的映射关系,确定所述源数据中第一子数据对应的第一数据类型和与所述第一子数据对应的第一目标子数据对应的第二数据类型;
第二处理单元,用于基于所述第一数据类型、所述第二数据类型以及预设转换条件,确定对所述源数据中第一子数据进行转换的转换方式;所述预设转换条件用于基于数据类型、以及所述数据类型对应的属性的取值范围和所述注解,筛选对子数据进行转换的转换方式;
获得单元,用于基于所述转换方式对所述源数据中第一子数据进行转换,获得所述第一目标子数据。
9.一种计算机设备,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至7中任意一项所述的方法被执行。
10.一种存储介质,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至7中任意一项所述的方法被执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110709674.9A CN113326311A (zh) | 2021-06-25 | 2021-06-25 | 一种数据转换方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110709674.9A CN113326311A (zh) | 2021-06-25 | 2021-06-25 | 一种数据转换方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113326311A true CN113326311A (zh) | 2021-08-31 |
Family
ID=77424929
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110709674.9A Pending CN113326311A (zh) | 2021-06-25 | 2021-06-25 | 一种数据转换方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113326311A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115455239A (zh) * | 2022-11-10 | 2022-12-09 | 北京易诚互动网络技术股份有限公司 | 一种java类实例和目标格式数据的转换方法和装置 |
-
2021
- 2021-06-25 CN CN202110709674.9A patent/CN113326311A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115455239A (zh) * | 2022-11-10 | 2022-12-09 | 北京易诚互动网络技术股份有限公司 | 一种java类实例和目标格式数据的转换方法和装置 |
CN115455239B (zh) * | 2022-11-10 | 2023-01-06 | 北京易诚互动网络技术股份有限公司 | 一种java类实例和目标格式数据的转换方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111258744A (zh) | 一种基于异构计算的任务处理方法及软硬件框架*** | |
US10579349B2 (en) | Verification of a dataflow representation of a program through static type-checking | |
CN111767143A (zh) | 交易数据处理方法、装置、设备及*** | |
CN112765023B (zh) | 测试用例生成方法、装置 | |
CN109313547B (zh) | 用于cpu利用率和代码重构的查询优化器 | |
JP2020027616A (ja) | コマンド実行方法及び装置 | |
US11321090B2 (en) | Serializing and/or deserializing programs with serializable state | |
CN111061763B (zh) | 用于生成规则引擎的规则执行计划的方法及装置 | |
CN108140022B (zh) | 数据查询方法和数据库*** | |
CN111008087A (zh) | 一种消息处理方法及装置 | |
CN110941655B (zh) | 一种数据格式转换方法及装置 | |
CN113326311A (zh) | 一种数据转换方法及装置 | |
US8543645B1 (en) | Live experiment framework | |
CN108776665B (zh) | 一种数据处理方法及装置 | |
US20230325149A1 (en) | Data processing method and apparatus, computer device, and computer-readable storage medium | |
CN116932147A (zh) | 流式作业处理方法、装置、电子设备及介质 | |
CN106502842A (zh) | 数据恢复方法及*** | |
US8276165B2 (en) | Continuation-based runtime callback invocation | |
US20160110170A1 (en) | Message inlining | |
CN116244703A (zh) | 模糊测试的方法和装置 | |
US20210248492A1 (en) | Learning and Using Property Signatures for Computer Programs | |
CN114090636A (zh) | 一种基于Pulsar的分布式敏感数据识别方法及*** | |
CN112041817A (zh) | 用于管理借助于加速器装置的硬件加速的请求的方法和节点 | |
CN111476663B (zh) | 一种数据处理方法、装置、节点设备及存储介质 | |
CN113836177B (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 |