CN107545021A - 一种数据存储方法及装置 - Google Patents
一种数据存储方法及装置 Download PDFInfo
- Publication number
- CN107545021A CN107545021A CN201710326239.1A CN201710326239A CN107545021A CN 107545021 A CN107545021 A CN 107545021A CN 201710326239 A CN201710326239 A CN 201710326239A CN 107545021 A CN107545021 A CN 107545021A
- Authority
- CN
- China
- Prior art keywords
- data
- file
- target
- row
- bitmap index
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种数据存储方法及装置,涉及计算机技术领域,其中,上述方法包括:获得待存储至数据库的各条数据,其中,每条数据中包含数据库的预设列名对应的数值;从所述各条数据中确定至少一个数据列,生成至少一个数据列文件,每个数据列文件中存储所述至少一数据列中的一个数据列;生成各个数据列文件的位图索引文件;存储各个数据列文件、各个位图索引文件、目标对应关系,其中,所述目标对应关系为:每一数据列文件与该数据列文件的位图索引文件、该数据列文件存储的数据列对应的预设列名三者之间的对应关系。应用本申请实施例提供的方案存储数据,能够很好的支持针对数据列文件的高并发访问。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种数据存储方法及装置。
背景技术
随着互联网技术的快速发展,网络设备针对网络流量数据的存储、检索成为当前网络管理的主要需求之一。由于网络设备资源有限,MYSQL、ORACLE等大型数据库往往很难在网络设备侧部署。基于此,现有技术中一般采用轻量级关系型数据库进行网络流量数据的存储、检索等等。
基于轻量级关系型数据库进行数据存储时,网络设备接收到网络流量数据后,一般将网络流量数据存储至一个单一的数据库文件中,用户存在数据库访问需求时,对上述单一的数据库文件进行访问。实际应用中为保证用户访问数据库文件时产生的数据正确,往往仅仅支持一个或者有限数量的用户同时访问同一数据库文件,而随着用户需求的改变网络流量数据的数据量越来越大,这样的话高并发访问数据库文件的需求越来越旺盛,上述数据存储方式显然难以满足针对数据库的高并发访问需求。
发明内容
本申请实施例公开了一种数据存储方法及装置,以满足针对数据库文件的高并发访问需求。
为达到上述目的,本申请实施例公开了一种数据存储方法,所述方法包括:
获得待存储至数据库的各条数据,其中,每条数据中包含数据库的预设列名对应的数值;
从所述各条数据中确定至少一个数据列,生成至少一个数据列文件,其中,每个数据列文件中存储所述至少一数据列中的一个数据列;
生成各个数据列文件的位图索引文件;
存储各个数据列文件、各个位图索引文件、目标对应关系,其中,所述目标对应关系为:每一数据列文件与该数据列文件的位图索引文件、该数据列文件存储的数据列对应的预设列名三者之间的对应关系。
为达到上述目的,本申请实施例公开了,一种数据存储装置,所述装置包括:
数据获得模块,用于获得待存储至数据库的各条数据,其中,每条数据中包含数据库的预设列名对应的数值;
文件获得模块,用于从所述各条数据中确定至少一个数据列,生成至少一个数据列文件,其中,每个数据列文件中存储所述至少一数据列中的一个数据列;
文件生成模块,用于生成各个数据列文件的位图索引文件;
信息存储模块,用于存储各个数据列文件、各个位图索引文件、目标对应关系,其中,所述目标对应关系为:每一数据列文件与该数据列文件的位图索引文件、该数据列文件存储的数据列对应的预设列名三者之间的对应关系。
由以上可见,本申请实施例提供的方案中,获得待存储至数据库的各条数据后,从各条数据中确定至少一个数据列,生成至少一个数据列文件,再生成各个数据列文件的位图索引文件,并存储各个数据列文件、各个位图索引文件、各个数据列文件与其位图索引文件之间的对应关系。与现有技术相比,应用本申请实施例提供的方案进行数据存储时,数据被存储在不同的数据列文件中,而非存储在单一的数据库文件中,由于文件数量增多,所以能够很好的支持针对数据列文件的高并发访问需求。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的第一种数据存储方法的流程示意图;
图2为本申请实施例提供的一种位图索引文件生成方法的流程示意图;
图3为本申请实施例提供的第二种数据存储方法的流程示意图;
图4为本申请实施例提供的第三种数据存储方法的流程示意图;
图5为本申请实施例提供的第四种数据存储方法的流程示意图;
图6为本申请实施例提供的第一种数据存储装置的结构示意图;
图7为本申请实施例提供的一种位图索引文件生成装置的结构示意图;
图8为本申请实施例提供的第二种数据存储装置的结构示意图;
图9为本申请实施例提供的第三种数据存储装置的结构示意图;
图10为本申请实施例提供的第四种数据存储装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例提供的第一种数据存储方法的流程示意图,该方法包括:
S101:获得待存储至数据库的各条数据。
可以理解的是,在数据库中存储数据时,最终以数据库文件的形式展现,一个数据库文件中可以包含一张或者多张数据表。在一张数据表中,横向可以认为是一条一条的数据,纵向可以认为是不同的列,这样可以认为数据表中的每条数据所包含的数据为:与各个列相对应的具体数值。例如,一个列为设备标识列,列名可以为“设备标识”,一条数据中表示设备标识的数值为“5”,则与该列相对应的具体数值为:5。
基于上述情况,上述获得的每条数据中包含数据库的预设列名对应的数值,也就是与列名为预设列名的各个列相对应的具体数值。
上述预设列名的数量可以是1、2、3、10等等。
具体的,上述获得的数据可以为网络流量数据,当然还可以是其他类型需要在数据库中进行存储的数据,本申请并不对此进行限定。
另外,当上述获得的数据为网络流量数据时,本实施例的执行主体可以理解为:网络设备。
在本申请的一种实现方式中,本步骤所获得的数据可以是从外部接收的数据,例如,通过网络接收的网络流量数据等等,另外,本步骤所获得的数据还可以是本地或者其他设备的数据库文件中存储的数据,例如,本地轻量型关系数据库文件中存储的数据等。
S102:从各条数据中确定至少一个数据列,生成至少一个数据列文件。
其中,每个数据列文件中存储上述至少一数据列中的一个数据列,每一数据列包含的数值对应于同一列名。
获得的所有数据中对应于同一列名的数值形成一列,可以将这一列称之为数据列,也就是一个数据列可以为上述所形成一列的全部。
另外,由于上述获得的数据的条数可能很多,例如,100万条甚至更多条,这样所有上述获得的数据中与每一预设列名相对应的数值的数量会很大,本步骤中确定数据列后还需要对数据列进行存储,形成文件,为防止所形成的文件过大,还可以将上述形成的一列进行划分得到一个以上数据列,也就是一个数据列还可以是上述所形成一列的一部分。
具体的,为便于识别,上述各个数据列文件可以基于其中存储的数据列所对应的列名进行命名。
在本申请的一种实现方式中,上述数据列文件可以为二进制文件。
S103:生成各个数据列文件的位图索引文件。
位图索引是一种使用位图的特殊数据库索引,主要是针对具有大量相同值的列而创建的。
位图索引文件可以理解为:存储位图索引而形成的文件,其中存储有位图索引的相关信息,这些信息可以是位图索引的原始信息,还可以是对位图索引进行压缩后形成的压缩信息,本申请并不对此进行限定。
生成位图索引文件的具体方式详见图2所示实施例部分,这里暂不详述。
S104:存储各个数据列文件、各个位图索引文件、目标对应关系。
其中,上述目标对应关系为:每一数据列文件与该数据列文件的位图索引文件、该数据列文件存储的数据列对应的预设列名三者之间的对应关系。
由于数据列文件是存储数据列而生成的,且一个数据列文件中仅存储一个数据列,所以数据列文件与数据列存在对应关系,又由于数据列是按照列名确定的,所以数据列与列名存在对应关系,进而可以认为数据列文件与列名之间存在对应关系。
数据列文件又与索引文件存在对应关系,所以以数据列文件为基准,可以得到每一数据列文件、该数据列文件的索引文件、该数据列文件对应的列名三者之间的对应的关系。
由于生成各个数据列文件的位图索引文件时,所采用的方式是相同的,所以下面以生成各个数据列文件中一个数据列文件的位图索引文件为例进行说明。
在以下说明如何生成一个数据列文件的位图索引文件的过程中,结合具体实例进行详细说明。
该具体实例中,假设,目标数据列文件中所存储数据列中的数值如下:
3.0、3.1、3.2、3.1、3.3、3.7、3.5、3.5、3.8、3.8
参见图2,图2为本申请实施例提供的一种位图索引文件生成方法的流程示意图,该方法包括:
S201:确定目标数据列文件的位图索引的至少两个键值。
其中,将上述至少两个键值从小到大进行排列时,形成等差数列,该等差数列中的每两个相邻的键值形成一个位图段。
上述目标数据列文件为:前述各个数据列文件中的一个。
目标数据列文件的位图索引的键值受数据精度、起始键值、终止键值三者影响。
其中,数据精度一般根据用户的实际需求确定,用户对数据精度的要求越高,确定出的键值数量越多,相应的位图段的数量也就越多,相反,用户对数据精度的要求越低,确定出的键值数量越少,相应的位图段的数量也就越少。
一种实现方式中,起始键值和终止键值可以是根据开发人员收集的实际应用场景中的数据或者设计需求等确定的,例如,起始键值可以为:0,终止键值可以为:网络设备对应的一个数据点可能的最大数据流量值等等。
另一种实现方式中,起始键值可以是依据目标数据列文件中的最小数值确定的,终止键值可以是依据目标数据列文件中的最大数值确定的。例如,起始键值可以是目标数据列文件中的最小数值,或者小于该最小数值的值;终止键值可以是目标数据列文件中的最大数值,或者大于该最大数值的值。
具体的,可以按照以下表达式确定位图段的数量:
(终止键值-起始键值)/数据精度。
确定位图段的数量后,获得终止键值和起始键值之间的区间被划分成的上述数量个位图段,并将这些位图段的端点确定为目标数据列文件的位图索引的键值。
在前述具体实例中,假设,数据精度为:0.2,则起始键值可以为:3.0,终止键值可以为:3.8,位图段的数量为:(3.8-3.0)/0.2=4,目标数据列文件对应的位图段可以包括:
[3.0,3.2)、[3.2,3.4)、[3.4,3.6)、[3.6,3.8]
则目标数据列文件的位图索引的键值包括:3.0、3.2、3.4、3.6、3.8。
S202:根据上述至少两个键值确定的位图段,获得目标数据列文件存储的数据列包含的数值的位图索引值,并根据所获得的位图索引值生成目标数据列文件的目标位图索引。
具体的,上述目标位图索引是由目标数据列文件存储的数据列包含的数值的位图索引值依次连接构成的。
一个数值的位图索引值,用于表示该数值所在的位图段。位图索引值的比特位数量与由上述至少两个键值确定的位图段的数量相等,每一比特位表示一个比特位。当判断数值位于某一位图段时,将位图索引值中该位图段对应的比特位设置为第一预设值,如,1,其他比特位设置为第二预设值,如,0。
基于上述描述,目标位图索引可以为二进制位图索引。
在前述具体实例中,位图段的数量为:4,所以目标数据列文件存储的数据列包含的每一数值的位图索引值包含4个比特位,各个数值的位图索引值如下:
3.0:位于位图段[3.0,3.2)内,其位图索引值为:0001;
3.1:位于位图段[3.0,3.2)内,其位图索引值为:0001;
3.2:位于位图段[3.2,3.4)内,其位图索引值为:0010;
3.1:位于位图段[3.0,3.2)内,其位图索引值为:0001;
3.3:位于位图段[3.2,3.4)内,其位图索引值为:0010;
3.7:位于位图段[3.6,3.8]内,其位图索引值为:1000;
3.5:位于位图段[3.4,3.6)内,其位图索引值为:0100;
3.5:位于位图段[3.4,3.6)内,其位图索引值为:0100;
3.8:位于位图段[3.6,3.8]内,其位图索引值为:1000;
3.8:位于位图段[3.6,3.8]内,其位图索引值为:1000;
则目标位图索引为:1000 1000 0100 0100 1000 0010 0001 0010 0001 0001。
S203:对目标位图索引进行压缩处理,获得目标位图索引的位向量。
由于位图索引是以二进制表示的,所以每一比特位的取值为0或者1,基于位图索引的这一特点,位图索引中易出现取值连续为0或者取值连续为1的比特位,基于此可以以取值连续相同的比特位的数量对位图索引进行压缩,以减少位图索引占用的存储空间。
具体的,可以通过以下步骤A-步骤C对目标位图索引进行压缩处理,获得各目标位图索引的位向量:
A、确定目标位图索引中取值连续相同的比特位的最大数量。
B、根据上述最大数量确定对目标位图索引进行压缩处理后一个分段的目标段长。
对目标位图索引进行压缩后,得到的压缩数据是以分段的形式存在的,且各个分段的段长相等,为保证取值连续相同的比特位的数量能够尽可能的通过一个分段表示,所以可以根据上述最大数量确定一个分段的段长。
一种实现方式中,可以按照以下公式确定对目标位图索引进行压缩处理后一个分段的目标段长:
2(Slen-2)-1=floor(Nummax/(Slen-1))
其中,Slen表示目标段长,Nummax表示上述最大数量,floor()表示取小于或等于操作数的最大整数。
C、按照以下方式对目标位图索引进行压缩处理,获得目标位图索引的位向量:
C1、设置初始位置为目标位图索引的第一个比特位,其中,目标位图索引为:所生成位图索引中的一个;
C2、从初始位置开始确定目标位图索引中取值连续相同的比特位的目标数量;
C3、判断目标数量是否小于第一数值,其中,第一数值等于目标段长减1,若为是,执行C4,否则,执行C5;
C4、生成包含源码标识、源码比特位的源码段,作为目标位图索引的一个位向量,其中,源码比特位为:目标位图索引中从起始位置开始目标数量个比特位;
上述源码标识一般是预先设定的,其取值可以为:0,表示该分段中包含的信息为目标位图索引中的原始信息,未经过压缩。
可以设定该源码标识在源码段中的位置,例如,设置其位于源码段的第一个比特位等等,然后剩余比特位为源码比特位。
C5、根据目标段长更新目标数量,对目标位图索引中从起始位置开始目标数量个比特位进行压缩处理,获得压缩后比特位,并生成包含压缩标识、被压缩位取值标识、压缩后比特位的编码段,作为目标位图索引的一个位向量。
其中,上述被压缩位取值标识为:用于表示进行压缩处理的比特位取值的标识。
上述压缩标识一般也是预先设定的,其取值可以为:1,表示该分段中包含的信息为对目标位图索引中的原始信息进行压缩后的信息。
需要说明的是,上述源码标识的取值和压缩标识的取值并不仅限于此,只要两者不同即可,例如,源码标识的取值为:1,压缩标识的取值为:0。
由于目标位图索引是以二进制表示的,所以每一比特位的取值为0或者1,对目标位图索引中的信息进行压缩时,可能是对取值连续为1的比特位进行压缩,还有可能是对取值连续为0的比特位进行压缩,为了能够准确的从位向量中恢复出目标位图索引,需在位向量中记录被压缩的是连续取值为0的比特位,还是连续取值为1的比特位,也就是上述被压缩位取值标识。
具体的,当被压缩的是连续取值为0的比特位时,上述被压缩取值标识可以为:0,当被压缩的是连续取值为1的比特位时,上述被压缩取值标识可以为:1。
另外,可以设置压缩标识、被压缩位取值标识在编码段中的位置,例如,设置压缩标识位于编码段的第一个比特位,被压缩位取值标识位于编码段的第二个比特位等,编码段的其他位为压缩后比特位。
上述压缩后比特位可以理解为:对比特位进行压缩后,得到的压缩数据的二进制表示方式对应的各个比特位。
在本申请的一种实现方式中,当按照以下公式确定对目标位图索引进行压缩处理后一个分段的目标段长时:
2(Slen-2)-1=floor(Nummax/(Slen-1))
可以按照以下表达式更新上述目标数量:
Num’=min{floor(Num/(Slen-1))*(Slen-1),((2(Slen-2)-1)*(Slen-1))}
其中,Num表示更新前的目标数量,Num’表示更新后的目标数量,min{,}表示取两个操作数中的最小值;
对目标位图索引中从起始位置开始目标数量个比特位进行压缩处理,获得压缩后比特位时,可以按照以下表达式确定中间数值Cbit:
Cbit=Num’/(Slen-1);
将上述Cbit转换为二进制比特位,并将得到的二进制比特位作为上述压缩后比特位。
C6、将初始位置向后移动目标数量个比特位,在目标位图索引中还存在未经压缩处理的比特位时,返回C2步骤。
相应的,目标位图索引中不存在未经压缩处理的比特位时,认为成功获得了目标位图索引的位向量。该位向量即为按照各个源码端、编码端的获得顺序形成的向量。
S204:根据所获得的位向量生成目标数据列文件的位图索引文件。
一种实现方式中,根据所获得的位向量生成目标数据列文件的位图索引文件时,可以确定文件头信息、目标数据列文件所包含数值的行数,确定所获得的位向量在位图索引文件中的存储位置,生成包含上述文件头信息、目标段长、行数、键值、键值的数量、存储位置以及所获得的位向量的文件,作为目标数据列文件的位图索引文件。
上述文件头信息可以是开发人员根据实际需要设定的。
另外,由于对位图索引进行压缩后生成的位向量长度不等,所以后期使用位图索引文件时,无法通过简单计算从位图索引文件中确定出各个位向量的起始位置,为此需在位图索引文件中存储各个位向量在位图索引文件中的存储位置。
由以上可见,上述各个实施例提供的方案中,获得待存储至数据库的各条数据后,从各条数据中确定至少一个数据列,生成至少一个数据列文件,再生成各个数据列文件的位图索引文件,并存储各个数据列文件、各个位图索引文件、各个数据列文件与其位图索引文件之间的对应关系。与现有技术相比,应用上述实施例提供的方案进行数据存储时,数据被存储在不同的数据列文件中,而非存储在单一的数据库文件中,由于文件数量增多,所以能够很好的支持针对数据列文件的高并发访问需求。
在本申请的一种实现方式中,参见图3,提供了第二种数据存储方法的流程示意图,与前述实施例相比,本实施例中,在获得待存储至数据库的各条数据(S101)后,还包括:
S105:确定各条数据对应的数据分区,并确定用于存储各个数据分区所包含数据的文件夹。
由于S101中获得的数据的条数可能会较多、数据量可能会较大,且不同的数据还可能属于不同的数据表,鉴于此,为便于数据存储以及后期的数据查询,可以对S101中获得的数据进行数据分区,按照数据分区存储在不同的文件夹中。
具体的,可以按照数据所属的数据表确定各条目标数据对应的数据分区,例如,属于同一数据表的数据对应同一数据分区等等。
另外,一个数据分区可以对应一个文件夹,当然也可以对应多个文件夹,本申请并不对此进行限定。
从各条数据中确定至少一个数据列,生成至少一个数据列文件(S102),包括:
S102A:从对应于同一数据分区的各条数据中确定至少一个数据列,生成至少一个数据列文件,并获得数据列与数据分区的对应关系。
存储各个数据列文件、各个位图索引文件、目标对应关系(S104),包括:
S104A:根据数据列与数据分区之间的对应关系,将各个数据列文件、各个位图索引文件、目标对应关系存储至相应数据分区对应的文件夹中。
具体的,对于每一数据列文件,上述相对应数据分区为:与该数据列文件所存储数据列对应的目标数据存在对应关系的数据分区。
一种实现方式中,可以将上述三者之间的对应关系存储至相应数据分区对应的文件夹中特定文件中,例如,配置文件。
上述特定文件中除了可以存储上述三者之间的对应关系外,还可以存储分区的名称、各个数据列文件中所包含数值的行数、数据列文件的数量等等。
由以上可见,本实施例提供的方案中,以数据分区为单位对数据列文件进行存储,能够使得对数据库文件进行操作时,可以直接从相应文件夹中获得数据,提高数据处理效率。
可以理解的是,对于单台设备而言其资源是有限的,以网络设备为例,随着其所接收网络流量增加,需要存储的数据越来越多,网络设备易出现资源紧张的情况,为此在本申请的一种实现方式中,考虑将用于存储各个数据分区所包含数据的文件夹设置于分布式存储系统的各台存储服务器中。具体的,确定用于存储各个数据分区所包含数据的文件夹时,获得分布式存储设备的负载状态,根据所获得的负载状态,从分布式存储设备中确定用于存储各个数据分区所包含数据的存储设备,基于每一数据分区对应的存储设备确定用于存储该数据分区所包含数据的文件夹,并记录数据分区、存储设备、文件夹三者之间的对应关系。
由于分布式存储系统相对于单台设备资源丰富、数据处理能力及可扩展性较强,将数据列文件存储与分布式存储系统中,能够有效降低执行主体(例如,网路设备)的压力。
对数据库文件的操作通常包括:数据插入操作、数据查询操作、数据删除操作等等,下面从对数据库文件进行操作的角度对本申请实施例提供的数据存储方法进行进一步介绍。
一、数据插入
一种实现方式中,在按照前述各个实施例提供的方案进行数据存储时,可以按照以下方式插入数据:
接收针对待插入数据的插入指令,根据插入指令确定待插入数据对应的数据分区,作为待插入数据分区,以列为基准,将待插入数据分别存储至预设大小的数组中,并缓存各个数组,在满足硬盘写入条件时,将各个数组中的数据分别插入待插入数据分区对应文件夹的数据列文件中,并根据插入数据的数据列文件中所插入的数据更新该数据列文件的位图索引文件。
具体的,上述插入指令中可以携带待插入数据的数据表的标识等信息,由于数据分区可以是以数据表为单位划分的,所以确定待插入数据分区时,可以根据插入指令中携带的上述数据表的标识确定待插入数据分区。
由于受设备侧资源限制,一次写入缓存的数据量不能过大,因此上述预设大小可以是根据具体设备确定的。这样可以认为数组的大小是预先设定的,而待插入数据的条数一般是不确定的,当一个数组不能完全存储待插入数据的一个数据列时,可以分成多个数组进行存储。
上述硬盘写入条件可以是:判断存储至缓存中的数组的数据量是否达到预设数量阈值,若为是,可以认为满足硬盘写入条件;
上述硬盘写入条件还可以是:判断缓存中所存储数组的最大存储时间是否大于预设时间阈值,若为是,可以认为满足硬盘写入条件。
在满足硬盘写入条件时,才将各个数组从缓存存储至硬盘中,能够有效防止频繁访问硬盘,减少数据插入过程对I/O等资源的需求。
具体的,在将各个数组中的数据分别插入相应的数据列文件中时,可以将各个数组中的数据插入相应的数据列文件的文件尾。
另外,由于本申请实施例提供的数据存储方法中,进行数据存储时,除了存储数据列文件外,还存储了各个数据列文件的位图索引文件,所以,在进行数据插入时,除了需要将上述各个数组中的数据分别插入相应的数据列文件中外,还需要根据各个数组中的数据更新相应数据列文件的位图索引文件。
以将各个数组中的数据插入待插入数据分区对应文件夹的数据列文件的文件尾为例,一种实现方式中可以按照以下方式更新插入数据的数据列文件的位图索引文件:
以一个插入数据的数据列文件为例,为便于描述该数据列文件称之为:目标插入数据列文件,其位图索引文件称之为:目标插入位图索引文件,插入目标插入文件的数据称之为:待插入数据。
从目标待插入位图索引文件中解析出段长、键值、键值的数量等信息;
根据上述解析出的键值以及键值数量,确定位图段;
根据所确定的位图段,生成待插入数据中每一数值的位图索引值,进而得到待插入数据的位图索引;
按照前述步骤C所述的方法获得待插入数据的位向量;
将所获得的位向量插入目标插入位图索引文件,并将上述所获得的位图索引文件在目标插入位图索引文件中的存储位置更新至目标插入位图索引文件。
二、数据查询
一种实现方式中,在按照前述各个实施例提供的方案进行数据存储时,可以按照以下方式查询数据:
接收针对待查询条件的查询指令,其中,查询指令中携带待查询列的列名和查询条件;根据待查询列的列名,确定待查询数据分区;将待查询数据分区对应目标文件夹中存储的目标对应关系加载至内存中;根据所加载目标对应关系中记载的列名,确定目标文件夹中与待查询列的列名相匹配的目标位图索引文件;从目标文件夹中将目标位图索引文件加载至内存中,并获得各个目标位图索引文件包含的位向量,对所获得的位向量分别进行解压缩处理,获得各个目标位图索引文件的位图索引;在所获得的位图索引中查找与查询条件相匹配的位图索引值;按照查找到的位图索引值从目标文件夹中的数据列文件中获得查询结果。
其中,由于数据列与数据分区存在对应关系,所以可以根据查询指令中携带的待查询列的列名确定待查询数据分区。
从前面的描述可以得知,上述目标对应关系可以存储在特定的文件(如:配置文件)中,所以本实现方式中,向内存中加载目标对应关系时,可以理解为:将上述特定文件加载至内存中。
需要说明的是,获得各个目标位图索引文件的位图索引的过程,与根据位图索引生成目标位图索引文件的过程互为逆过程。
具体的,从目标位图索引文件中获得文件头信息、目标段长、行数、键值、键值的数量、各个位向量信息的存储位置;根据上述存储位置,从目标位图索引文件中获得压缩后的位向量,以对一个压缩后的位向量进行解压缩处理得到压缩前的位向量为例,结合具体实例,过程如下:
假设,目标段长为:10,源码标识为:0,位于源码段的第一个比特位,压缩标识为:1,位于编码段的第一个比特位,被压缩位取值标识位于编码段的第二个比特位,键值的数量为:82。
压缩后的位向量为:0100110111 1000010111 1100010101
可见上述压缩后的位向量中包含3个分段,分别为:
0100110111:第一个比特位为0,表示源码段,压缩前的值为:100110111;
1000010111:第一比特位为1,表示编码段,第二个比特位为0,表示被压缩位取值为0,所压缩的是23*(10-1)=207个取值为0的比特位;
1100010101:第一比特位为1,表示编码段,第二个比特位为1,表示被压缩位取值为1,所压缩的是21*(10-1)=189个取值为1的比特位。
键值的数量为82,则位图段的数量为81,也就是,每一位图索引的长度为81,因此可以得到(9+207+189)/81=5个位向量。
三、数据删除
由于不同设备的资源不同,本申请的一种实现方式中,可以在数据分区对应的文件夹中存储一个二进制文件,该二进制文件的一个比特位表示数据表件中的一行,也就是一条数据是否被删除,例如,0表示已被删除,1表示未被删除。当接收到删除数据表中某一条数据的删除指令后,根据删除指令确定待删除数据的数据分区,然后将所确定数据分区对应文件夹的上述二进制文件中该条数据对应的比特位设置为1即可,可见这种情况下,数据并没有真正从数据表对应的存储文件中删除,也就是删除操作并不释放存储空间。
本申请的另一种实现方式中,接收到删除数据表中待删除数据的删除指令后,根据删除指令确定待删除数据的数据分区,然后从所确定数据分区对应文件夹的数据列文件中删除待删除数据的数值。采用这种方式进行数据删除时,能够释放存储空间。
数据库运行通常需要相应的动态库文件支持,不同数据库对应的动态库文件占用的存储空间可能不同,发明人经过实验发现,应用本申请实施例提供的方案在数据库中存储数据时,需要的动态库文件占用的存储空间高达140M,在设备存储资源有限的情况下,动态库文件较大易造成设备资源紧张。基于此,在本申请的一种实现方式中,发明人采用在设备上挂载硬盘的方式扩展设备的存储资源,将占用存储空间大的动态库文件存储于外置硬盘中,而在设备本地存储一个占用存储空间小的数据库的动态库文件,例如,轻量级数据库的动态库文件。
但是不同的数据库具有不同的特点,例如,轻量级数据库具有消耗资源少的特点,采用本申请实施例提供的数据存储方式的数据库具有支持高并发、数据处理速度快的特点等等,这样在不同的应用场景下可能会需要不同数据库之间的切换。
鉴于上述情况,在本申请的一种实现方式中,参见图4,提供了第三种数据存储方法的流程示意图,与前述实施例相比,本实施例中,在获得待存储至数据库的各条数据(S101)之前,还包括:
S101A:接收到数据库切换指令和/或存在外置硬盘的情况下,判断待切换数据库的动态库是否处于可用状态,若为是,执行S101B。
待切换数据库的动态库可以是存储于本地的动态库文件,还可以是存储于外置硬盘中的动态库文件。
判断待切换数据库的动态库是否处于可用状态时,可以判断本地设备或者外置硬盘中存储的动态库文件是否与请求切换的动态库文件的名称一致、校验码是否一致等,当上述信息均一致的情况可以认为待切换数据库的动态库处于可用状态;另外,若上述信息不一致,可以认为待切换数据库的动态库处于不可用状态,这种情况下,可以引导设备下载上述待切换数据库的动态库,进而获得名称、校验码等信息一致的动态库。
上述校验码可以是数据库名称的MD5(Message Digest Algorithm5,消息摘要算法第五版)值等等。
本实施例提供的方案中,上述数据库列切换指令具体可以通过一个控制参数来实现,默认情况下不进行数据库切换,这时程序加载的是一个空动态库文件(体积为10k左右,存储当前设备上),该空动态库文件采用桩函数的方式来保证整个工程的编译通过,桩函数名与实际动态库中的接口名完全一致,用来代替实际动态库的接口。此时,通过SQL语句对设备本地原有数据库(或者称之为默认数据库)进行操作,链接的空动态库并不对其产生任何影响。
S101B:关闭已加载的原数据库的动态库文件,并加载待切换数据库的动态文件。
获得待存储至数据库的各条数据(S101),包括:
S101C:获得待存储至所述待切换数据库的各条数据。
应用上述增加外置硬盘的方式虽然能够扩展存储资源,但是仍然不够灵活,而且麻烦。基于这种情况,本申请的一种实现方式中,本地设备可以与服务器相配合,将各种数据库全部安装于服务器中,本地设备仅仅作为指令发送方,从而做到数据存储与指令发送相分离。
具体的,上述服务器接收到数据处理指令后,可以通过ODBC(Open DatabaseConnectivity,开放数据库连接)将上述数据处理指令发送至相应数据库进行处理。
基于上述情况,在本申请的一种实现方式中,参见图5,提供了第四种数据存储方法的流程示意图,与前述实施例相比,本实施例中,在获得待存储至数据库的各条数据(S101)之前,还包括:
S101D:接收控制设备发送的数据库切换指令。
S101E:根据所述数据库切换指令从本地已安装的数据库中确定待切换数据库,并将所述待切换数据库切换至工作状态。
获得待存储至数据库的各条数据(S101),包括:
S101F:获得待存储至所述待切换数据库的各条数据。
需要说明的是,本实施例的执行主体为服务器。上述控制设备可以为网络设备等等。
由以上可见,上述图4、图5所示实施例提供的方案中,通过接收数据库切换指令进行数据库切换,从而有利于具体应用中根据不同情况选择需要的数据库,可操作性强,同时能够减轻网络设备等设备侧的工作压力。
与上述数据存储方法相对应,本申请实施例还提供了一种数据存储装置。
图6为本申请实施例提供的第一种数据存储装置的结构示意图,该装置包括:
数据获得模块601,用于获得待存储至数据库的各条数据,其中,每条数据中包含数据库的预设列名对应的数值;
文件获得模块602,用于从所述各条数据中确定至少一个数据列,生成至少一个数据列文件,其中,每个数据列文件中存储所述至少一数据列中的一个数据列;
文件生成模块603,用于生成各个数据列文件的位图索引文件;
信息存储模块604,用于存储各个数据列文件、各个位图索引文件、目标对应关系,其中,所述目标对应关系为:每一数据列文件与该数据列文件的位图索引文件、该数据列文件存储的数据列对应的预设列名三者之间的对应关系。
在本申请的一种实现方式中,图7提供了一种位图索引文件生成装置的结构示意图,该装置对应于上述文件生成模块603,包括:
键值确定子模块603A、位图生成子模块603B、位向量获得子模块603C、文件生成子模块603D;
所述文件生成模块,具体用于通过所述键值确定子模块603A、位图生成子模块603B、位向量获得子模块603C、文件生成子模块603D生成每一数据列文件的位图索引文件;
所述键值确定子模块603A,用于确定目标数据列文件的位图索引的至少两个键值,其中,将所述至少两个键值从小到大进行排列时,形成等差数列,所述等差数列中的每两个相邻的键值形成一个位图段,所述目标数据列文件为:各个数据列文件中的一个;
所述位图生成子模块603B,用于根据所述至少两个键值确定的位图段,获得所述目标数据列文件存储的数据列包含的数值的位图索引值,并根据所获得的位图索引值生成所述目标数据列文件的目标位图索引;
所述位向量获得子模块603C,用于对所述目标位图索引进行压缩处理,获得所述目标位图索引的位向量;
所述文件生成子模块603D,用于根据所获得的位向量生成所述目标数据列文件的位图索引文件。
具体的,所述位向量获得子模块603C,包括:
数量确定单元,用于确定所述目标位图索引中取值连续相同的比特位的最大数量;
段长确定单元,用于根据所述最大数量确定对所述目标位图索引进行压缩处理后一个分段的目标段长;
位置设置单元,用于设置初始位置为所述目标位图索引的第一个比特位;
数量确定单元,用于从所述初始位置开始确定所述目标位图索引中取值连续相同的比特位的目标数量;
数量判断单元,用于判断所述目标数量是否小于第一数值,其中,所述第一数值等于所述目标段长减1,若为是,触发源码段生成单元,若为否,触发编码段生成单元;
所述源码段生成单元,用于生成包含源码标识、源码比特位的源码段,作为所述目标位图索引的一个位向量,其中,所述源码比特位为:所述目标位图索引中从所述起始位置开始所述目标数量个比特位;
所述编码段生成单元,用于根据所述目标段长更新所述目标数量,对所述目标位图索引中从所述起始位置开始所述目标数量个比特位进行压缩处理,获得压缩后比特位,并生成包含压缩标识、被压缩位取值标识、压缩后比特位的编码段,作为所述目标位图索引的一个位向量,其中,所述被压缩位取值标识为:用于表示进行压缩处理的比特位取值的标识;
位置移动单元,用于将所述初始位置向后移动所述目标数量个比特位,在所述目标位图索引中还存在未经压缩处理的比特位时,触发所述数量确定单元。
具体的,所述段长确定单元,具体用于按照以下公式确定对所述目标位图索引进行压缩处理后一个分段的目标段长:
2(Slen-2)-1=floor(Nummax/(Slen-1))
其中,Nummax表示所述最大数量,Slen表示所述目标段长,floor()表示取小于或等于操作数的最大整数;
所述编码段生成单元,具体用于按照以下表达式更新所述目标数量,并并生成包含压缩标识、被压缩位取值标识、压缩后比特位的编码段:
Num’=min{floor(Num/(Slen-1))*(Slen-1),((2(Slen-2)-1)*(Slen-1))}
其中,Num表示更新前的目标数量,Num’表示更新后的目标数量,min{,}表示取两个操作数中的最小值;
所述编码段生成单元,具体用于按照以下表达式确定中间数值Cbit:
Cbit=Num’/(Slen-1);
将所述Cbit转换为二进制比特位,将所述二进制比特位作为所述压缩后比特位。
具体的,所述文件生成子模块603D,包括:
信息确定单元,用于确定文件头信息、所述目标数据列文件所包含数值的行数;
位置确定单元,用于确定所获得的位向量在位图索引文件中的存储位置;
文件生成单元,用于生成包含所述文件头信息、目标段长、行数、键值、键值的数量、存储位置以及所获得的位向量的文件,作为所述目标数据列文件的位图索引文件。
由以上可见,上述各个实施例提供的方案中,获得待存储至数据库的各条数据后,从各条数据中确定至少一个数据列,生成至少一个数据列文件,再生成各个数据列文件的位图索引文件,并存储各个数据列文件、各个位图索引文件、各个数据列文件与其位图索引文件之间的对应关系。与现有技术相比,应用上述实施例提供的方案进行数据存储时,数据被存储在不同的数据列文件中,而非存储在单一的数据库文件中,由于文件数量增多,所以能够很好的支持针对数据列文件的高并发访问需求。
本申请的一种实现方式中,参见图8,提供了第二种数据存储装置的结构示意图,与前述实施例相比,本实施例中,上述数据存储装置还包括:
文件夹确定模块605,用于在所述数据获得模块获得目标数据后,确定各条目标数据对应的数据分区,并确定用于存储各个数据分区所包含数据的文件夹;
所述文件获得模块602,具体用于从对应于同一数据分区的各条数据中确定至少一个数据列,生成至少一个数据列文件,并获得数据列与数据分区的对应关系;
所述信息存储模块604,具体用于根据数据列与数据分区之间的对应关系,将各个数据列文件、各个位图索引文件、目标对应关系存储至相应数据分区对应的文件夹中。
由以上可见,本实施例提供的方案中,以数据分区为单位对数据列文件进行存储,能够使得对数据库文件进行操作时,可以直接从相应文件夹中获得数据,提高数据处理效率。
具体的,所述文件夹确定模块605,具体用于确定各条数据对应的数据分区,并获得分布式存储设备的负载状态;根据所获得的负载状态,从分布式存储设备中确定用于存储各个数据分区所包含数据的存储设备;基于每一数据分区对应的存储设备确定用于存储该数据分区所包含数据的文件夹,并记录数据分区、存储设备、文件夹三者之间的对应关系。
由于分布式存储系统相对于单台设备资源丰富、数据处理能力及可扩展性较强,将数据列文件存储与分布式存储系统中,能够有效降低执行主体(例如,网路设备)的压力。
本申请的一种实现方式中,上述数据存储装置还包括:
数据插入模块,用于接收针对待插入数据的插入指令;根据所述插入指令确定待插入数据对应的数据分区,作为待插入数据分区;以列为基准,将待插入数据分别存储至预设大小的数组中,并缓存各个数组;在满足硬盘写入条件时,将各个数组中的数据分别插入所述待插入数据分区对应文件夹的数据列文件中,并根据插入数据的数据列文件中所插入的数据更新该数据列文件的位图索引文件。
本申请的一种实现方式中,上述数据存储装置还包括:
数据查询模块,用于接收针对待查询条件的查询指令,其中,所述查询指令中携带待查询列的列名和查询条件;根据所述待查询列的列名,确定待查询数据分区;将所述待查询数据分区对应目标文件夹中存储的目标对应关系加载至内存中;根据所加载目标对应关系中记载的列名,确定所述目标文件夹中与所述待查询列的列名相匹配的目标位图索引文件;从所述目标文件夹中将目标位图索引文件加载至内存中,并获得各个目标位图索引文件包含的位向量,对所获得的位向量分别进行解压缩处理,获得各个目标位图索引文件的位图索引;在所获得的位图索引中查找与所述查询条件相匹配的位图索引值;按照查找到的位图索引值从所述目标文件夹中的数据列文件中获得查询结果。
本申请的一种实现方式中,参见图9,提供了第三种数据存储装置的结构示意图,与前述实施例相比,本实施例中,上述数据存储装置还包括:
第一数据库切换模块606,用于接收到数据库切换指令和/或存在外置硬盘的情况下,判断待切换数据库的动态库是否处于可用状态;若为是,关闭已加载的原数据库的动态库文件,并加载所述待切换数据库的动态文件;触发所述数据获得模块;
所述数据获得模块601,具体用于获得待存储至所述待切换数据库的各条数据。
本申请的一种实现方式中,参见图10,提供了第四种数据存储装置的结构示意图,与前述实施例相比,本实施例中,上述数据存储装置还包括:
第二数据库切换模块607,用于接收控制设备发送的数据库切换指令;根据所述数据库切换指令从本地已安装的数据库中确定待切换数据库,并将所述待切换数据库切换至工作状态;触发所述数据获得模块;
所述数据获得模块601,具体用于获得待存储至所述待切换数据库的各条数据。
由以上可见,上述图4、图5所示实施例提供的方案中,通过接收数据库切换指令进行数据库切换,从而有利于具体应用中根据不同情况选择需要的数据库,可操作性强,同时能够减轻网络设备等设备侧的工作压力。
对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。
Claims (22)
1.一种数据存储方法,其特征在于,所述方法包括:
获得待存储至数据库的各条数据,其中,每条数据中包含数据库的预设列名对应的数值;
从所述各条数据中确定至少一个数据列,生成至少一个数据列文件,其中,每个数据列文件中存储所述至少一数据列中的一个数据列;
生成各个数据列文件的位图索引文件;
存储各个数据列文件、各个位图索引文件、目标对应关系,其中,所述目标对应关系为:每一数据列文件与该数据列文件的位图索引文件、该数据列文件存储的数据列对应的预设列名三者之间的对应关系。
2.根据权利要求1所述的方法,其特征在于,所述生成各个数据列文件的位图索引文件的步骤,包括:
按照以下方式生成每一数据列文件的位图索引文件:
确定目标数据列文件的位图索引的至少两个键值,其中,将所述至少两个键值从小到大进行排列时,形成等差数列,所述等差数列中的每两个相邻的键值形成一个位图段,所述目标数据列文件为:各个数据列文件中的一个;
根据所述至少两个键值确定的位图段,获得所述目标数据列文件存储的数据列包含的数值的位图索引值,并根据所获得的位图索引值生成所述目标数据列文件的目标位图索引;
对所述目标位图索引进行压缩处理,获得所述目标位图索引的位向量;
根据所获得的位向量生成所述目标数据列文件的位图索引文件。
3.根据权利要求2所述的方法,其特征在于,所述对所述目标位图索引进行压缩处理,获得所述目标位图索引的位向量的步骤,包括:
确定所述目标位图索引中取值连续相同的比特位的最大数量;
根据所述最大数量确定对所述目标位图索引进行压缩处理后一个分段的目标段长;
设置初始位置为所述目标位图索引的第一个比特位;
从所述初始位置开始确定所述目标位图索引中取值连续相同的比特位的目标数量;
判断所述目标数量是否小于第一数值,其中,所述第一数值等于所述目标段长减1;
若为是,生成包含源码标识、源码比特位的源码段,作为所述目标位图索引的一个位向量,其中,所述源码比特位为:所述目标位图索引中从所述起始位置开始所述目标数量个比特位;
否则,根据所述目标段长更新所述目标数量,对所述目标位图索引中从所述起始位置开始所述目标数量个比特位进行压缩处理,获得压缩后比特位,并生成包含压缩标识、被压缩位取值标识、压缩后比特位的编码段,作为所述目标位图索引的一个位向量,其中,所述被压缩位取值标识为:用于表示进行压缩处理的比特位取值的标识;
将所述初始位置向后移动所述目标数量个比特位,在所述目标位图索引中还存在未经压缩处理的比特位时,返回所述从所述初始位置开始确定所述目标位图索引中取值连续相同的比特位的目标数量的步骤。
4.根据权利要求3所述的方法,其特征在于,所述根据所述最大数量确定对所述目标位图索引进行压缩处理后一个分段的目标段长的步骤,包括:
按照以下公式确定对所述目标位图索引进行压缩处理后一个分段的目标段长:
2(Slen-2)-1=floor(Nummax/(Slen-1))
其中,Nummax表示所述最大数量,Slen表示所述目标段长,floor()表示取小于或等于操作数的最大整数;
所述根据所述目标段长更新所述目标数量的步骤,包括:
按照以下表达式更新所述目标数量:
Num’=min{floor(Num/(Slen-1))*(Slen-1),((2(Slen-2)-1)*(Slen-1))}
其中,Num表示更新前的目标数量,Num’表示更新后的目标数量,min{,}表示取两个操作数中的最小值;
所述对所述目标位图索引中从所述起始位置开始所述目标数量个比特位进行压缩处理,获得压缩后比特位的步骤,包括:
按照以下表达式确定中间数值Cbit:
Cbit=Num’/(Slen-1);
将所述Cbit转换为二进制比特位,将所述二进制比特位作为所述压缩后比特位。
5.根据权利要求3所述的方法,其特征在于,所述根据所获得的位向量生成所述目标数据列文件的位图索引文件的步骤,包括:
确定文件头信息、所述目标数据列文件所包含数值的行数;
确定所获得的位向量在位图索引文件中的存储位置;
生成包含所述文件头信息、目标段长、行数、键值、键值的数量、存储位置以及所获得的位向量的文件,作为所述目标数据列文件的位图索引文件。
6.根据权利要求2-5中任一项所述的方法,其特征在于,在所述获得待存储至数据库的各条数据的步骤后,还包括:
确定各条数据对应的数据分区,并确定用于存储各个数据分区所包含数据的文件夹;
从所述各条数据中确定至少一个数据列,生成至少一个数据列文件的步骤,包括:
从对应于同一数据分区的各条数据中确定至少一个数据列,生成至少一个数据列文件,并获得数据列与数据分区的对应关系;
所述存储各个数据列文件、各个位图索引文件、目标对应关系的步骤,包括:
根据数据列与数据分区之间的对应关系,将各个数据列文件、各个位图索引文件、目标对应关系存储至相应数据分区对应的文件夹中。
7.根据权利要求6所述的方法,其特征在于,所述确定用于存储各个数据分区所包含数据的文件夹的步骤,包括:
获得分布式存储设备的负载状态;
根据所获得的负载状态,从分布式存储设备中确定用于存储各个数据分区所包含数据的存储设备;
基于每一数据分区对应的存储设备确定用于存储该数据分区所包含数据的文件夹,并记录数据分区、存储设备、文件夹三者之间的对应关系。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
接收针对待插入数据的插入指令;
根据所述插入指令确定待插入数据对应的数据分区,作为待插入数据分区;
以列为基准,将待插入数据分别存储至预设大小的数组中,并缓存各个数组;
在满足硬盘写入条件时,将各个数组中的数据分别插入所述待插入数据分区对应文件夹的数据列文件中,并根据插入数据的数据列文件中所插入的数据更新该数据列文件的位图索引文件。
9.根据权利要求6所述的方法,其特征在于,所述方法还包括:
接收针对待查询条件的查询指令,其中,所述查询指令中携带待查询列的列名和查询条件;
根据所述待查询列的列名,确定待查询数据分区;
将所述待查询数据分区对应目标文件夹中存储的目标对应关系加载至内存中;
根据所加载目标对应关系中记载的列名,确定所述目标文件夹中与所述待查询列的列名相匹配的目标位图索引文件;
从所述目标文件夹中将目标位图索引文件加载至内存中,并获得各个目标位图索引文件包含的位向量,对所获得的位向量分别进行解压缩处理,获得各个目标位图索引文件的位图索引;
在所获得的位图索引中查找与所述查询条件相匹配的位图索引值;
按照查找到的位图索引值从所述目标文件夹中的数据列文件中获得查询结果。
10.根据权利要求1所述的方法,其特征在于,在所述获得待存储至数据库的各条数据的步骤之前,还包括:
接收到数据库切换指令和/或存在外置硬盘的情况下,判断待切换数据库的动态库是否处于可用状态;
若为是,关闭已加载的原数据库的动态库文件,并加载所述待切换数据库的动态文件;
所述获得待存储至数据库的各条数据的步骤,包括:
获得待存储至所述待切换数据库的各条数据。
11.根据权利要求1所述的方法,其特征在于,在所述获得待存储至数据库的各条数据的步骤之前,还包括:
接收控制设备发送的数据库切换指令;
根据所述数据库切换指令从本地已安装的数据库中确定待切换数据库,并将所述待切换数据库切换至工作状态;
所述获得待存储至数据库的各条数据的步骤,包括:
获得待存储至所述待切换数据库的各条数据。
12.一种数据存储装置,其特征在于,所述装置包括:
数据获得模块,用于获得待存储至数据库的各条数据,其中,每条数据中包含数据库的预设列名对应的数值;
文件获得模块,用于从所述各条数据中确定至少一个数据列,生成至少一个数据列文件,其中,每个数据列文件中存储所述至少一数据列中的一个数据列;
文件生成模块,用于生成各个数据列文件的位图索引文件;
信息存储模块,用于存储各个数据列文件、各个位图索引文件、目标对应关系,其中,所述目标对应关系为:每一数据列文件与该数据列文件的位图索引文件、该数据列文件存储的数据列对应的预设列名三者之间的对应关系。
13.根据权利要求12所述的装置,其特征在于,所述文件生成模块,包括:键值确定子模块、位图生成子模块、位向量获得子模块、文件生成子模块;
所述文件生成模块,具体用于通过所述键值确定子模块、位图生成子模块、位向量获得子模块、文件生成子模块生成每一数据列文件的位图索引文件;
所述键值确定子模块,用于确定目标数据列文件的位图索引的至少两个键值,其中,将所述至少两个键值从小到大进行排列时,形成等差数列,所述等差数列中的每两个相邻的键值形成一个位图段,所述目标数据列文件为:各个数据列文件中的一个;
所述位图生成子模块,用于根据所述至少两个键值确定的位图段,获得所述目标数据列文件存储的数据列包含的数值的位图索引值,并根据所获得的位图索引值生成所述目标数据列文件的目标位图索引;
所述位向量获得子模块,用于对所述目标位图索引进行压缩处理,获得所述目标位图索引的位向量;
所述文件生成子模块,用于根据所获得的位向量生成所述目标数据列文件的位图索引文件。
14.根据权利要求13所述的装置,其特征在于,所述位向量获得子模块,包括:
数量确定单元,用于确定所述目标位图索引中取值连续相同的比特位的最大数量;
段长确定单元,用于根据所述最大数量确定对所述目标位图索引进行压缩处理后一个分段的目标段长;
位置设置单元,用于设置初始位置为所述目标位图索引的第一个比特位;
数量确定单元,用于从所述初始位置开始确定所述目标位图索引中取值连续相同的比特位的目标数量;
数量判断单元,用于判断所述目标数量是否小于第一数值,其中,所述第一数值等于所述目标段长减1,若为是,触发源码段生成单元,若为否,触发编码段生成单元;
所述源码段生成单元,用于生成包含源码标识、源码比特位的源码段,作为所述目标位图索引的一个位向量,其中,所述源码比特位为:所述目标位图索引中从所述起始位置开始所述目标数量个比特位;
所述编码段生成单元,用于根据所述目标段长更新所述目标数量,对所述目标位图索引中从所述起始位置开始所述目标数量个比特位进行压缩处理,获得压缩后比特位,并生成包含压缩标识、被压缩位取值标识、压缩后比特位的编码段,作为所述目标位图索引的一个位向量,其中,所述被压缩位取值标识为:用于表示进行压缩处理的比特位取值的标识;
位置移动单元,用于将所述初始位置向后移动所述目标数量个比特位,在所述目标位图索引中还存在未经压缩处理的比特位时,触发所述数量确定单元。
15.根据权利要求14所述的装置,其特征在于,
所述段长确定单元,具体用于按照以下公式确定对所述目标位图索引进行压缩处理后一个分段的目标段长:
2(Slen-2)-1=floor(Nummax/(Slen-1))
其中,Nummax表示所述最大数量,Slen表示所述目标段长,floor()表示取小于或等于操作数的最大整数;
所述编码段生成单元,具体用于按照以下表达式更新所述目标数量,并并生成包含压缩标识、被压缩位取值标识、压缩后比特位的编码段:
Num’=min{floor(Num/(Slen-1))*(Slen-1),((2(Slen-2)-1)*(Slen-1))}
其中,Num表示更新前的目标数量,Num’表示更新后的目标数量,min{,}表示取两个操作数中的最小值;
所述编码段生成单元,具体用于按照以下表达式确定中间数值Cbit:
Cbit=Num’/(Slen-1);
将所述Cbit转换为二进制比特位,将所述二进制比特位作为所述压缩后比特位。
16.根据权利要求14所述的装置,其特征在于,所述文件生成子模块,包括:
信息确定单元,用于确定文件头信息、所述目标数据列文件所包含数值的行数;
位置确定单元,用于确定所获得的位向量在位图索引文件中的存储位置;
文件生成单元,用于生成包含所述文件头信息、目标段长、行数、键值、键值的数量、存储位置以及所获得的位向量的文件,作为所述目标数据列文件的位图索引文件。
17.根据权利要求13-16中任一项所述的装置,其特征在于,所述装置还包括:
文件夹确定模块,用于在所述数据获得模块获得数据后,确定各条数据对应的数据分区,并确定用于存储各个数据分区所包含数据的文件夹;
所述文件获得模块,具体用于从对应于同一数据分区的各条数据中确定至少一个数据列,生成至少一个数据列文件,并获得数据列与数据分区的对应关系;
所述信息存储模块,具体用于根据数据列与数据分区之间的对应关系,将各个数据列文件、各个位图索引文件、目标对应关系存储至相应数据分区对应的文件夹中。
18.根据权利要求17所述的装置,其特征在于,
所述文件夹确定模块,具体用于确定各条数据对应的数据分区,并获得分布式存储设备的负载状态;根据所获得的负载状态,从分布式存储设备中确定用于存储各个数据分区所包含数据的存储设备;基于每一数据分区对应的存储设备确定用于存储该数据分区所包含数据的文件夹,并记录数据分区、存储设备、文件夹三者之间的对应关系。
19.根据权利要求17所述的装置,其特征在于,所述装置还包括:
数据插入模块,用于接收针对待插入数据的插入指令;根据所述插入指令确定待插入数据对应的数据分区,作为待插入数据分区;以列为基准,将待插入数据分别存储至预设大小的数组中,并缓存各个数组;在满足硬盘写入条件时,将各个数组中的数据分别插入所述待插入数据分区对应文件夹的数据列文件中,并根据插入数据的数据列文件中所插入的数据更新该数据列文件的位图索引文件。
20.根据权利要求17所述的装置,其特征在于,所述装置还包括:
数据查询模块,用于接收针对待查询条件的查询指令,其中,所述查询指令中携带待查询列的列名和查询条件;根据所述待查询列的列名,确定待查询数据分区;将所述待查询数据分区对应目标文件夹中存储的目标对应关系加载至内存中;根据所加载目标对应关系中记载的列名,确定所述目标文件夹中与所述待查询列的列名相匹配的目标位图索引文件;从所述目标文件夹中将目标位图索引文件加载至内存中,并获得各个目标位图索引文件包含的位向量,对所获得的位向量分别进行解压缩处理,获得各个目标位图索引文件的位图索引;在所获得的位图索引中查找与所述查询条件相匹配的位图索引值;按照查找到的位图索引值从所述目标文件夹中的数据列文件中获得查询结果。
21.根据权利要求12所述的装置,其特征在于,所述装置还包括:
第一数据库切换模块,用于接收到数据库切换指令和/或存在外置硬盘的情况下,判断待切换数据库的动态库是否处于可用状态;若为是,关闭已加载的原数据库的动态库文件,并加载所述待切换数据库的动态文件;触发所述数据获得模块;
所述数据获得模块,具体用于获得待存储至所述待切换数据库的各条数据。
22.根据权利要求12所述的装置,其特征在于,所述装置还包括:
第二数据库切换模块,用于接收控制设备发送的数据库切换指令;根据所述数据库切换指令从本地已安装的数据库中确定待切换数据库,并将所述待切换数据库切换至工作状态;触发所述数据获得模块;
所述数据获得模块,具体用于获得待存储至所述待切换数据库的各条数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710326239.1A CN107545021B (zh) | 2017-05-10 | 2017-05-10 | 一种数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710326239.1A CN107545021B (zh) | 2017-05-10 | 2017-05-10 | 一种数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107545021A true CN107545021A (zh) | 2018-01-05 |
CN107545021B CN107545021B (zh) | 2020-12-11 |
Family
ID=60966878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710326239.1A Active CN107545021B (zh) | 2017-05-10 | 2017-05-10 | 一种数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107545021B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110209348A (zh) * | 2019-04-17 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 数据存储方法、装置、电子设备及存储介质 |
CN111061722A (zh) * | 2018-10-16 | 2020-04-24 | 阿里巴巴集团控股有限公司 | 一种数据压缩、数据解压缩方法、装置及设备 |
CN111078920A (zh) * | 2019-11-22 | 2020-04-28 | 北京云宽志业网络技术有限公司 | 数据处理方法、装置、设备和计算机可读存储介质 |
CN111159515A (zh) * | 2019-11-15 | 2020-05-15 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置及电子设备 |
CN111984651A (zh) * | 2020-08-21 | 2020-11-24 | 苏州浪潮智能科技有限公司 | 一种基于持久性内存的列式存储方法、装置及设备 |
CN112532748A (zh) * | 2020-12-24 | 2021-03-19 | 北京百度网讯科技有限公司 | 消息推送方法、装置、设备、介质和计算机程序产品 |
CN112989254A (zh) * | 2021-04-13 | 2021-06-18 | 郑州悉知信息科技股份有限公司 | 一种图片处理方法及装置 |
CN113297232A (zh) * | 2020-07-31 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 一种基于数据库分区的数据更新方法、装置及系统 |
CN113393296A (zh) * | 2021-06-16 | 2021-09-14 | 北京沃东天骏信息技术有限公司 | 一种数据关系的表示方法、装置、设备及存储介质 |
CN113536074A (zh) * | 2021-07-13 | 2021-10-22 | 挂号网(杭州)科技有限公司 | vue框架中的关键字查询方法、装置、计算机设备及介质 |
CN113553335A (zh) * | 2021-07-26 | 2021-10-26 | 北京东方国信科技股份有限公司 | 列式存储文件的数据更新方法及装置 |
CN117435629A (zh) * | 2023-12-18 | 2024-01-23 | 天津神舟通用数据技术有限公司 | 一种数据处理方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402617A (zh) * | 2011-12-23 | 2012-04-04 | 天津神舟通用数据技术有限公司 | 一种利用分片及稀疏位图的易压缩数据库索引存储系统及其相应的构建、调度和查询处理方法 |
US20160147457A1 (en) * | 2014-11-25 | 2016-05-26 | Thomas Legler | Dual data storage using an in-memory array and an on-disk page structure |
CN106250523A (zh) * | 2016-08-04 | 2016-12-21 | 北京国电通网络技术有限公司 | 一种分布式列存储系统索引的方法 |
-
2017
- 2017-05-10 CN CN201710326239.1A patent/CN107545021B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402617A (zh) * | 2011-12-23 | 2012-04-04 | 天津神舟通用数据技术有限公司 | 一种利用分片及稀疏位图的易压缩数据库索引存储系统及其相应的构建、调度和查询处理方法 |
US20160147457A1 (en) * | 2014-11-25 | 2016-05-26 | Thomas Legler | Dual data storage using an in-memory array and an on-disk page structure |
CN106250523A (zh) * | 2016-08-04 | 2016-12-21 | 北京国电通网络技术有限公司 | 一种分布式列存储系统索引的方法 |
Non-Patent Citations (1)
Title |
---|
李清炳: "列存储数据仓库的位图索引研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑(月刊)计算机软件及计算机应用》 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061722A (zh) * | 2018-10-16 | 2020-04-24 | 阿里巴巴集团控股有限公司 | 一种数据压缩、数据解压缩方法、装置及设备 |
CN111061722B (zh) * | 2018-10-16 | 2023-06-06 | 阿里巴巴集团控股有限公司 | 一种数据压缩、数据解压缩方法、装置及设备 |
CN110209348B (zh) * | 2019-04-17 | 2021-08-17 | 腾讯科技(深圳)有限公司 | 数据存储方法、装置、电子设备及存储介质 |
CN110209348A (zh) * | 2019-04-17 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 数据存储方法、装置、电子设备及存储介质 |
CN111159515B (zh) * | 2019-11-15 | 2024-05-28 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置及电子设备 |
CN111159515A (zh) * | 2019-11-15 | 2020-05-15 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置及电子设备 |
CN111078920B (zh) * | 2019-11-22 | 2021-09-03 | 北京云宽志业网络技术有限公司 | 数据处理方法、装置、设备和计算机可读存储介质 |
CN111078920A (zh) * | 2019-11-22 | 2020-04-28 | 北京云宽志业网络技术有限公司 | 数据处理方法、装置、设备和计算机可读存储介质 |
CN113297232A (zh) * | 2020-07-31 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 一种基于数据库分区的数据更新方法、装置及系统 |
CN113297232B (zh) * | 2020-07-31 | 2024-03-01 | 阿里巴巴集团控股有限公司 | 一种基于数据库分区的数据更新方法、装置及系统 |
CN111984651A (zh) * | 2020-08-21 | 2020-11-24 | 苏州浪潮智能科技有限公司 | 一种基于持久性内存的列式存储方法、装置及设备 |
CN112532748A (zh) * | 2020-12-24 | 2021-03-19 | 北京百度网讯科技有限公司 | 消息推送方法、装置、设备、介质和计算机程序产品 |
CN112532748B (zh) * | 2020-12-24 | 2022-05-17 | 北京百度网讯科技有限公司 | 消息推送方法、装置、设备、介质和计算机程序产品 |
CN112989254A (zh) * | 2021-04-13 | 2021-06-18 | 郑州悉知信息科技股份有限公司 | 一种图片处理方法及装置 |
CN113393296A (zh) * | 2021-06-16 | 2021-09-14 | 北京沃东天骏信息技术有限公司 | 一种数据关系的表示方法、装置、设备及存储介质 |
CN113536074B (zh) * | 2021-07-13 | 2024-04-26 | 挂号网(杭州)科技有限公司 | vue框架中的关键字查询方法、装置、计算机设备及介质 |
CN113536074A (zh) * | 2021-07-13 | 2021-10-22 | 挂号网(杭州)科技有限公司 | vue框架中的关键字查询方法、装置、计算机设备及介质 |
CN113553335A (zh) * | 2021-07-26 | 2021-10-26 | 北京东方国信科技股份有限公司 | 列式存储文件的数据更新方法及装置 |
CN113553335B (zh) * | 2021-07-26 | 2024-10-18 | 北京东方国信科技股份有限公司 | 列式存储文件的数据更新方法及装置 |
CN117435629A (zh) * | 2023-12-18 | 2024-01-23 | 天津神舟通用数据技术有限公司 | 一种数据处理方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107545021B (zh) | 2020-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107545021A (zh) | 一种数据存储方法及装置 | |
CN1552032B (zh) | 数据库 | |
US10891229B2 (en) | Multi-level caching method and multi-level caching system for enhancing graph processing performance | |
US8959075B2 (en) | Systems for storing data streams in a distributed environment | |
CN102156751B (zh) | 一种提取视频指纹的方法及装置 | |
US20040205044A1 (en) | Method for storing inverted index, method for on-line updating the same and inverted index mechanism | |
CN102591946B (zh) | 使用索引划分和协调来进行数据去重复 | |
US8738572B2 (en) | System and method for storing data streams in a distributed environment | |
JP4581962B2 (ja) | 情報検索システムとインデクス管理方法およびプログラム | |
KR20200053512A (ko) | Kvs 트리 데이터베이스 | |
US10831747B2 (en) | Multi stage aggregation using digest order after a first stage of aggregation | |
EP2924594B1 (en) | Data encoding and corresponding data structure in a column-store database | |
EP2344959B1 (en) | Index compression in databases | |
US10783115B2 (en) | Dividing a dataset into sub-datasets having a subset of values of an attribute of the dataset | |
CN110083601A (zh) | 面向键值存储系统的索引树构建方法及系统 | |
WO2009031915A1 (fr) | Système et procédés de stockage, de recherche et d'extraction des informations sur la base d'ensembles de données faiblement organisés et décentralisés | |
WO2016149552A1 (en) | Compaction policy | |
CN113961514A (zh) | 数据查询方法及装置 | |
TW201514734A (zh) | 資料庫管理方法、資料庫管理系統,以及資料庫樹狀結構 | |
CN114780502A (zh) | 基于压缩数据直接计算的数据库方法、系统、设备和介质 | |
CN113392040B (zh) | 一种地址映射方法、装置、设备 | |
WO2012081165A1 (ja) | データベース管理装置及びデータベース管理方法 | |
CN113326262B (zh) | 基于键值数据库的数据处理方法、装置、设备及介质 | |
JP2008065716A (ja) | データ管理装置、データ管理方法及びデータ管理プログラム | |
Kvet | Database Block Management using Master Index |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |