一种基于定长数据单元的二进制编码方法、装置、设备及介质与流程
本技术涉及数据编码、数据存储及异构计算平台之间的数据传输,特别涉及一种面向异构计算平台的定长二进制编码方法、装置、电子终端及存储介质。所述异构计算平台包括采用不同处理器架构、不同本地字节序或者不同数据处理能力的计算平台。本技术通过预设固定字节长度、固定区域布局及固定比特偏移,对待编码数据进行定长二进制封装,并按照网络字节序输出或持久化,以便不同计算平台按照统一的规格标识和位域配置读取定长数据单元。
背景技术:
1、随着物联网设备、边缘计算设备、服务器及人工智能计算平台之间的数据交互日益频繁,需要对不同类型、不同规模的数据进行编码、传输和持久化存储。
2、现有的json(javascript object notation,javascript对象表示法)、xml(extensible markup language,可扩展标记语言)、protobuf(protocol buffers,协议缓冲区)、messagepack等数据编码方式通常采用变长字段、长度前缀、字段标签或分隔符描述数据结构。在读取该类编码数据时,接收端通常需要依次识别字段标签、字段长度或分隔符,才能确定各字段的位置。对于字段数量较多或存在嵌套的数据结构,字段定位时间会随数据结构复杂程度增加,不利于数据访问时延的稳定控制。
3、同时,变长编码数据的记录边界及字段位置通常并不固定,数据在内存中容易形成非连续或非对齐的数据块。在利用直接存储器访问、远程直接存储器访问或图形处理器进行批量数据搬运时,通常需要先执行数据解析、地址计算或重新封装,难以直接按照统一的数据块边界完成批量读取和传输。
4、现有固定长度数据库记录或c语言结构体虽然能够提供相对固定的存储边界,但通常仅针对一种预先确定的数据结构和记录长度进行定义。当服务器、边缘节点、传感器或无源标签所能承载的数据规模存在较大差异时,需要分别设置多套数据结构,难以在统一协议下实现不同固定长度规格之间的兼容。此外,部分固定长度结构仍依赖外部模式文件、数据库表定义或平台相关的数据类型进行解释,在不同处理器字节序或不同位宽平台之间传输时,仍可能出现字段错位或数值解释不一致的问题。
5、因此,需要提供一种二进制编码方案,使不同规模的数据能够按照统一的字段语义封装为具有明确边界的定长数据单元,并使接收端能够基于数据单元头部的固定字段确定数据单元规格及字段位置,从而减少逐字段扫描和重复解析,同时提高多规格数据在异构计算平台之间的传输兼容性。
技术实现思路
1、鉴于以上所述现有技术的缺点,本技术的目的在于提供一种基于定长数据单元的二进制编码方法、装置、设备及介质,用于解决如下技术问题:如何在服务器、边缘设备、传感器及其他异构计算平台之间,对不同规模的数据进行统一的定长二进制封装,使接收端能够根据位于数据单元头部的规格字段确定数据单元总长度,并按照预设的固定比特偏移读取身份字段及业务数据,从而减少变长字段扫描和地址计算,同时实现不同定长规格之间的兼容以及跨平台一致传输。
2、为实现上述目的及其他相关目的,本技术的第一方面提供一种面向异构计算平台的定长二进制编码方法,包括:获取待编码数据,从多个预设固定字节长度中确定与所述待编码数据对应的目标规格;按照所述目标规格分配固定长度存储空间,所述固定长度存储空间包括位于低地址端的表头区和位于所述表头区之后的数据承载区,并且在所述目标规格的固定字节长度不小于预设阈值时,还包括位于高地址端的指针区;根据与所述目标规格对应的预设位域配置,在所述表头区的固定比特偏移处分别写入类型标识、规格标识、节点标识、顺序标识和时间标识,其中,各标识字段具有预设位宽,所述规格标识用于指示所述目标规格,所述顺序标识在具有相同节点标识的定长数据单元中单调递增;将所述待编码数据的至少一部分写入所述数据承载区和/或所述表头区中的预定业务字段,并对所述固定长度存储空间中的未写入位置进行填充,得到总字节长度等于所述目标规格的定长数据单元;按照网络字节序输出或持久化所述定长数据单元;读取所述定长数据单元时,从所述表头区读取所述规格标识,根据所述规格标识确定所述定长数据单元的总字节长度,并按照所述预设位域配置对应的固定比特偏移提取各标识字段及所述待编码数据。
3、于本技术的第一方面的一些实施例中,所述预设位域配置包括各字段的字段位宽、起始比特偏移及排列顺序;相邻字段按照对应的起始比特偏移连续排列,字段之间不设置字段分隔符和字段长度前缀,并在各字段写入完成后对剩余比特位置进行填充,以使所述定长数据单元达到所述目标规格对应的固定字节长度。
4、于本技术的第一方面的一些实施例中,所述节点标识用于标识生成所述定长数据单元的节点;所述顺序标识由所述节点按照定长数据单元的生成顺序递增设置;所述时间标识根据所述定长数据单元的生成时间设置;所述表头区还包括逻辑时间字段,所述逻辑时间字段包括纪元字段和纪元内偏移字段,用于表征不同定长数据单元之间的逻辑先后顺序。
5、于本技术的第一方面的一些实施例中,所述多个预设固定字节长度包括16字节、32字节、64字节、128字节、256字节、512字节以及由所述512字节按照2的整数次幂扩展得到的至少一个固定字节长度;不同固定字节长度对应的定长数据单元采用相同的字段语义,并且低规格定长数据单元中的共有表头字段被映射至高规格定长数据单元的表头区中的对应位置。
6、于本技术的第一方面的一些实施例中,在将第一定长数据单元升级为字节长度大于所述第一定长数据单元的第二定长数据单元时,按照所述第二定长数据单元的规格分配第二固定长度存储空间,将所述第一定长数据单元的共有表头字段复制至所述第二固定长度存储空间的低地址端,更新规格标识,将原数据写入所述第二定长数据单元的数据承载区,并对新增空间进行初始化;在将所述第二定长数据单元降级为字节长度小于所述第二定长数据单元的第三定长数据单元时,对超出所述第三定长数据单元的数据承载容量的数据执行压缩处理和/或分片处理,并将处理后的数据及共有表头字段写入所述第三定长数据单元。
7、于本技术的第一方面的一些实施例中,当所述目标规格的固定字节长度不小于256字节时,所述固定长度存储空间还包括位于所述定长数据单元尾部的64字节指针区;所述指针区包括六个分别占用8字节的关联指针字段以及用于存储关联链统计信息和指针区校验信息的管理字段。
8、于本技术的第一方面的一些实施例中,按照网络字节序输出或持久化所述定长数据单元,包括:判断当前处理平台的本地字节序;在所述本地字节序为小端字节序时,将所述定长数据单元中的多字节字段转换为大端字节序;在读取所述定长数据单元时,根据所述表头区中的预定标识字段判断所述定长数据单元的字节序,并在所述定长数据单元的字节序与当前处理平台的本地字节序不一致时执行字节序转换。
9、于本技术的第一方面的一些实施例中,形成所述定长数据单元还包括:根据所述待编码数据生成内容指纹,并将所述内容指纹写入所述表头区中的内容指纹字段;根据所述表头区和所述数据承载区计算校验值,并将所述校验值写入校验字段;读取所述定长数据单元时,根据所述规格标识确定预期字节长度,将接收到的实际字节长度与所述预期字节长度进行比较,并对所述内容指纹和所述校验值进行验证;在所述实际字节长度与所述预期字节长度不一致,或者所述内容指纹或所述校验值验证失败时,拒绝对所述定长数据单元进行写入或执行后续处理。
10、为实现上述目的及其他相关目的,本技术的第二方面提供一种面向异构计算平台的定长二进制编码装置,包括:规格确定模块,用于获取待编码数据,并从多个预设固定字节长度中确定与所述待编码数据对应的目标规格;存储空间分配模块,用于按照所述目标规格分配固定长度存储空间,所述固定长度存储空间包括位于低地址端的表头区和位于所述表头区之后的数据承载区,并且在所述目标规格的固定字节长度不小于预设阈值时,还包括位于高地址端的指针区;位域写入模块,用于根据与所述目标规格对应的预设位域配置,在所述表头区的固定比特偏移处分别写入类型标识、规格标识、节点标识、顺序标识和时间标识,其中,各标识字段具有预设位宽,所述规格标识用于指示所述目标规格,所述顺序标识在具有相同节点标识的定长数据单元中单调递增;数据写入模块,用于将所述待编码数据的至少一部分写入所述数据承载区和/或所述表头区中的预定业务字段,并对所述固定长度存储空间中的未写入位置进行填充,得到总字节长度等于所述目标规格的定长数据单元;字节序处理模块,用于按照网络字节序输出或持久化所述定长数据单元;数据读取模块,用于读取所述定长数据单元时,从所述表头区读取所述规格标识,根据所述规格标识确定所述定长数据单元的总字节长度,并按照所述预设位域配置对应的固定比特偏移提取各标识字段及所述待编码数据。
11、为实现上述目的及其他相关目的,本技术的第三方面提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现所述面向异构计算平台的定长二进制编码方法。
12、为实现上述目的及其他相关目的,本技术的第四方面提供一种计算机程序产品,所述计算机程序产品中包括计算机程序代码,当所述计算机程序代码在计算机上运行时,使得所述计算机实现所述方面向异构计算平台的定长二进制编码法。
13、为实现上述目的及其他相关目的,本技术的第五方面提供一种电子终端,包括存储器、处理器及存储在存储器上的计算机程序;所述处理器执行所述计算机程序以实现所述面向异构计算平台的定长二进制编码方法。
14、如上所述,本技术的一种基于定长数据单元的二进制编码方法、装置、设备及介质,具有以下有益效果:
15、(1)通过从多个预设固定字节长度中确定目标规格,并按照目标规格分配固定长度存储空间,使每个定长数据单元具有可预先确定的总字节长度和区域边界。读取端由表头区中的规格标识确定总字节长度,无需依赖待编码数据的实际内容逐段计算记录边界。
16、(2)表头区位于固定长度存储空间的低地址端,数据承载区位于表头区之后,满足规格条件时指针区位于高地址端。读取端能够优先取得表头区中的规格标识和身份标识,并由总字节长度确定后续区域的位置,从而减少在数据承载区中搜索结构信息的操作。
17、(3)类型标识、规格标识、节点标识、顺序标识和时间标识写入表头区的固定比特偏移,各标识字段具有预设位宽。读取端按照同一预设位域配置提取字段,字段位置不随字段内容变化,有利于稳定字段访问路径。
18、(4)字段之间不设置分隔符和字段长度前缀,并对未写入位置或剩余比特位置进行填充,使定长数据单元的总长度始终等于目标规格。该方式在保持固定字段边界的同时,避免因实际写入数据量不同而改变数据单元长度。
19、(5)不同固定字节长度采用相同字段语义,低规格定长数据单元的共有表头字段映射至高规格定长数据单元的对应位置。由此,接收端能够复用字段定义和读取逻辑,并在规格升级或降级时保留共有表头字段。
20、(6)目标规格不小于256字节时,在尾部设置固定64字节指针区,并以六个8字节关联指针字段和管理字段保存关联信息。由于指针区长度及尾部位置固定,可根据定长数据单元总长度确定指针区范围。
21、(7)定长数据单元按照网络字节序输出或持久化,并在读取时根据平台本地字节序执行必要转换,使同一输出或持久化数据在不同字节序平台之间采用统一的多字节字段排列。
22、(8)通过预期字节长度比较、内容指纹验证和校验值验证,对定长数据单元的长度及内容完整性进行检查;任一检查失败时拒绝写入或后续处理,能够避免不符合目标规格或内容发生变化的数据继续进入处理流程。
23、(9)编码装置中的规格确定模块、存储空间分配模块、位域写入模块、数据写入模块、字节序处理模块和数据读取模块分别对应方法中的处理环节,模块之间按照数据形成和读取顺序传递目标规格、固定长度存储空间及定长数据单元,便于在异构计算平台中实现统一的编码和读取功能。
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com