嵌入式算法之大数据变长存储方法
发布时间:2021-12-27 13:24:04 所属栏目:大数据 来源:互联网
导读:1、应用场景 对于高精度采样结果,其数值最大可能需要3字节,最少1字节,采用标准C的基础数据类型,U16太小无法满足需求,U32则浪费内存。当样本量很大时,其占用的空间问题便突显出来。能否采用变长数据类型存储呢?对小数据采用U8,大数据采用U32,随着数值
1、应用场景 对于高精度采样结果,其数值最大可能需要3字节,最少1字节,采用标准C的基础数据类型,U16太小无法满足需求,U32则浪费内存。当样本量很大时,其占用的空间问题便突显出来。能否采用变长数据类型存储呢?对小数据采用U8,大数据采用U32,随着数值大小动态分配存储空间,就是本文的讨论的重点。 2、数据去冗余 U32的空间其数值范围最大接近2^32,该值非常大,实际数值范围远小于它,高位必然为0。例如U32表示1使用0x00000001,前面位都是0,其表达的数值和U8的0x01是一样的,前面重复的一串0属于冗余数据区,是可以剔除的。 根据U8 数组中存储的信息将对应的数值还原。 假设有0x00000001、0x00000101、0x00000001三个数据,其有效部分是0x01、0x0101、0x01,如果直接拼接在一起,则没法区分0x01010101的含义。因此数据在去掉高位0之后,还需进行编码标记,便于后续解析还原。 3、数据编码 数据编码的主要作用是标记当前数据占用多少连续字节,有两种方案: 1、固定位来定义字节长度(2位可以表示4字节) 一字节:00****** 二字节:01******,00****** 三字节:10******,01******,00****** 四字节:11******,10******,01******,00****** 五字节:使用2位不支持 每个字节的最高2位表示属于原始数据的第几个(从0开始),前面举例的3个字节可以表示为: 0x01 编码后二进制为 00-000001,最高2位为0,表示当前是编码后的数据的最后一个字节; 0x0101 编码后二进制为 01-000001--00-000001 解析时取每个字节的2位判断,若为00则表示一个编码数值结束。 因为前面2位固定用于标记字节数,每个字节实际可用范围只有6位,如果原数据位1000 0001,则最高两位的10需要再占用一个字节表示,最终编码为 01-000010--00-000001。 (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐