本申请实施例涉及数据存储领域,特别涉及一种数据存储方法、装置、计算机设备及存储介质。
背景技术:
随着物联网的快速发展,基于物联网的数据监测系统开始大规模应用。
其中,数据监测系统的基本作用是获取数据并存储于数据库。大多数数据存储方案是将获取的数据进行存储并在存储后进行有损压缩或无损压缩。
而数据的有效性与存储空间与有损压缩或无损压缩方式相关联,如有损压缩是通过减少原始数据的方式来实现数据的压缩,使得数据的有效性无法得到保障;又如无损压缩是通过编码的方式表示数据中的重复部分,以实现数据的压缩,虽一定程度上减少了数据的存储空间,但其压缩比仍然小于有损压缩下的压缩比。即相关技术中的数据存储方案无法解决如何在不损害数据有效性的前提下提高数据压缩比的问题。
技术实现要素:
本申请实施例提供了一种数据存储方法、装置、计算机设备及存储介质,能够解决在不损害数据有效性的前提下提高数据压缩比的问题。所述技术方案如下:
一方面,提供了一种数据存储方法,所述方法包括:
获取待存储数据;
将所述待存储数据由初始数据类型转换为目标数据类型,所述目标数据类型对应的数据长度小于所述初始数据类型对应的数据长度;
将所述目标数据类型的所述待存储数据存储至数据库。
另一方面,提供了一种数据存储装置,所述装置包括:
数据获取模块,用于获取待存储数据;
数据转换模块,用于将所述待存储数据由初始数据类型转换为目标数据类型,所述目标数据类型对应的数据长度小于所述初始数据类型对应的数据长度;
数据存储模块,用于将所述目标数据类型的所述待存储数据存储至数据库。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器;所述存储器存储有至少一条指令,所述至少一条指令用于被所述处理器执行以实现如上述方面所述的数据存储方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现如上述方面所述的数据存储方法。
本申请实施例中,在获取待存储数据后,将待存储数据由初始数据类型转换为目标数据类型,由于转换为目标数据类型的待存储数据的数据长度小于初始数据类型时对应的数据长度,使得待存储数据在存储至数据库之前,极大地减少了待存储数据在数据库中所占的存储空间,且本申请实施例所提供的方法是在相关技术中对待存储数据进行有损数据压缩或无损数据压缩存储之前所执行的,即本申请在具有相关技术中对待存储数据存储时的压缩比例的基础上,通过减少待存储数据存储时的数据长度进一步提高了待存储数据的压缩效果,也进一步节约了数据库的存储资源。
附图说明
图1示出了本申请一个示例性实施例提供的数据存储方法的示意图;
图2示出了本申请一个示例性实施例提供的数据存储方法的流程图;
图3示出了本申请另一个示例性实施例提供的数据存储方法的流程图;
图4示出了本申请另一个示例性实施例提供的数据存储方法的流程图;
图5示出了本申请另一个示例性实施例提供的数据存储方法的流程图;
图6示出了本申请另一个示例性实施例提供的数据存储方法的流程图;
图7示出了本申请一个示例性实施例提供的数据存储装置的结构框图;
图8示出了本申请一个示例性实施例提供的计算机设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
为了方便理解,下面对本申请实施例中涉及的名词进行解释说明。
数据类型:本申请中的数据类型为大多数数据库中涉及较为广泛的数据类型,包括整型、浮点型和枚举型。其中,整型包括字节整型(1字节byte)、短整型(2byte)、普通整型(4byte)和长整型(>4byte),浮点型包括单精度浮点型(4byte)和双精度浮点型(8byte)。
枚举值:通过预定义列出所有数据的枚举值来定义一个有序集合,这些数据的次序和枚举值的次序是一致的。在一个示意性的例子中,morning=1,afternoon=2,evening=3,其中,1、2和3为上述数据分别对应的枚举值。
无损数据压缩:是指使用压缩后的数据进行重构(或者叫做还原、解压缩),重构后的数据与原来的数据完全相同。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜(存储电子文件的处所),用户可以对文件中的数据进行新增、查询、更新、删除等操作。
尤其是随着物联网的发展,基于物联网的大型数据库应用而生,如基于电力行业、化工行业等各类型实时监测、检查与分析设备所采集、产生的时间序列数据等,这些工业数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、测点多信息量大(监测点每秒钟都产生数据,占用了大量存储空间)。
针对基于物联网的各个行业所涉及的数据监测系统,本申请所涉及的数据存储方法能够通过对待存储数据进行数据类型转换、从而实现减少数据存储所占的空间。下述实施例以基于风电场数据监测系统下的时序数据库来举例说明。
示意性的,如图1所示,其示出了本申请一个示例性实施例示出的数据存储方法的示意图。风电场是指将风能捕获、转换成电能并通过输电线送入电网的场所,在图1所示的风电场100中,存在多个监测点(如监测点a、监测点b等),且各个监测点在各自的监测时间间隔下进行数据的采集,并通过计算机设备120将采集到的数据存储至数据库中。其中,计算机设备120在获取待存储数据(各个监测点所采集的数据)之后,首先将待存储数据输入至压缩模块121,压缩模块121能够实现本申请所涉及的数据存储方法,即将待存储数据转换为目标数据类型的待存储数据,其次,计算机设备120对目标数据类型的待存储数据进行无损压缩,并将经过无损数据压缩算法后的目标数据类型的待存储数据存入数据库中。当用户通过终端110查询监测点a所采集的数据,计算机设备120通过与无损数据压缩算法对应的解压缩算法解压并提取所存储的数据。
请参考图2,其示出了本申请一个示例性实施例示出的数据存储方法的流程图,该示例性实施例由配置有数据库的计算机设备一侧执行。该方法包括:
步骤201,获取待存储数据。
在一种可能的实施方式中,待存储数据由数据监测系统通过监测传感器获得,和/或,待存储数据为用户主动输入的数据。
在一种可能的实施方式中,待存储数据预先设置有数据标识,当用户需要在数据库中获取数据时,可通过键入具体的数据标识来获取以该数据标识为标识进行存储的数据。
在一种可能的实施方式中,为了方便数据查找,数据标识与待存储数据的实际含义有关。本申请实施例对数据标识的设定规则不作限定。
在一个示意性的例子中,风电场数据监测系统下包含温度监测点、湿度监测点、风向监测点等多个场景相关的监测点,数据监测系统将各个监测点的英文标识记录为上述各个监测点的数据标识,如温度监测点的数据对应的数据标识为temperature,则用户可通过键入temperature数据标识来获取温度监测点的数据。
步骤202,将待存储数据由初始数据类型转换为目标数据类型。
在一种可能的实施方式中,由于各个监测点的实际监测对象不同,对应的监测数据的初始数据类型也不同,即各个监测点的待存储数据的初始数据类型是不同的。
在一个示意性的例子中,风电场数据监测系统中包括有用于监测当前正常运作发电机数量的监测点,则该监测点的待存储数据的初始数据类型为整型数据;风电场数据监测系统中包括有湿度监测点,由于监测传感器的精度要求,湿度监测点的数据精确至两位,则该监测点的待存储数据的初始数据类型为浮点型数据。
在另一种可能的实施方式中,各个监测点的待存储数据是预先设置的。当用户对监测点的数据类型有自定义的要求,可预先设置各个监测点的数据类型。
在一个示意性的例子中,湿度监测点的数据精度被限定为精确至个位,则该监测点的待存储数据的初始数据类型由上述例子中的浮点型数据预设为整型数据。
然而,由于监测点数据的多样性,在获取待存储数据进行存储的过程中,存在部分待存储数据浪费存储空间的问题。如,湿度监测点的精度要求为精确至小数点后三位,则该监测点对应的初始数据类型为浮点型,当湿度监测点存在一个小数点后三位皆为零的待存储数据,显然,该待存储数据能够以更短字节的数据类型进行存储,如由浮点型数据转为整型数据进行存储,且该待存储数据由初始数据类型转换为整型数据后,待存储数据的数据有效性并未损失。
本申请实施例中,将转换后的数据类型定义为目标数据类型,其中,目标数据类型对应的数据长度小于初始数据类型对应的数据长度。
在一种可能的实施方式中,根据待存储数据的具体数值情况,且在不浪费存储空间且保证原始数据有效性的前提下,将待存储数据由初始数据类型转换为目标数据类型,显然,待存储数据转换为目标数据类型后对应的数据长度小于初始数据类型时对应的数据长度。
步骤203,将目标数据类型的待存储数据存储至数据库。
在一种可能的实施方式中,计算机设备将待存储数据的数据类型转换为目标数据类型后,将目标数据类型的待存储数据存储值数据库,存储至数据库的待存储数据能够实现数据管理与数据共享,以便于在各个监测系统的管理要求下对各个监测点的数据进行查询与管理。
综上所述,本申请实施例中,在获取待存储数据后,计算机设备将待存储数据由初始数据类型转换为目标数据类型,由于转换为目标数据类型的待存储数据的数据长度小于初始数据类型时对应的数据长度,使得待存储数据在存储至数据库之前,极大地减少了待存储数据在数据库中所占的存储空间,且本申请实施例所提供的方法是在相关技术中对待存储数据进行有损数据压缩或无损数据压缩存储之前所执行的,即本申请在具有相关技术中对待存储数据存储时的压缩比例的基础上,通过减少待存储数据存储时的数据长度进一步提高了待存储数据的压缩效果,也进一步节约了数据库的存储资源。
上述示意性的例子仅是列举了一种简单的数据转化示例(结合待存储数据的具体数值情况,将待存储数据的数据类型由浮点型转换为整型),下面结合待存储数据可能包括的数据类型,具体阐述本申请实施例所提供的数据存储方法。
请参考图3,其示出了本申请一个示例性实施例示出的数据存储方法的流程图,该示例性实施例由配置有数据库的计算机设备一侧执行。该方法包括:
步骤301,获取待存储数据。
本步骤的实施方式可以参考上述步骤201,本实施例在此不再赘述。
在一种可能的实施方式中,若初始数据类型为浮点型,且待存储数据符合整型转化条件,则执行步骤302;若初始数据类型为浮点型,且待存储数据不符合整型转化条件,则执行步骤303。
步骤302,若初始数据类型为浮点型,且待存储数据符合整型转化条件,则将待存储数据由浮点型转化为整型。
浮点型数据包括单精度浮点型数据和双精度浮点型数据,其中,单精度浮点型数据所占的字节大小为4byte,双精度浮点型数据所占的字节大小为8byte。
在一个示意性的例子中,风电场数据监测系统中,温度监测点的初始数据类型预先设置为单精度浮点型,温度监测点当前所监测到的数据为28.000摄氏度,若该数据继续以单精度浮点型进行存储,显然会对数据库的存储空间造成浪费。
在一种可能的实施方式中,本步骤包括如下步骤,并用于解决上述示意性例子所涉及的问题。
一、若初始数据类型为浮点型,且待存储数据包含一位小数,则计算机设备获取待存储数据的小数位数值。
在计算机存储浮点型数据时,若遇到小数点后的小数均为零的数据时,存储时只保留小数点后第一位小数位的数值。如,待存储数据为1.000,该数据的小数点后三位均为零,则计算机存储该数据时,存储的结果为1.0,即只保留了待存储数据小数点后第一位小数位的数值。
在一种可能的实施方式中,当计算机设备存储的数据包含至少两位小数时,在本申请实施例中,该数据是不具备转换为整型数据的特征的。如,待存储数据为1.010,为了保证待存储数据的有效性,本申请实施例所提供的方案无法将该数据(1.010)转化为整型数据进行存储。
因此,结合计算机存储数据时的特点,在一种可能的实施方式中,本申请实施例中整型转化条件为:初始数据类型为浮点型,且待存储数据包含一位小数,且小数位数值为零。
二、若小数位数值为零,则计算机设备确定待存储数据符合整型转化条件,并将待存储数据由浮点型转化为整型。
在一种可能的实施方式中,在计算机设备获取待存储数据的小数位数值之后,根据上述确定出的整型转化条件,需要判断该小数位数值是否为零,若小数位数值为零,则确定待存储数据符合整型转化条件,并将待存储数据由浮点型转化为整型。
在一个示意性的例子中,风电场数据监测系统中,由于风向监测点中风向的确定涉及复杂的地理位置等因素,因此该监测点的监测数据的初始数据类型预设为双精度浮点型(8byte存储),若存在部分监测数据(待存储数据)符合整型转化条件,则相较于用初始数据类型存储该监测数据的方式而言,将该监测数据转换为字节整型(1byte存储)后进行存储,可节省存储空间近90%。
步骤303,若初始数据类型为浮点型,且待存储数据不符合整型转化条件,则根据待存储数据的初始精度,将待存储数据由初始数据类型转换为目标数据类型。
在一种可能的实施方式中,若初始数据类型为浮点型,且待存储数据不符合整型转化条件,则计算机设备根据待存储数据的初始精度,对待存储数据作进一步的数据类型转换。
在一个示意性的例子中,风电场数据监测系统中,风向监测点数据的初始数据类型预先设置为双精度浮点型(8byte存储),若存在部分监测数据(待存储数据)的有效数据位数仅占了2byte,若计算机设备对该数据继续以双精度浮点型进行存储,显然会对数据库的存储空间造成浪费。
在一种可能的实施方式中,本步骤包括如下步骤,并用于解决上述示意性例子所涉及的问题。
一、若初始精度为双精度,则计算机设备将待存储数据由双精度转换为单精度,得到转换后数据。
在一种可能的实施方式中,初始精度为待存储数据初始数据类型所对应的最大有效数字位数。当待存储数据的初始数据类型为双精度浮点型,则待存储数据的初始精度为保留16位有效数字(十进制);当待存储数据的初始数据类型为单精度浮点型,则待存储数据的初始精度为保留8位有效数字(十进制)。
可选的,基于本申请实现节约数据库存储空间的技术效果,针对浮点型数据的数据类型转换,本申请仅包括双精度浮点型数据转为单精度浮点型数据,而不包括将单精度浮点型数据转换为双精度浮点型数据。
二、若转换后数据与待存储数据的小数位一致,则计算机设备将待存储数据由双精度浮点型转换为单精度浮点型。
由于计算机设备进行双精度浮点型数据转换为单精度浮点型数据时,易存在精度丢失的问题,因此,在一种可能的实施方式中,计算机设备需要对转换后数据的小数位进行检查,若转换后数据与待存储数据的小数位一致时,则确定将待存储数据的数据类型转换为单精度浮点型时未出现精度丢失问题。
在一个示意性的例子中,监测点的监测数据的初始数据类型预设为双精度浮点型(8byte存储),若存在部分监测数据(待存储数据)在不发生精度损失的情况下能够转化为单精度浮点型(4byte存储),则相较于用初始数据类型存储该监测数据的方式而言,将该监测数据转换为单精度浮点型后进行存储,可节省存储空间近50%。
根据步骤302与步骤303的内容,实现了浮点型数据的数据类型转换,即计算机设备将待存储数据由初始数据类型转换为目标数据类型,使得目标数据类型对应的数据长度小于初始数据类型对应的数据长度。
步骤304,将目标数据类型的待存储数据转化为二进制数据,并存储至数据库。
二进制是计算技术中广泛采用的一种数制,且当前的计算机系统使用的基本上是二进制系统。
在一种可能的实施方式中,计算机设备将目标数据类型的待存储数据转化为二进制数据,并存储至数据库。
步骤305,通过无损数据压缩算法对数据库中的二进制数据进行压缩。
在完成待存储数据的数据类型转换后,为了尽可能的提高数据压缩比例,在一种可能的实施方式中,计算机设备结合无损数据压缩算法对数据库中的二进制数据进行二次压缩。
其中,无损数据压缩是指通过编码的方式表示数据中的重复部分,以达到压缩的目的。当对压缩后的数据进行重构(或者叫做还原、解压缩),重构后的数据与原来的数据完全相同。本申请实施例中所涉及的无损数据压缩算法包括但不限于simple8b算法、游程编码(run-lengthencoding,rle)算法、raw编码算法、packed编码算法、浮点数异或(exclusiveor,xor)算法、snappy算法。
综上所述,本申请实施例中,当获取的待存储数据为浮点型数据时,计算机设备判断待存储数据是否符合整型转化条件,且在符合整型转化条件时将待存储数据由浮点型转化为整型,或,根据待存储数据的初始精度将不符合整型转化条件的待存储数据由初始数据类型转换为目标数据类型,使得目标数据类型对应的数据长度小于初始数据类型对应的数据长度,实现了浮点型数据的数据长度的减少;此外,在将待存储数据进行二进制序列化后存入数据库,并对数据库中的二进制数据进行无损数据压缩,使得压缩比例进一步提高,从而解决了在不损害数据有效性的前提下提高数据压缩比的问题。
请参考图4,其示出了本申请一个示例性实施例示出的数据存储方法的流程图,该示例性实施例由配置有数据库的计算机设备一侧执行,且该数据库的存储方法基于本申请实施例示出的数据存储方法。该方法包括:
步骤401,获取待存储数据。
本步骤的实施方式可以参考上述步骤201,本实施例在此不再赘述。
步骤402,若初始数据类型为整型,则计算机设备根据待存储数据的数值,将待存储数据由初始数据类型转换为目标数据类型。
整型数据相对于浮点型数据而言,存储时的数据长度较短,在一种可能的实施方式中,根据待存储数据的数值继续对待存储数据进行数据类型转化,则能够更加缩短待存储数据的数据长度。
整型包括字节整型(1byte)、短整型(2byte)、普通整型(4byte)和长整型(>4byte),其中,字节整型所包括的数值范围区间为[-128,127],短整型所包括的数值范围区间为[-32768,32767],普通整型所包括的数值范围区间为[-2147483648,2147483647],不在以上范围区间内的数据则属于长整型数据。
在一种可能的实施方式中,本步骤包括如下步骤。
一、计算机设备确定待存储数据的数值所处的目标数值区间。
由于待存储数据的初始数据类型是预先设置的,因此,存在待存储数据能够转化为更小存储字节的数据类型的情况。
在一个示意性的例子中,某一监测点的数据类型为普通整型,存在一待存储数据为156,若计算机设备将该待存储数据转化为短整型数据进行存储,可节省存储空间近50%。
在一种可能的实施方式中,计算机设备确定待存储数据的数值所处的目标数值区间,其中,目标数值区间包括上述字节整型、短整型、普通整型和长整型所包括的数值范围区间中的至少一种。
在一个示意性的例子中,某一监测点的数据类型为长整型,计算机设备获取该监测点的待存储数据a(数值为64),则待存储数据a的目标数值区间的候选区间包括字节整型、短整型和普通整型所包括的数值范围区间,基于本申请实现节约数据库存储空间的技术效果,计算机设备将字节整型所包括的数值范围区间确定为目标数值区间。
二、根据目标数值区间对应的目标整型数据长度,计算机设备将待存储数据转换为目标整型数据长度对应的目标整型。
可选的,目标整型包括上述字节整型、短整型、普通整型和长整型中的至少一种。
在上述示意性的例子中,待存储数据1的目标数值区间为字节整型所包括的数值范围区间,则计算机设备根据目标数值区间对应的目标整型数据长度(1byte),将待存储数据1转换为目标整型数据长度(1byte)对应的目标整型(字节整型)。
步骤403,将目标数据类型的待存储数据转化为二进制数据,并存储至数据库。
本步骤的实施方式可以参考上述步骤304,本实施例在此不再赘述。
步骤404,通过无损数据压缩算法对数据库中的二进制数据进行压缩。
本步骤的实施方式可以参考上述步骤305,本实施例在此不再赘述。
在一种可能的实施方式中,步骤302之后执行步骤402至步骤403的内容,即在待存储数据(上述实施例中的浮点型数据)符合整型转化条件后,计算机设备根据待存储数据的数值,将待存储数据由初始数据类型转换为目标数据类型,并对转换后的待存储数据转化为二进制数据存入数据库,并对数据库中的二进制数据进行无损数据压缩。
综上所述,本申请实施例中,当获取的待存储数据为整型数据时,计算机设备确定待存储数据的数值所处的目标数值区间,并根据目标数值区间对应的目标整型数据长度,将待存储数据转换为目标整型数据长度对应的目标整型,使得目标数据类型对应的数据长度小于初始数据类型对应的数据长度,相较于相关技术中直接将待整型数据存储入数据库的方式,本申请实施例在存储数据之前通过数据类型转换的方法,极大地提高了整型数据的压缩效果,进一步节约了数据库的存储空间。
请参考图5,其示出了本申请一个示例性实施例示出的数据存储方法的流程图,该示例性实施例由配置有数据库的计算机设备一侧执行,且该数据库的存储方法基于本申请实施例示出的数据存储方法。该方法包括:
步骤501,获取待存储数据。
本步骤的实施方式可以参考上述步骤201,本实施例在此不再赘述。
在一种可能的实施方式中,若待存储数据属于预设数据,则执行步骤502;若待存储数据不属于预设数据,则执行步骤505。
步骤502,若待存储数据属于预设数据,则根据预设映射关系将待存储数据转换为对应的枚举值,并将枚举值存储至数据库。
实际的数据监测系统中,包括为预设数据的待存储数据,如每个监测点的类别、监测时间、监测距离等在监测过程中较为固定的数据。若在数据采集的过程中,大量重复出现上述预设数据,一定程度上也存在浪费数据库存储空间的问题。
在一种可能的实施方式中,计算机设备根据预设映射关系将复杂或存储时所占字节较大的预设数据转化为对应的枚举值,并将转化后的枚举值存储至数据库。
可选的,该映射关系可以是用户自定义的映射关系,也可以是计算机设备中预先存储的映射关系模板,本申请实施例对此不做限定。
在一个示意性的例子中,数据监测系统存在部分固定数值,如220.0v交流电压等,若计算机设备对固定数值直接存储会造成数据库存储空间的浪费,此时,计算机设备可以将该交流电压对应的数据映射为整数1,则整数1即为对应的枚举值,将整数1存储至数据库。其中,交流电压数据对应的初始数据类型为浮点型,通过预设映射关系转化为枚举值后,该交流电压的数据类型转化为了整型,一定程度上节约了数据库的存储空间。
在另一个示意性的例子中,实际应用过程中开关量类型的数据普遍存在,此时,开或者关可以用一个bit进行映射,开映射为1,关映射为0,即计算机设备将一个整型或者布尔型数据转换为一个bit进行存储,也一定程度上节约了数据库的存储空间。
在一种可能的实施方式中,计算机设备将枚举值转换为二进制数据存储至数据库,并通过无损数据压缩算法对数据库中的二进制数据进行压缩。
在一种可能的实施方式中,步骤502之后还包括步骤503和步骤504。
步骤503,根据查询请求从数据库中获取查询数据。
在一种可能的实施方式中,计算机设备将待存储数据存储至数据库,并在对待存储数据有需求的情况下通过查询请求进行高效的数据查询。
步骤504,若查询数据中包含枚举值,则根据预设映射关系获取枚举值对应的数据。
其中,在预设数据存储至数据库之前,计算机设备已根据预设映射关系将预设数据转化为枚举值,并存储至数据库,因此,在一种可能的实施方式中,用户在计算机设备的查询通道键入枚举值,计算机设备根据预设映射关系对应查找出所键入的枚举值对应的预设数据。
在步骤502中所示出的示意性例子中,用户可通过在计算机设备所提供的数据库的查询通道中键入整数1,来查询并获取该整数1对应的预设数据,即为交流电压220.0v。
然而,值得注意的是,在确定预设数据的映射关系的过程中,计算机设备不能够将多个预设数据映射为相同枚举值,否则在数据库中通过键入枚举值查询数据时,会出现查询出多个预设数据的结果,从而无法得到用户想要的目标查询数据。
在一种可能的实施方式中,上述多个预设数据映射为相同枚举值的问题不包括用户自定义的情况,即不包括用户自定义多个预设数据为相同枚举值的情况。
步骤505,若待存储数据不属于预设数据,则将待存储数据由初始数据类型转换为目标数据类型。
相应的,若待存储数据不属于步骤502中提到的预设数据,在一种可能的实施方式中,计算机设备继续判断该待存储数据是否为整型数据,或,浮点型数据,即在步骤505之后继续执行图3和图4所示的数据存储方法。
综上所述,本申请实施例中,当获取的待存储数据为预设数据时,计算机设备根据预设映射关系将待存储数据转换为对应的枚举值,若待存储数据不属于预设数据,则根据上述实施例中示出的数据存储方法将待存储数据由初始数据类型转换为目标数据类型。相较于相关技术中直接将大量预设数据存储入数据库的方式,本申请实施例提供枚举值映射方法,通过预设映射关系将大量预设数据转换为枚举数值进行存储,进一步节约了数据库的存储空间。
上述各个实施例中,分别列举了待存储数据为不同数据类型时的数据存储方法,下面请参考图6,图6通过流程图的方式将上述各个实施例所提供的技术方案进行了结合,使得对本申请实施例所示出的数据存储方法作了进一步更为详细与完整的描述。
步骤601,获取待存储数据。
在一种可能的实施方式中,步骤601之后执行步骤602。
步骤602,判断待存储数据是否可以转换为枚举值。
在一种可能的实施方式中,计算机设备执行第一次判断,即判断待存储数据是否能够转换为枚举值,若能够转换,则执行步骤603,若不能够转换,则继续执行第二次判断。
步骤603,将待存储数据转换为枚举值。
在一种可能的实施方式中,步骤603之后执行步骤610。
步骤604,判断待存储数据是整型数据还是浮点型数据。
在一种可能的实施方式中,计算机设备执行第二次判断,即判断待存储数据是整型数据还是浮点型数据,若为整型数据,则执行步骤605,若为浮点型数据,则继续执行第三次判断。
步骤605,根据待存储数据的数值调整其整型数据长度。
在一种可能的实施方式中,步骤605之后执行步骤610。
步骤606,判断待存储数据是否可以转换为整型。
在一种可能的实施方式中,计算机设备执行第三次判断,即判断待存储数据是否可以转换为整型,若能够转换,则执行步骤605,若不能够转换,则继续执行第四次判断。
步骤607,判断待存储数据是单精度浮点型数据还是双精度浮点型数据。
在一种可能的实施方式中,计算机设备执行第四次判断,即判断待存储数据是单精度浮点型数据还是双精度浮点型数据,若为单精度浮点型数据,则执行步骤610,若为双精度浮点型数据,则继续执行第五次判断。
步骤608,判断待存储数据是否能够转换为单精度浮点型数据。
在一种可能的实施方式中,计算机设备执行第五次判断,即判断待存储数据是否能够转换为单精度浮点型数据,若能够转换,则执行步骤609,若不能够转换,则执行步骤610。
步骤609,将待存储数据转换为单精度浮点型数据。
在一种可能的实施方式中,步骤609之后执行步骤610。
步骤610,将进行数据类型转换后的待存储数据(包括无法进行数据类型转换的待存储数据)转换为二进制数据。
在一种可能的实施方式中,步骤610之后执行步骤611。
步骤611,将二进制数据存储至数据库。
在一种可能的实施方式中,步骤611之后执行步骤612。
步骤612,通过无损数据压缩算法对数据库中的二进制数据进行压缩。
综上所述,本申请实施例中,计算机设备根据待存储数据的不同初始数据类型以及判断结果,将待存储数据转换成相应的目标数据类型下的数据,从而实现不同数据类型的数据压缩,相较于相关技术中直接将待存储数据存储入数据库的方式,本申请实施例提供的数据存储方法,通过对待存储数据进行数据类型转换、并对存储至数据库的待存储数据进行无损数据压缩,很大程度上节约了数据库的存储空间。
请参考图7,其示出了本申请一个实施例提供的数据存储装置的结构框图。该装置可以通过软件、硬件或者两者的结合实现成为计算机设备的全部或一部分。该装置包括:
第一数据获取模块701,用于获取待存储数据;
数据转换模块702,用于将所述待存储数据由初始数据类型转换为目标数据类型,所述目标数据类型对应的数据长度小于所述初始数据类型对应的数据长度;
数据存储模块703,用于将所述目标数据类型的所述待存储数据存储至数据库。
所述数据转换模块702,包括:
第一转换子模块,用于若所述初始数据类型为浮点型,且所述待存储数据符合整型转化条件,则将所述待存储数据由浮点型转化为整型;
第二转换子模块,用于若所述初始数据类型为浮点型,且所述待存储数据不符合所述整型转化条件,则根据所述待存储数据的初始精度,将所述待存储数据由所述初始数据类型转换为所述目标数据类型。
可选的,所述第一转换子模块,用于若所述初始数据类型为浮点型,且所述待存储数据包含一位小数,则获取所述待存储数据的小数位数值;
若所述小数位数值为零,则确定所述待存储数据符合所述整型转化条件,并将所述待存储数据由浮点型转化为整型。
可选的,所述第二转换子模块,用于若所述初始精度为双精度,则将所述待存储数据由双精度转换为单精度,得到转换后数据;
若所述转换后数据与所述待存储数据的小数位一致,则将所述待存储数据由双精度浮点型转换为单精度浮点型。
所述数据存储模块703,包括:
第三转换子模块,用于若所述初始数据类型为整型,则根据所述待存储数据的数值,将所述待存储数据由所述初始数据类型转换为所述目标数据类型。
可选的,所述第三转换子模块,用于确定所述待存储数据的数值所处的目标数值区间;
根据所述目标数值区间对应的目标整型数据长度,将所述待存储数据转换为所述目标整型数据长度对应的目标整型,所述目标整型包括字节整型、短整型、普通整型和长整型中的至少一种。
可选的,所述装置,还包括:
枚举值存储模块,用于若所述待存储数据属于预设数据,则根据预设映射关系将所述待存储数据转换为对应的枚举值,并将所述枚举值存储至所述数据库;
所述数据存储模块703,包括:
第四转换子模块,用于若所述待存储数据不属于所述预设数据,则将所述待存储数据由所述初始数据类型转换为所述目标数据类型。
可选的,所述装置,还包括:
数据查询模块,用于根据查询请求从所述数据库中获取查询数据;
第二数据获取模块,用于若所述查询数据中包含所述枚举值,则根据所述预设映射关系获取所述枚举值对应的数据。
所述数据存储模块703,包括:
第五转换子模块,用于将所述目标数据类型的所述待存储数据转化为二进制数据,并存储至所述数据库;
可选的,所述装置,还包括:
数据压缩模块,用于通过无损数据压缩算法对所述数据库中的二进制数据进行压缩。
请参考图8,其示出了本申请一个示例性实施例提供的计算机设备800构方框图。该计算机设备800可以是智能手机、平板电脑、电子书、便携式个人计算机等安装并运行有应用程序的电子设备。本申请中的计算机设备800可以包括一个或多个如下部件:处理器810、存储器820和屏幕830。
处理器810可以包括一个或者多个处理核心。处理器810利用各种接口和线路连接整个计算机设备800内的各个部分,通过运行或执行存储在存储器820内的指令、程序、代码集或指令集,以及调用存储在存储器820内的数据,执行计算机设备800的各种功能和处理数据。可选地,处理器810可以采用数字信号处理(digitalsignalprocessing,dsp)、现场可编程门阵列(field-programmablegatearray,fpga)、可编程逻辑阵列(programmablelogicarray,pla)中的至少一种硬件形式来实现。处理器810可集成中央处理器(centralprocessingunit,cpu)、图像处理器(graphicsprocessingunit,gpu)和调制解调器等中的一种或几种的组合。其中,cpu主要处理操作系统、用户界面和应用程序等;gpu用于负责屏幕830所需要显示的内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器810中,单独通过一块通信芯片进行实现。
存储器820可以包括随机存储器(randomaccessmemory,ram),也可以包括只读存储器(read-onlymemory)。可选地,该存储器820包括非瞬时性计算机可读介质(non-transitorycomputer-readablestoragemedium)。存储器820可用于存储指令、程序、代码、代码集或指令集。存储器820可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于实现至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现上述各个方法实施例的指令等,该操作系统可以是安卓(android)系统(包括基于android系统深度开发的系统)、苹果公司开发的ios系统(包括基于ios系统深度开发的系统)或其它系统。存储数据区还可以存储计算机设备800在使用中所创建的数据(比如电话本、音视频数据、聊天记录数据)等。
屏幕830可以为触摸显示屏,该触摸显示屏用于接收用户使用手指、触摸笔等任何适合的物体在其上或附近的触摸操作,以及显示各个应用程序的用户界面。触摸显示屏通常设置在计算机设备800的前面板。触摸显示屏可被设计成为全面屏、曲面屏或异型屏。触摸显示屏还可被设计成为全面屏与曲面屏的结合,异型屏与曲面屏的结合,本申请实施例对此不加以限定。
所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集经配置以由一个或者一个以上处理器执行,以实现上述数据存储方法中各个步骤的功能。
本申请实施例还提供一种计算机可读存储介质,该存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述各个实施例提供的数据存储方法。
可选地,该计算机可读存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取记忆体(ram,randomaccessmemory)、固态硬盘(ssd,solidstatedrives)或光盘等。其中,随机存取记忆体可以包括电阻式随机存取记忆体(reram,resistancerandomaccessmemory)和动态随机存取存储器(dram,dynamicrandomaccessmemory)。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。