CN104462141A - 一种数据存储与查询的方法、系统及存储引擎装置 - Google Patents
一种数据存储与查询的方法、系统及存储引擎装置 Download PDFInfo
- Publication number
- CN104462141A CN104462141A CN201310439224.8A CN201310439224A CN104462141A CN 104462141 A CN104462141 A CN 104462141A CN 201310439224 A CN201310439224 A CN 201310439224A CN 104462141 A CN104462141 A CN 104462141A
- Authority
- CN
- China
- Prior art keywords
- data
- data block
- index
- storage
- block
- 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
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000013500 data storage Methods 0.000 title claims abstract description 20
- 238000007906 compression Methods 0.000 claims abstract description 113
- 230000006835 compression Effects 0.000 claims abstract description 113
- 238000013507 mapping Methods 0.000 claims description 11
- 238000012986 modification Methods 0.000 claims description 5
- 230000004048 modification Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 15
- 238000012545 processing Methods 0.000 description 10
- 238000007796 conventional method Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 238000013144 data compression Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
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/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
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)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据存储与查询的方法,在数据块存储结构中,数据块头中预留有至少一个压缩槽;在索引块存储结构中,索引块包括索引块头和索引块本体;其中,数据存储方法包括:将接收到的原始数据文件按相似特征(如手机号段)划分成多个子数据文件;依次读取子数据文件中的每条数据,根据每条数据中的信息生成与所述每条数据对应的索引身份标识号码(ID),并根据所述索引ID查询索引树,获取与所述索引ID对应的数据块号,并将所述每条数据逐条存储到相应的数据块中。本发明还同时公开了一种数据存储与查询的系统及存储引擎装置。采用本发明,节约了大量的存储空间,降低了数据读取时计算机内存与外部存储的输入输出(IO)量。
Description
技术领域
本发明涉及通信及计算机领域数据存储技术,尤其涉及一种数据存储与查询的方法、系统及存储引擎装置。
背景技术
目前,存储数据可以采用数据库、文件系统等方式,在现有的数据存储方式中,数据是存储在数据库或文件系统划分的数据块中的。数据在存入数据块时,通过相关的存储管理算法实现存储,且数据记录是按行随机存放的,查询时通过构造的索引进行查询。以数据库为例,数据库的相关逻辑结构如图1所示,显然,在图1中,数据是按行存储的,索引中存储了行身份标识号码(ID,Identity),其中,所述行ID是唯一标志记录物理位置的ID。在进行常规表访问时,通过从索引里面找到的记录的行ID去查表,进而找到所要查找的数据。
但是,由于现有的数据存储方法使每个数据块中存储的数据是无规律的,因此,至少存在以下问题:
1、相似的数据存储于不同的数据块中。比如,一个用户某月的通用无线分组业务(General Packet Radio Service,GPRS)话单存储在多个数据块中,会造成块级数据冗余,消耗大量的存储空间;即使采用Oracle数据库的块级压缩技术进行去冗,也会因相似的数据存储在不同的块中而导致数据去冗率大大低于传统的数据字典去冗方法,海量数据消耗的存储空间依然巨大。
2、现有数据库或文件系统的存储结构影响了查询性能。如果进行多行数据的查询,则需要将存储相关数据的数据块全部找出;如查询1000条数据记录,最坏的情况下需要读取1000个数据块进行解析,这大大增加了系统的输入/输出(Input/Output,IO)量。
发明内容
有鉴于此,本发明实施例的主要目的在于提供一种数据存储与查询的方法、系统及存储引擎装置,能节约大量的存储空间,降低数据读取时的IO量。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种数据存储方法,在数据块存储结构中,数据块头中预留有至少一个压缩槽;在索引块存储结构中,索引块包括索引块头和索引块本体;所述方法还包括:
将接收到的原始数据文件划分成多个子数据文件;
依次读取子数据文件中的每条数据,根据每条数据中的信息生成与所述每条数据对应的索引身份标识号码ID,并根据所述索引ID查询索引树,获取与所述索引ID对应的数据块号,并将所述每条数据逐条存储到相应的数据块中。
优选地,所述索引块头中至少存储有数据块记录开始地址、数据块记录结束地址、以及数据块前映像地址;
所述索引块本体包括第一信息、第二信息、第二信息标识、开始数据块号和结束数据块号。
优选地,所述至少一个压缩槽对应一个压缩值段;在所述数据块头中还设置有存储下一个数据块地址的存储槽;
其中,所述压缩槽至少包括字段标识、字段长度和压缩值偏移地址;所述压缩值段用于存储所述至少一个压缩槽所对应的具体字段内容。
优选地,所述根据每条数据中的信息生成与所述每条数据对应的索引ID为:根据所述每条数据的第一信息和/或第二信息生成索引ID;
所述将每条数据逐条存储到相应的数据块中包括:判断所述数据块是否有可用存储空间,如果有可用存储空间,则将所述每条数据存储到所述数据块中;如果没有可用存储空间,则将所述每条数据存储到新分配的数据块中,同时在当前数据块的存储槽中记录新分配的数据块地址,并将索引块中存储的地址更新为指向新分配的数据块。
优选地,将所述每条数据存储到所述数据块中,包括:
判断当前字段值是否等于压缩槽所对应的相关字段值,如果等于,则将所述当前字段值存储为相关压缩值的指针;如果不等于,则判断是否还有未占用的压缩槽,如果有,则将所述当前字段值存储到压缩槽中,并将当前字段值存储为相关压缩值的指针;如果没有,则直接进行存储。
优选地,所述方法还包括:
在数据块中有未占用的压缩槽时,将重复率大于设定阈值的字段存储到压缩槽中。
本发明还提供了一种数据查询方法,在数据块存储结构中,数据块头中预留有至少一个压缩槽;在索引块存储结构中,索引块包括索引块头和索引块本体;所述方法还包括:
接收到查询指示时,根据索引ID定位所述索引ID对应的开始数据块号,依次读取开始数据块号至结束数据块号的数据。
优选地,所述索引块头中至少存储有数据块记录开始地址、数据块记录结束地址、以及数据块前映像地址;
所述索引块本体包括第一信息、第二信息、第二信息标识、开始数据块号和结束数据块号。
优选地,所述至少一个压缩槽对应一个压缩值段;在所述数据块头中还设置有存储下一个数据块地址的存储槽;
其中,所述压缩槽至少包括字段标识、字段长度和压缩值偏移地址;所述压缩值段用于存储所述至少一个压缩槽所对应的具体字段内容。
优选地,所述方法还包括:
在索引块或数据块处于修改状态时,接收到查询指示后,读取相应的数据块前映像地址对应的数据。
本发明还提供了一种存储引擎装置,在数据块存储结构中,数据块头中预留有至少一个压缩槽;在索引块存储结构中,索引块包括索引块头和索引块本体;所述存储引擎装置包括读取模块、获取模块、存储模块;其中,
所述读取模块,用于依次读取子数据文件中的每条数据;
所述获取模块,用于根据生成的索引ID查询索引树,获取与所述索引ID对应的数据块号;
所述存储模块,用于将所述每条数据逐条存储到相应的数据块中。
优选地,所述存储引擎装置还包括索引ID生成模块和判定模块;其中,
所述索引ID生成模块,用于根据所述每条数据中的信息生成索引ID;
所述判定模块,用于判断所述数据块是否有可用存储空间;如果有可用存储空间,判定将所述每条数据存储到所述数据块中;如果没有可用存储空间,判定将所述每条数据存储到新分配的数据块中,同时在当前数据块的存储槽中记录新分配的数据块地址,并将索引块中存储的地址更新为指向新分配的数据块。
优选地,所述判定模块,还用于在判定将所述每条数据存储到所述数据块中时,判断当前字段值是否等于压缩槽所对应的相关字段值,如果等于,则判定将所述当前字段值存储为相关压缩值的指针;如果不等于,则判断是否还有未占用的压缩槽,如果有,则判定将所述当前字段值存储到压缩槽中,并将当前字段值存储为相关压缩值的指针;如果没有,则判定直接进行存储。
优选地,所述存储模块,还用于在数据块中有未占用的压缩槽时,将重复率大于设定阈值的字段存储到压缩槽中。
本发明还提供了一种数据存储与查询的系统,所述系统包括拆分装置、存储引擎装置和查询引擎装置;其中,
所述存储引擎装置为上文所述的存储引擎装置;
所述拆分装置,用于将接收到的原始数据文件划分成多个子数据文件;
所述查询引擎装置,用于接收到查询指示时,根据索引ID定位与所述索引ID对应的开始数据块号,依次读取开始数据块号至结束数据块号的数据;在索引块或数据块处于修改状态时,接收到查询指示后,读取相应的数据块前映像地址对应的数据。
本发明实施例所提供的数据存储与查询的方法、系统及存储引擎装置,通过设计有效的索引块存储结构、特定格式的数据块存储结构,能有序、高效地存储数据和压缩数据,节约了大量的存储空间,同时实现了随机查询数据功能,降低了数据读取时的IO量。另外,可以采用常规的压缩算法进一步压缩所存储的数据,如此,在中央处理器(Central Processing Unit,CPU)资源比较充足的情况下还可以进一步降低IO量,节约更多存储空间。
此外,本发明实施例尤其适用于对海量数据的存储和查询,比如:GPRS话单、语音话单、短信话单、彩信话单、公积金清单等等,该类数据主要特点为随机存入、顺序读取、主要提供查询服务。
附图说明
图1为现有技术中数据库的相关逻辑结构示意图;
图2为本发明实施例索引树及索引块结构示意图;
图3为本发明实施例数据块结构示意图;
图4为本发明实施例存储目录结构示意图;
图5为本发明实施例存储引擎装置的组成结构示意图;
图6为本发明实施例数据存储与查询系统的组成结构示意图;
图7为本发明实施例数据存储与查询系统的具体工作流程示意图;
图8为本发明实施例存储引擎装置处理流程示意图;
图9为本发明实施例查询引擎装置处理流程示意图;
图10为本发明实施例查询某用户号码的示意图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步详细的说明。
本发明实施例提供了一种索引块存储结构,索引块包括索引块头和索引块本体;其中,在索引块头中至少存储有数据块记录开始地址、数据块记录结束地址、以及数据块前映像地址;所述索引块本体包括第一信息、第二信息、第二信息标识、开始数据块号和结束数据块号。
这里,所述索引块的大小可根据实际需要设定,但必须为操作系统数据块的整数倍;比如,所述索引块的大小可以为64k。
这里,以存储GPRS话单为例,此时,所述第一信息为用户号码,所述第二信息为账期。
图2为本发明实施例索引树及索引块存储结构示意图,如图2所示,所述索引记录格式包括用户号码、账期、账期标识、开始块号和结束块号;其中,
所述账期标识主要用于标志是否为当前月;开始块号用于记录该用户号码当前账期开始数据记录的存储块地址;结束块号用于记录该用户号码当前账期最后数据记录的存储块地址。
优选的,上述用户号码、账期、账期标识、开始块号和结束块号的字段均为定长。
优选的,在索引块头中存储有至少下述信息:数据块记录开始地址、数据块记录结束地址、以及数据块前映像地址。
在图2中,索引树以1522534xxxx号段为例,该号段有10000个用户号码,当然,在索引树的根节点上还有全号段的索引。
具体的,图2中的10000个用户号码分为两组进行存储:0000~5000为第一组,5001~10000为第二组。所述0000~5000又细分为50个小组,且每100个号段为一个小组,如:0000~0100、0101~0200、...、4501~5000。
采用本发明实施例所述的索引块记录格式,在对话单进行存入时,只需以当前月为索引进行数据存储。具体存储过程可参见图8所示的流程,在此不再赘述。
本发明实施例还提供了一种数据块存储结构,所述数据块包括数据块头和数据记录块;其中,所述数据记录块用于存储未经压缩的数据。
具体的,数据块头中预留有至少一个压缩槽;所述压缩槽至少包括字段标识、字段长度和压缩值偏移地址;并且,所述至少一个压缩槽对应一个压缩值段,所述压缩值段用于存储所述至少一个压缩槽所对应的具体字段内容。
优选的,当一个数据块中的压缩槽已满、但压缩值段还有空间可以存储数据时,或压缩值段已满而有压缩槽剩余时,后续数据都将不再进行压缩存储。
这里,压缩槽数量可以在数据块初始化时根据实际情况进行设定。
另外,在所述数据块头中还设置有存储下一个数据块地址的存储槽。其中,在最后一个数据块中,所述下一个数据块的地址为空。
采用上述数据块存储结构,不仅能够节省大量存储空间,也相当于对数据进行了高效的压缩。
比如,某字段占500个字节,第一次存储该字段时,将该字段的字段标识、字段长度和压缩值偏移地址写入压缩槽中,并将该字段的具体内容写入压缩值段中;待以后再次出现该字段时,只需在数据块的数据记录块中存储该字段的地址即可,而每个地址一般只需占2个字节。采用本发明实施例所述方法存储100个500字节的字段时,总共需要占用700个字节;而采用常规方法进行存储时,需占用500×100=50000个字节。
图3为本发明实施例数据块存储结构示意图,如图3所示,所述压缩槽包括有字段标识、字段长度和压缩值偏移地址。显然,在图3中有两个压缩槽,该数据块包括数据记录块和两个压缩槽。
这里,所述压缩槽用于记录重复值在数据块内的存储地址、长度及标识号。
优选的,每个数据块存储有指向下一个数据块的地址;其中,在最后一个数据块中,所述下一个数据块的地址为空。
优选的,一个字段可以对应多个压缩槽,从而可以存储一个列中的多种重复出现的值。如果同一个数据块存储的是同一号码的数据,重复的数据概率将大大提高,压缩的比率也将提高。比如:话单中的国际移动用户识别码(International Mobile Subscriber Identification,IMSI)字段,由于同一个号码的IMSI完全相同,所以只需占用一个压缩槽。再比如:话单中存在接入点字段时,当所有号码的接入点为CMWAP、CMNET时,需占用两个压缩槽,一个压缩槽用来存储CMWAP,另一压缩槽用来存储CMNET。这里,所述CMWAP和CMNET是中国移动用户常用的接入GPRS网络的两种方式。
图4为本发明实施例存储目录结构示意图,如图4所示,每个号段对应一个目录,每个目录下可设置有多个文件,用于存储每月的话单数据。
这里,所述每个目录下所设置的文件数可根据实际需要进行设定。所述存储目录的底层可依托与Linux文件系统。
比如,在图7中,15222534号段对应一个目录,该目录下设置有6个文件,如1522534_01、1522534_02、...、1522534_06,所述6个文件分别对应6个月内该号段号码的话单。
如果在线查询的账期时间更长,可以存储更多的账期文件,比如,可建立12个文件,对该号段的1~12月的话单均进行记录。
在上述索引块存储结构、数据块存储结构的基础上,本发明实施例提供了一种数据存储方法,所述方法包括:
将接收到的原始数据文件划分成多个子数据文件;
依次读取子数据文件中的每条数据,根据每条数据中的信息生成与所述每条数据对应的索引ID,并根据所述索引ID查询索引树,获取与所述索引ID对应的数据块号,并将所述每条数据逐条存储到相应的数据块中,以使相似数据存储在逻辑上连续的数据块链中。
具体的,接收到原始数据文件后,可按类别将所述原始数据文件划分成多个子数据文件。比如,原始数据文件为原始话单文件时,可按照号段将原始话单文件拆分成多个号段话单文件。
这里,收到原始数据文件后,也可以按某类相似特性将所述原始数据文件划分成多个子数据文件。比如,所述某类相似特性可以为手机号段。
这里,根据每条数据中的信息生成与所述每条数据对应的索引ID为:根据所述每条数据的第一信息和/或第二信息生成索引ID;
其中,所述每条数据中均包含有各类信息,如:用户号码、账期、业务费用等信息;所述第一信息、第二信息分别为每条数据中包含的某种信息,相应的,所述生成索引ID为直接将某种信息作为索引ID、或将信息的组合作为索引ID。举例来说,在存储用户话单文件时,每条数据中都包含有用户号码、账期、各业务费用等信息,那么,当第一信息为用户号码、第二信息为账期时,根据所述每条数据的第一信息和第二信息生成的索引ID为两个信息的组合,也就是说,索引ID为“用户号码+账期”。
这里,所述将每条数据逐条存储到相应的数据块中包括:判断该数据块是否有可用存储空间,如果有可用存储空间,则将所述每条数据存储到该数据块中;如果没有可用存储空间,则将所述每条数据存储到新分配的数据块中,同时在当前数据块的存储槽中记录新分配的数据块地址,并将索引块中存储的地址更新为指向新分配的数据块。
具体的,所述将所述每条数据存储到该数据块中,包括:判断当前字段值是否等于压缩槽所对应的相关字段值,如果等于,则将所述当前字段值存储为相关压缩值的指针;如果不等于,则判断是否还有未占用的压缩槽,如果有,则将所述当前字段值存储到压缩槽中,并将当前字段值存储为相关压缩值的指针;如果没有,则直接进行存储。
优选的,所述方法还包括:在数据块中有未占用的压缩槽时,将重复率大于设定阈值的字段存储到压缩槽中。
在上述索引块存储结构、数据块存储结构的基础上,本发明实施例还提供了一种数据查询方法,所述方法包括:
接收到查询指示时,根据索引ID定位该索引ID对应的开始数据块号,依次读取开始数据块号至结束数据块号的数据。
优选的,所述方法还包括:在索引块或数据块处于修改状态时,接收到查询指示后,读取相应的数据块前映像地址对应的数据。
优选的,所述方法还包括:未找到该索引ID对应的开始数据块号时,返回查询失败消息。
在上文所述索引块存储结构、数据块存储结构的基础上,本发明还提出了一种存储引擎装置、以及一种存储与查询的系统。
图5为本发明实施例存储引擎装置的组成结构示意图,如图5所示,所述存储引擎装置包括读取模块51、获取模块52、存储模块53;其中,
所述读取模块51,用于依次读取子数据文件中的每条数据;
所述获取模块52,用于根据生成的索引ID查询索引树,获取与所述索引ID对应的数据块号;
所述存储模块53,用于将所述每条数据逐条存储到相应的数据块中。
优选的,所述存储引擎装置还包括索引ID生成模块54和判定模块55;其中,
所述索引ID生成模块54,用于根据所述每条数据中的信息生成索引ID;
所述判定模块55,用于判断该数据块是否有可用存储空间,如果有可用存储空间,则判定将所述每条数据存储到该数据块中;如果没有可用存储空间,则判定将所述每条数据存储到新分配的数据块中,同时在当前数据块的存储槽中记录新分配的数据块地址,并将索引块中存储的地址更新为指向新分配的数据块。
优选的,所述判定模块55,还用于在判定将所述每条数据存储到该数据块中时,判断当前字段值是否等于压缩槽所对应的相关字段值,如果等于,则判定将所述当前字段值存储为相关压缩值的指针;如果不等于,则判断是否还有未占用的压缩槽,如果有,则判定将所述当前字段值存储到压缩槽中,并将当前字段值存储为相关压缩值的指针;如果没有,则判定直接进行存储。
具体的,所述索引ID生成模块54,具体用于根据所述每条数据的第一信息和/或第二信息生成索引ID。
实际应用中,所述读取模块51、获取模块52、索引ID生成模块54、判定模块55可由数据库所属终端中的中央处理器(CPU,Central Processing Unit)、微处理器(MPU,Micro Processor Unit)、数字信号处理器(DSP,Digital SignalProcessor)或现场可编程门阵列(FPGA,Field Programmable Gate Array)实现;
所述存储模块53可由数据库所属终端中的存储介质实现,比如:各种类型的存储器。
图6为本发明实施例数据压缩、存储与查询系统的组成结构示意图,如图6所示,所述系统包括:拆分装置61、存储引擎装置62和查询引擎装置63;其中,
所述拆分装置61,用于接收到原始数据文件后,将所述原始数据文件分成多个子数据文件;
所述存储引擎装置62,用于对所述多个子数据文件进行存储;
所述查询引擎装置63,用于接收到查询指示时,根据索引ID定位该索引ID对应的开始数据块号,依次读取开始数据块号至结束数据块号的数据。
这里,所述存储引擎装置62的具体的组成结构如图5所示。
图7示出了所述系统的工作流程示意图,在进行原始话单数据文件存储时,拆分装置将所述原始话单数据拆分为多个号段话单文件,存储引擎装置查询压缩配置表,并根据索引树结构分别对各个号段话单文件进行存储,所述存储过程如图7中标号1~6所示流程;在进行话单数据查询时,查询引擎装置根据查询条件生成索引ID,并查询索引树结构,然后从存储文件中进行数据查询,所述查询过程如图7中标号7~8所示流程。
下面以存储、查询用户话单文件为例,来说明图6所述系统的工作流程。具体的,该流程包括以下步骤:
a)、拆分装置读取原始话单文件后,根据号段将所述原始话单文件拆分成多个号段话单文件,并将所述多个号段话单文件发送至存储引擎装置进行处理。
这里,拆分的目的主要是为了实现多个存储引擎装置的并行处理,以避免多个存储引擎装置同时对同一个号码的数据进行处理而导致块内数据存储内容遭到不一致破坏进而造成存储数据损坏。
b)、存储引擎装置按条读取号段话单文件中的数据,通过号码+账期,生成索引ID并查询索引树,在索引叶节点获取该条话单的当前号码、当前账期的数据块号,然后判断该数据块是否有可用空间,如果有可用空间,则将数据存入该数据块中;如果无可用空间时,则调用操作系统函数分配空数据块并初始化为指定格式,并在当前数据块的下一(next)块指针中写入新分配的数据块号,同时根据新分配的数据块号修改索引块中的记录信息,完成上述操作后将数据存入新数据块。
具体的,在存入数据时,判断该数据块是否有可用存储空间,如果有可用存储空间,则判断当前字段值是否等于压缩槽所对应的相关字段值,如果等于,则将所述当前字段值存储为相关压缩值的指针;如果不等于,则判断是否还有未占用的压缩槽,如果有,则将所述当前字段值存储到压缩槽中,将所述当前字段值存储为相关压缩值的指针;如果没有,则直接进行存储。如果没有可用存储空间,则将数据写入新分配的数据块中,同时在当前数据块的存储槽中记录新分配的数据块地址,并修改索引块头中存储的地址。
这里,可将重复率高于设定阈值的字段存储在压缩槽中,如此,有效提高了块压缩率。
举例来说,某数据块有三个压缩槽:压缩槽1、压缩槽2、压缩槽3;其中,在压缩槽1中,已存储数据a的压缩值偏移地址和字段长度;在压缩槽2中,已存储数据b的压缩值偏移地址和字段长度。当有数据a、b、c、c、d写入时,可在数据记录中直接写入数据a的压缩值偏移地址、数据b的压缩值偏移地址;若压缩槽3尚未写入字段时,由于数据c的重复率大于数据d的重复率,可在压缩槽3中填写数据c的字段标识、压缩值偏移地址和字段长度,并将数据c写入压缩值段中,在对第二个数据c进行存储时,在数据记录中写入数据c的压缩值偏移地址;由于该数据块中只有三个压缩槽,三个压缩槽均已被占用,只能将数据d写入数据记录中。
此外,存储引擎装置还用于进行账期切换,如果当前号码的账期无法在索引中定位,则建立新的账期文件,分配格式化的数据块,并对最远账期的索引指针进行修改,指向新建的账期文件中的数据块;这里,存储引擎装置在进行索引块和数据块修改时,均拷贝相关数据块的前映像,以供查询时即时读取数据。
图8为本发明实施例存储引擎装置处理流程示意图,如图8所示,所述存储引擎装置处理流程包括以下步骤:
步骤801:存储引擎装置接收到拆分装置提供的号段话单文件;
假设某一时间产生一批话单数据,需要对这批话单数据进行存储,拆分装置根据号段将这批话单数据拆分成多个号段话单文件。
步骤802:从索引中查找当前号码的当前月指针,如果查找到,执行步骤803,如果没有查找到,执行步骤809;
这里,所述号码为该存储引擎装置对应的号段中的号码。
步骤803:判断该当前号码的索引结束指针指向的数据块是否已满,如果已满,执行步骤811,如果未满,执行步骤804;
这里,判断数据块是否已满,即判断数据块是否有可用存储空间。
步骤804:判断当前存入数据是否与压缩槽对应字段数据相等,如果是,执行步骤810,如果否,执行步骤805;
步骤805:判断是否有未占用的压缩槽,如果没有,执行步骤807;如果有,执行步骤806;
步骤806:判断压缩值段是否有剩余空间,如果没有,执行步骤807,否则,执行步骤808;
步骤807:不对数据进行压缩,在数据记录块中直接写入数据,然后进入步骤812;
步骤808:将未占用的压缩槽修改为当前值,在数据记录块中写入指向压缩值的指针,拷贝数据块前映像,写入数据,清除数据块前映像;然后进入步骤812;
这里,为了确保查询引擎装置能够实时查询数据,在进行数据块或索引块修改时,需拷贝数据前映像。
步骤809:按当月时间建立当月文件,修改最远账期的索引指针指向新分配数据块;然后执行步骤810;
步骤810:在数据记录块中写入当前数据对应的压缩值的指针,拷贝数据块前映像,写入数据,清除数据块前映像;然后进入步骤812;
步骤811:调用操作系统函数分配新数据块并初始化,修改当前数据块及索引块指针指向新数据块,拷贝数据块前映像,写入数据,清除数据块前映像;然后进入步骤812;
步骤812:存储结束。
c)、查询引擎装置通过号码+账期的查询条件定位到该号码的开始数据块号,并依次读取数据串至结束数据块号,然后返回所读取的数据。
具体的,若查询引擎装置在查询时,存储引擎装置正在修改数据块或索引块,则查询引擎装置读取相关数据块的前映像。
图9为本发明实施例查询引擎装置处理流程示意图,如图9所示,所述查询引擎装置处理流程包括以下步骤:
步骤901:根据号码及账期从索引树中定位数据块开始指针;然后进入步骤902;
步骤902:判断是否找到数据,如果找到数据,执行步骤903,如果未找到,执行步骤905;
步骤903:读取该号码对应账期的开始指针至结束指针的数据;然后,执行步骤904;
步骤904:返回所读取的数据,结束当前处理流程;
也就是说,返回用户查询的账单。
步骤905:返回查询失败消息。
也就是说,在所述查询引擎装置未找到用户查询的账单时,会返回查询失败信息消息。
图10示出了查询某用户号码话单的示意图,如图10所示,当查询号码为1525340001的1~6月份的话单时,根据(1525340001)+(1~6)从索引树中找到数据块开始指针以及结束指针,然后读取所述开始指针至结束指针的数据,即可查询出号码为1525340001的1~6月份的详细话单。
d)、如果需要增加号段,则采用二叉数相关算法,由索引维护进程完成索引树的节点构建及相关号段数据文件的建立。
e)、对于已存储的数据,如需要进行修改,存储引擎装置先对原始文件进行删除,然后再进行插入操作。
这里,先对原始文件进行删除,然后再进行插入操作,将会导致部分数据块存在碎片。因此,可以在系统维护期间进行碎片整理,以提升系统性能。
通过上述技术方案,通过对相似数据进行分拆归类,存储引擎装置检索数据分布,实时动态地把相似的数据顺序存储在同一个数据块中或连续的数据块中,节省了大量的存储空间;同时减少了查询时的IO量,使得在查询类应用中数据的存储使用量大幅下降,同时查询效率大幅提升。并且,在CPU资源比较充足的情况下还可以采用常规压缩算法进一步压缩降低IO量,节约更多存储空间。
以GPRS话单数据为例,对于一个8k的数据块来说,按常规方法只能存储50至60条GPRS话单数据,而采用本发明所述技术方案,可以存储120至180条GPRS话单数据;采用常规方法读取一个300条的GPRS话单时,最坏情况要读300个数据块,而采用本发明所述技术方案,最坏情况只需读取3个数据块。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (15)
1.一种数据存储方法,其特征在于,在数据块存储结构中,数据块头中预留有至少一个压缩槽;在索引块存储结构中,索引块包括索引块头和索引块本体;所述方法还包括:
将接收到的原始数据文件划分成多个子数据文件;
依次读取子数据文件中的每条数据,根据每条数据中的信息生成与所述每条数据对应的索引身份标识号码ID,并根据所述索引ID查询索引树,获取与所述索引ID对应的数据块号,并将所述每条数据逐条存储到相应的数据块中。
2.根据权利要求1所述的方法,其特征在于,所述索引块头中至少存储有数据块记录开始地址、数据块记录结束地址、以及数据块前映像地址;
所述索引块本体包括第一信息、第二信息、第二信息标识、开始数据块号和结束数据块号。
3.根据权利要求1所述的方法,其特征在于,所述至少一个压缩槽对应一个压缩值段;在所述数据块头中还设置有存储下一个数据块地址的存储槽;
其中,所述压缩槽至少包括字段标识、字段长度和压缩值偏移地址;所述压缩值段用于存储所述至少一个压缩槽所对应的具体字段内容。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述根据每条数据中的信息生成与所述每条数据对应的索引ID为:根据所述每条数据的第一信息和/或第二信息生成索引ID;
所述将每条数据逐条存储到相应的数据块中包括:判断所述数据块是否有可用存储空间,如果有可用存储空间,则将所述每条数据存储到所述数据块中;如果没有可用存储空间,则将所述每条数据存储到新分配的数据块中,同时在当前数据块的存储槽中记录新分配的数据块地址,并将索引块中存储的地址更新为指向新分配的数据块。
5.根据权利要求4所述的方法,其特征在于,将所述每条数据存储到所述数据块中,包括:
判断当前字段值是否等于压缩槽所对应的相关字段值,如果等于,则将所述当前字段值存储为相关压缩值的指针;如果不等于,则判断是否还有未占用的压缩槽,如果有,则将所述当前字段值存储到压缩槽中,并将当前字段值存储为相关压缩值的指针;如果没有,则直接进行存储。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在数据块中有未占用的压缩槽时,将重复率大于设定阈值的字段存储到压缩槽中。
7.一种数据查询方法,其特征在于,在数据块存储结构中,数据块头中预留有至少一个压缩槽;在索引块存储结构中,索引块包括索引块头和索引块本体;所述方法还包括:
接收到查询指示时,根据索引ID定位所述索引ID对应的开始数据块号,依次读取开始数据块号至结束数据块号的数据。
8.根据权利要求7所述的方法,其特征在于,所述索引块头中至少存储有数据块记录开始地址、数据块记录结束地址、以及数据块前映像地址;
所述索引块本体包括第一信息、第二信息、第二信息标识、开始数据块号和结束数据块号。
9.根据权利要求7所述的方法,其特征在于,所述至少一个压缩槽对应一个压缩值段;在所述数据块头中还设置有存储下一个数据块地址的存储槽;
其中,所述压缩槽至少包括字段标识、字段长度和压缩值偏移地址;所述压缩值段用于存储所述至少一个压缩槽所对应的具体字段内容。
10.根据权利要求7至9任一项所述的方法,其特征在于,所述方法还包括:
在索引块或数据块处于修改状态时,接收到查询指示后,读取相应的数据块前映像地址对应的数据。
11.一种存储引擎装置,其特征在于,在数据块存储结构中,数据块头中预留有至少一个压缩槽;在索引块存储结构中,索引块包括索引块头和索引块本体;所述存储引擎装置包括读取模块、获取模块、存储模块;其中,
所述读取模块,用于依次读取子数据文件中的每条数据;
所述获取模块,用于根据生成的索引ID查询索引树,获取与所述索引ID对应的数据块号;
所述存储模块,用于将所述每条数据逐条存储到相应的数据块中。
12.根据权利要求11所述的存储引擎装置,其特征在于,所述存储引擎装置还包括索引ID生成模块和判定模块;其中,
所述索引ID生成模块,用于根据所述每条数据中的信息生成索引ID;
所述判定模块,用于判断所述数据块是否有可用存储空间;如果有可用存储空间,判定将所述每条数据存储到所述数据块中;如果没有可用存储空间,判定将所述每条数据存储到新分配的数据块中,同时在当前数据块的存储槽中记录新分配的数据块地址,并将索引块中存储的地址更新为指向新分配的数据块。
13.根据权利要求12所述的存储引擎装置,其特征在于,所述判定模块,还用于在判定将所述每条数据存储到所述数据块中时,判断当前字段值是否等于压缩槽所对应的相关字段值,如果等于,则判定将所述当前字段值存储为相关压缩值的指针;如果不等于,则判断是否还有未占用的压缩槽,如果有,则判定将所述当前字段值存储到压缩槽中,并将当前字段值存储为相关压缩值的指针;如果没有,则判定直接进行存储。
14.根据权利要求11所述的存储引擎装置,其特征在于,所述存储模块,还用于在数据块中有未占用的压缩槽时,将重复率大于设定阈值的字段存储到压缩槽中。
15.一种数据存储与查询的系统,其特征在于,所述系统包括拆分装置、存储引擎装置和查询引擎装置;其中,
所述存储引擎装置为权11至权14任一项所述的存储引擎装置;
所述拆分装置,用于将接收到的原始数据文件划分成多个子数据文件;
所述查询引擎装置,用于接收到查询指示时,根据索引ID定位与所述索引ID对应的开始数据块号,依次读取开始数据块号至结束数据块号的数据;在索引块或数据块处于修改状态时,接收到查询指示后,读取相应的数据块前映像地址对应的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310439224.8A CN104462141B (zh) | 2013-09-24 | 2013-09-24 | 一种数据存储与查询的方法、系统及存储引擎装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310439224.8A CN104462141B (zh) | 2013-09-24 | 2013-09-24 | 一种数据存储与查询的方法、系统及存储引擎装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104462141A true CN104462141A (zh) | 2015-03-25 |
CN104462141B CN104462141B (zh) | 2018-05-22 |
Family
ID=52908197
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310439224.8A Active CN104462141B (zh) | 2013-09-24 | 2013-09-24 | 一种数据存储与查询的方法、系统及存储引擎装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104462141B (zh) |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016180174A1 (zh) * | 2015-08-10 | 2016-11-17 | 中兴通讯股份有限公司 | 语音文件同步的方法和装置 |
CN106156301A (zh) * | 2016-06-30 | 2016-11-23 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
CN106682070A (zh) * | 2016-11-14 | 2017-05-17 | 浙江浙大中控信息技术有限公司 | 一种历史平均值管理系统及管理方法 |
CN107038224A (zh) * | 2017-03-29 | 2017-08-11 | 腾讯科技(深圳)有限公司 | 数据处理方法及数据处理装置 |
WO2018001085A1 (zh) * | 2016-06-30 | 2018-01-04 | 中兴通讯股份有限公司 | 数据存储方法和装置、数据查找请求的处理方法和装置 |
CN108052643A (zh) * | 2017-12-22 | 2018-05-18 | 北京奇虎科技有限公司 | 基于LSM Tree结构的数据存储方法、装置及存储引擎 |
CN109597566A (zh) * | 2017-09-30 | 2019-04-09 | 杭州海康威视系统技术有限公司 | 一种数据读取、存储方法及装置 |
CN109712674A (zh) * | 2019-01-14 | 2019-05-03 | 深圳市泰尔迪恩生物信息科技有限公司 | 注释数据库索引结构、快速注释遗传变异的方法及系统 |
CN109918373A (zh) * | 2019-02-02 | 2019-06-21 | 上海达梦数据库有限公司 | 数据存储方法、装置、服务器和存储介质 |
CN110709829A (zh) * | 2017-06-05 | 2020-01-17 | 北京嘀嘀无限科技发展有限公司 | 一种数据处理的系统和方法 |
CN110866127A (zh) * | 2018-08-27 | 2020-03-06 | 华为技术有限公司 | 建立索引的方法以及相关装置 |
CN110888862A (zh) * | 2019-11-26 | 2020-03-17 | 深圳市随手金服信息科技有限公司 | 数据存储、查询方法、装置、服务器和存储介质 |
CN111046074A (zh) * | 2019-12-13 | 2020-04-21 | 北京百度网讯科技有限公司 | 流式数据处理方法、装置、设备和介质 |
CN111158606A (zh) * | 2019-12-31 | 2020-05-15 | 广州鼎甲计算机科技有限公司 | 存储方法、装置、计算机设备和存储介质 |
CN111241108A (zh) * | 2020-01-16 | 2020-06-05 | 北京百度网讯科技有限公司 | 基于键值对kv系统的索引方法、装置、电子设备和介质 |
CN111444198A (zh) * | 2020-06-15 | 2020-07-24 | 支付宝(杭州)信息技术有限公司 | 一种基于中心化块链式账本的交易存储、查询方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040187075A1 (en) * | 2003-01-08 | 2004-09-23 | Maxham Jason G. | Document management apparatus, system and method |
CN101169628A (zh) * | 2007-11-14 | 2008-04-30 | 中控科技集团有限公司 | 一种数据保存方法和装置 |
CN101320372A (zh) * | 2008-05-22 | 2008-12-10 | 上海爱数软件有限公司 | 一种重复数据的压缩方法 |
CN101533408A (zh) * | 2009-04-21 | 2009-09-16 | 北京四维图新科技股份有限公司 | 一种海量数据的处理方法及处理装置 |
CN102779180A (zh) * | 2012-06-29 | 2012-11-14 | 华为技术有限公司 | 数据存储系统的操作处理方法,数据存储系统 |
-
2013
- 2013-09-24 CN CN201310439224.8A patent/CN104462141B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040187075A1 (en) * | 2003-01-08 | 2004-09-23 | Maxham Jason G. | Document management apparatus, system and method |
CN101169628A (zh) * | 2007-11-14 | 2008-04-30 | 中控科技集团有限公司 | 一种数据保存方法和装置 |
CN101320372A (zh) * | 2008-05-22 | 2008-12-10 | 上海爱数软件有限公司 | 一种重复数据的压缩方法 |
CN101533408A (zh) * | 2009-04-21 | 2009-09-16 | 北京四维图新科技股份有限公司 | 一种海量数据的处理方法及处理装置 |
CN102779180A (zh) * | 2012-06-29 | 2012-11-14 | 华为技术有限公司 | 数据存储系统的操作处理方法,数据存储系统 |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016180174A1 (zh) * | 2015-08-10 | 2016-11-17 | 中兴通讯股份有限公司 | 语音文件同步的方法和装置 |
CN106156301A (zh) * | 2016-06-30 | 2016-11-23 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
WO2018001085A1 (zh) * | 2016-06-30 | 2018-01-04 | 中兴通讯股份有限公司 | 数据存储方法和装置、数据查找请求的处理方法和装置 |
CN106156301B (zh) * | 2016-06-30 | 2019-07-09 | 上海达梦数据库有限公司 | 一种大字段数据的处理方法及装置 |
CN106682070A (zh) * | 2016-11-14 | 2017-05-17 | 浙江浙大中控信息技术有限公司 | 一种历史平均值管理系统及管理方法 |
CN107038224A (zh) * | 2017-03-29 | 2017-08-11 | 腾讯科技(深圳)有限公司 | 数据处理方法及数据处理装置 |
CN110709829A (zh) * | 2017-06-05 | 2020-01-17 | 北京嘀嘀无限科技发展有限公司 | 一种数据处理的系统和方法 |
CN110709829B (zh) * | 2017-06-05 | 2022-10-25 | 北京嘀嘀无限科技发展有限公司 | 一种数据处理的系统和方法 |
CN109597566A (zh) * | 2017-09-30 | 2019-04-09 | 杭州海康威视系统技术有限公司 | 一种数据读取、存储方法及装置 |
CN109597566B (zh) * | 2017-09-30 | 2022-03-04 | 杭州海康威视系统技术有限公司 | 一种数据读取、存储方法及装置 |
CN108052643A (zh) * | 2017-12-22 | 2018-05-18 | 北京奇虎科技有限公司 | 基于LSM Tree结构的数据存储方法、装置及存储引擎 |
CN108052643B (zh) * | 2017-12-22 | 2021-02-23 | 北京奇虎科技有限公司 | 基于LSM Tree结构的数据存储方法、装置及存储引擎 |
CN110866127A (zh) * | 2018-08-27 | 2020-03-06 | 华为技术有限公司 | 建立索引的方法以及相关装置 |
CN109712674A (zh) * | 2019-01-14 | 2019-05-03 | 深圳市泰尔迪恩生物信息科技有限公司 | 注释数据库索引结构、快速注释遗传变异的方法及系统 |
CN109712674B (zh) * | 2019-01-14 | 2023-06-30 | 深圳市泰尔迪恩生物信息科技有限公司 | 注释数据库索引结构、快速注释遗传变异的方法及系统 |
CN109918373A (zh) * | 2019-02-02 | 2019-06-21 | 上海达梦数据库有限公司 | 数据存储方法、装置、服务器和存储介质 |
CN110888862A (zh) * | 2019-11-26 | 2020-03-17 | 深圳市随手金服信息科技有限公司 | 数据存储、查询方法、装置、服务器和存储介质 |
CN111046074A (zh) * | 2019-12-13 | 2020-04-21 | 北京百度网讯科技有限公司 | 流式数据处理方法、装置、设备和介质 |
CN111046074B (zh) * | 2019-12-13 | 2023-09-01 | 北京百度网讯科技有限公司 | 流式数据处理方法、装置、设备和介质 |
CN111158606A (zh) * | 2019-12-31 | 2020-05-15 | 广州鼎甲计算机科技有限公司 | 存储方法、装置、计算机设备和存储介质 |
CN111241108A (zh) * | 2020-01-16 | 2020-06-05 | 北京百度网讯科技有限公司 | 基于键值对kv系统的索引方法、装置、电子设备和介质 |
CN111241108B (zh) * | 2020-01-16 | 2023-12-26 | 北京百度网讯科技有限公司 | 基于键值对kv系统的索引方法、装置、电子设备和介质 |
CN111444198A (zh) * | 2020-06-15 | 2020-07-24 | 支付宝(杭州)信息技术有限公司 | 一种基于中心化块链式账本的交易存储、查询方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104462141B (zh) | 2018-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104462141B (zh) | 一种数据存储与查询的方法、系统及存储引擎装置 | |
CN102906751B (zh) | 一种数据存储、数据查询的方法及装置 | |
CN107515901B (zh) | 一种链式日志存储结构及其哈希索引结构、数据操作方法及服务器、介质 | |
CN102867071B (zh) | 一种网管海量历史数据管理方法 | |
CN110196847A (zh) | 数据处理方法和装置、存储介质及电子装置 | |
US11625412B2 (en) | Storing data items and identifying stored data items | |
CN110235098A (zh) | 存储系统访问方法及装置 | |
CN111241090B (zh) | 存储系统中管理数据索引的方法和装置 | |
CN113297278A (zh) | 时序数据库、数据处理方法、存储设备及计算机程序产品 | |
CN114490060A (zh) | 内存分配方法、装置、计算机设备和计算机可读存储介质 | |
CN110413711A (zh) | 一种差异数据获取方法及其存储介质 | |
CN104077082A (zh) | 网络投票数据存储方法和装置 | |
CN110199270A (zh) | 存储系统中存储设备的管理方法及装置 | |
CN116756253B (zh) | 关系型数据库的数据存储、查询方法、装置、设备和介质 | |
CN111597129B (zh) | 缓存管理方法、装置、存储介质和固态非易失存储设备 | |
CN115454353B (zh) | 一种面向空间应用数据的高速写入及查询方法 | |
CN116185305A (zh) | 业务数据存储方法、装置、计算机设备和存储介质 | |
CN107181715B (zh) | 一种业务校验方法和装置 | |
CN112069510B (zh) | 一种数据加密排重方法 | |
CN102402511B (zh) | 一种存储业务数据的方法及系统 | |
CN110990394B (zh) | 分布式面向列数据库表的行数统计方法、装置和存储介质 | |
CN113849477A (zh) | 签到管理方法、装置、电子设备及存储介质 | |
CN115587390B (zh) | 一种公有云对象存储的实现方法 | |
US20240320203A1 (en) | Method for data processing, database system, computer equipment, and storage medium | |
US20240061823A1 (en) | Memory-frugal index design in storage engine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |