CN109241098B - 一种分布式数据库的查询优化方法 - Google Patents
一种分布式数据库的查询优化方法 Download PDFInfo
- Publication number
- CN109241098B CN109241098B CN201810896484.0A CN201810896484A CN109241098B CN 109241098 B CN109241098 B CN 109241098B CN 201810896484 A CN201810896484 A CN 201810896484A CN 109241098 B CN109241098 B CN 109241098B
- Authority
- CN
- China
- Prior art keywords
- word
- hash
- file
- hash value
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式数据库的查询优化方法,在遍历所有海量文件之前先校验该文件对应的索引文件,以此判断对应的原始海量文件中是否包含所要查询的目标,从而避免了很多不必要的搜索海量文件操作,大幅度提升检索性能。
Description
技术领域
本发明涉及一种计算机集群的数据处理及应用方法,尤其涉及一种分布式数据库的查询优化方法。
背景技术
Hadoop生态系统包括HDFS、分布式编程模型MapReduce、HBase、Hive等;目前几乎成为大数据处理工具的标准。
HDFS是Hadoop生态系统下核心项目之一,基于流数据处理模式和处理大文件的需求开发,对硬件要求低,容错好,可靠性高。Hadoop2.0之前,HDFS集群通常包括一个NameNode和多个DataNode。NameNode管理命名空间,维护整个文件系统的目录树以及文件的索引目录。DataNode用来执行具体的任务,存储和查询获取文件等;它通过心跳定时向NameNode发送所存储的文件块信息。
此框架支持下,HDFS可以存储大批海量数据,并按需要获取或遍历系统中所有文件,从而解决大数据的存储问题。
Impala是CDH(Cloudera Distribution Hadoop)的一个组件,是一个对大量数据并行处理的查询引擎。Impala的每个节点上都运行一个守护进程,用户通过Impala-Shell、JDBC等接口发送查询命令,由Impala规划器接收和分析查询命令,并与HDFS通信,获取所需要查询文件的具体数据存储位置;并将查询分割成若干个子查询由协调器分发到各个节点执行。各Impala执行器读取HDFS在本地的数据并执行查询后,将结果汇总到Impala协调器,Impala协调器向用户返回最终结果。
以上过程不难看出,在数据量很大而集群规模有限的情况下,每个节点的任务负载十分沉重,各节点执行器遍历本地HDFS数据时将十分耗时;而当前时代下,往往每台机器的存储约能达到20~30T,如果需要在海量文件中模糊查询出指定的某个词以及其上下文关系,单进程遍历本地所有文件所消耗的时间不可预期。
发明内容
为解决现有技术中存在的问题,本发明设计并实现了一种以构造索引的形式在分布式文件系统框架下的文件过滤算法;能够在数据存储阶段为每个文件生成一份15M以内的索引文件,查找遍历原始文件前,提前检查索引文件;即可判断该文件是否包含(必然包含、可能包含、必然不包含三种结果)所要模糊查找的字串,从而避免了扫描大量不必要的原始文件。可优化海量大文本文件的检索和查询,大幅缩短查询时间。
本发明公开了一种分布式数据库的查询优化方法,在数据存储阶段为每个文件生成一份索引文件,查找遍历原始文件前,提前检查索引文件;即可判断该文件是否包含所要模糊查找的字串,结果包括必然包含、可能包含、必然不包含。
索引文件的生成包括以下步骤:
步骤1:申请内存;
步骤2:按行录入原始文件;
步骤3:对原始文件每行需索引的字段分词,每三个字符作为一个词,并对此词取第一个字作为词1,取前两个字作为词2,取最后一个字作为词3,取后两个字作为词4,并取该词和它的词3、词4作为下个词的前置词;
步骤4:计算每个词的hash值,并做如下操作标记hash值在文件中出现过:
MemArry[hash*LINEBYTE]=MemArry[hash*LINEBYTE]|0x80;
步骤5:检验当前状态是否有前置词;若有前置词,取词1、词2和本词三组hash值做如下操作以标注该前置词的后置词包含此三组hash值:
MemArry[prehash*LINEBYTE+(v+1)/8]=MemArry[prehash*LINEBYTE+(v+1)/8]|(0x80>>((v1+1)%8));
其中,MemArry为索引内存段,prehash为前置词Hash值,LINEBYTE为单行BYTE大小,v为当前hash值;
若没有前置词或上述操作结束后,获取步骤3中下一个词并回到步骤4;
步骤6:直到原始文件处理完毕,将内存刷新到磁盘生成索引。
步骤4还包括计算每个词的hash值并对4993取余以减少存储消耗。
采用不同的hash算法计算各词的hash值,减少相同词的相同hash值覆盖。
索引文件读取包括以下步骤:
a.切分需要检索的词并计算其hash值,得到三组hash值数据,每组两个hash值队列分别是两种不同的hash算法;
b.循环加载索引文件到内存中,生成内存段MemArry;
c.对当前加载的索引文件,遍历检索词的每组的两个hash值队列;
d.判断本索引是否包含当前hash值:
(MemArry[(*itvalues)*LINEBYTE]&0x80)
若返回false则表示不成立;
e.如果当前状态没有前置词hash,则将本词置为前置词hash,否则做如下计算以判断前置词与本词的序列组合是否出现在文中:
MemArry[prehash*LINEBYTE+(v+1)/8]&(0x80>>((v+1)%8));
其中,MemArry为索引内存段,prehash为前置词hash值,LINEBYTE为单行字节大小,v为当前hash值;
若判断返回true,则将此v设置为前置hash值并继续判断下个hash值;
f.循环三组hash队列后,如果有一组不包含返回false的判断,表示生成此索引的文件有可能包含该检索词。
有益效果:本发明与现有技术相比,采用本发明的优化方法能够避免了扫描大量不必要的原始文件,优化海量大文本文件的检索和查询,大幅缩短查询时间。
附图说明
图1:索引写入流程图;
图2:索引文件结构;
图3:索引读取流程图。
具体实施方式
下面结合附图进一步阐述本发明。
本发明以构造索引的形式对在分布式文件系统框架下的文件进行过滤,在数据存储阶段为每个文件生成一份15M以内的索引文件,查找遍历原始文件前,提前检查索引文件;即可判断该文件是否包含(必然包含、可能包含、必然不包含三种结果)所要模糊查找的字串,从而避免了扫描大量不必要的原始文件。
索引文件生成流程如图1:
步骤1:申请一块9801594B大小的内存,索引大小按需求决定,索引越大匹配率约精准,本发明以9M索引为例;
步骤2:对原始文件每行需索引的字段分词,每三个字符作为一个词,并对此词取第一个字(词1)、前两个字(词2)、最后一个字(词3)、后两个字(词4),作为四个子词;并取这个词和它的词3、词4作为下个词的前置词,切词示例如下;
写入索引时,ABCDEFGHIJK切词为ABC(含AB、BC、A、C)、DEF(含DE、EF、D、F)、GHI(含GH、HI、G、I)、JK(含J、K);
读取索引时,ABCDEFGHIJK切分为三组,切词结果如下:
1、ABC、DEF、GHI、JK;
2、A、BCD、EFG、HIJ、K;
3、AB、CDE、FGH、IJK;
步骤3:计算每个词的hash值并对4993取余以减少存储消耗,并做如下操作标记hash值在文件中出现过:
MemArry[hash*LINEBYTE]=MemArry[hash*LINEBYTE]|0x80
其中,MemArry为索引内存段,hash为该词的hash值,LINEBYTE为每一行的BYTE大小,同理,利用另外一种hash算法重新计算一次各个词的hash值以确保其分布离散的同时减少相同词的相同hash值覆盖;索引文件结构示意图详见下图2,每行第一个bit位表示该hash在此文件中是否存在;在每行的后续占位中,每一个bit表示该行hash值的后续词包含对应位置的hash值。
步骤4:检验当前状态是否有前置词,如果前置词存在,则取词1、词2和本词三组hash值做如下操作以标注该前置词的后置词包含此三组hash值:
MemArry[prehash*LINEBYTE+(v+1)/8]=MemArry[prehash*LINEBYTE+(v+1)/8]|(0x80>>((v1+1)%8));
其中,MemArry为索引内存段,prehash为前置词hash值,LINEBYTE为单行BYTE大小,v为当前hash值。如果当前状态有多个前置词hash,则需要对每个前置词做此操作。
上述操作结束或前置词不存在时,获取步骤2中下一个词并回到步骤3;
步骤5:直到文件处理完毕,将内存刷新到磁盘生成索引。
索引文件读取流程如图3:
1、按照固定切词方法,切分需要检索的词并计算其hash值,得到三组hash值数据,每组两个hash值队列分别是两种不同的hash算法;
2、循环加载索引文件到内存中,生成9801594B大小的内存段MemArry;
3、对当前加载的索引文件,遍历检索词的每组的两个hash值队列;
4、判断本索引是否包含当前hash值:
(MemArry[(*itvalues)*LINEBYTE]&0x80)
若返回false则表示不成立;
5、如果当前状态没有前置词hash,则将本词置为前置词hash,否则做如下操作以判断前置词与本词的序列组合是否出现在文中:
MemArry[prehash*LINEBYTE+(v+1)/8]&(0x80>>((v+1)%8));
其中,MemArry为索引内存段,prehash为前置词hash值,LINEBYTE为单行字节大小,v为当前hash值;
若判断返回true,则将此v设置为前置hash值并继续判断下个hash值;
6、循环三组hash队列后,如果有一组(两个hash队列)不包含返回false的判断,表示生成此索引的文件有可能包含该检索词。
此处,列举100个文本文件,每个文件100w行数据、每行数据的索引字段平均长度为20做对比测试,在只有一个文件包含关键词的情况下:
长度为6的关键词误命中约为20~25个,即可将查询时间降低为原有时间的20%~25%;
长度为8的关键词误命中约为5~8个,即可将查询时间降低为原有时间的5%~8%;
长度为10的关键词误命中个数<2,即几乎不会产生不必要扫描。
Claims (2)
1.一种分布式数据库的查询优化方法,其特征在于:在数据存储阶段为每个文件生成一份索引文件,查找遍历原始文件前,提前检查索引文件,判断该文件是否包含所要模糊查找的字串,结果包括必然包含、可能包含、必然不包含;
其中,所述索引文件的生成包括以下步骤:
步骤1:申请内存;
步骤2:按行录入原始文件;
步骤3:对原始文件每行需索引的字段分词,每三个字符作为一个词,并对此词取第一个字作为词1,取前两个字作为词2,取最后一个字作为词3,取后两个字作为词4,并取该词和它的词3、词4作为下个词的前置词;
步骤4:采用多种hash算法计算每个词的hash值,并做如下操作标记hash值在文件中出现过:
MemArry[hash*LINEBYTE]=MemArry[hash*LINEBYTE]|0x80;
其中,MemArry为索引内存段,hash为词的hash值,LINEBYTE为每一行的BYTE大小;
步骤5:检验当前状态是否有前置词;若有前置词,取词1、词2和本词三组hash值做如下操作以标注该前置词的后置词包含此三组hash值:
MemArry[prehash*LINEBYTE+(v+1)/8]=MemArry[prehash*LINEBYTE+(v+1)/8]|(0x80>>((v1+1)%8));
其中,MemArry为索引内存段,prehash为前置词Hash值,LINEBYTE为单行BYTE大小,v为当前hash值;
若没有前置词或上述操作结束后,获取步骤3中下一个词并回到步骤4;
步骤6:直到原始文件处理完毕,将内存刷新到磁盘生成索引;
所述的提前检查索引文件,判断该文件是否包含所要模糊查找的字串,结果包括必然包含、可能包含、必然不包含,包括以下步骤:
a.切分需要检索的词并计算其hash值,得到三组hash值数据,每组两个hash值队列分别是两种不同的hash算法;
b.循环加载索引文件到内存中,生成内存段MemArry;
c.对当前加载的索引文件,遍历检索词的每组的两个hash值队列;
d.判断本索引是否包含当前hash值:
(MemArry[(*itvalues)*LINEBYTE]&0x80)
若返回false则表示不成立;
e.如果当前状态没有前置词hash,则将本词置为前置词hash,否则做如下计算以判断前置词与本词的序列组合是否出现在文中:
MemArry[prehash*LINEBYTE+(v+1)/8]&(0x80>>((v+1)%8));
其中,MemArry为索引内存段,prehash为前置词hash值,LINEBYTE为单行字节大小,v为当前hash值;
若判断返回true,则将此v设置为前置hash值并继续判断下个hash值;
f.循环三组hash队列后,如果有一组不包含返回false的判断,表示生成此索引的文件有可能包含该检索词。
2.根据权利要求1所述的一种分布式数据库的查询优化方法,其特征在于:步骤4还包括计算每个词的hash值并对4993取余以减少存储消耗。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810896484.0A CN109241098B (zh) | 2018-08-08 | 2018-08-08 | 一种分布式数据库的查询优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810896484.0A CN109241098B (zh) | 2018-08-08 | 2018-08-08 | 一种分布式数据库的查询优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109241098A CN109241098A (zh) | 2019-01-18 |
CN109241098B true CN109241098B (zh) | 2022-02-18 |
Family
ID=65071079
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810896484.0A Active CN109241098B (zh) | 2018-08-08 | 2018-08-08 | 一种分布式数据库的查询优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109241098B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114924153A (zh) * | 2022-05-30 | 2022-08-19 | 国网湖北省电力有限公司鄂州供电公司 | 一种电力变压器能效智能判断系统及智能判断方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655848A (zh) * | 2008-08-20 | 2010-02-24 | 华为技术有限公司 | 一种实现内容管理的方法、系统及装置 |
CN101676899A (zh) * | 2008-09-18 | 2010-03-24 | 上海宝信软件股份有限公司 | 海量数据库记录的归档和查询方法 |
CN105975495A (zh) * | 2016-04-26 | 2016-09-28 | 北京奇虎科技有限公司 | 大数据的存储、搜索方法及装置 |
CN105988996A (zh) * | 2015-01-27 | 2016-10-05 | 腾讯科技(深圳)有限公司 | 一种索引文件生成方法及装置 |
CN106227788A (zh) * | 2016-07-20 | 2016-12-14 | 浪潮软件集团有限公司 | 一种以Lucene为基础的数据库查询方法 |
CN107291964A (zh) * | 2017-08-16 | 2017-10-24 | 南京华飞数据技术有限公司 | 一种基于HBase实现模糊查询的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101561815B (zh) * | 2009-05-19 | 2010-10-13 | 华中科技大学 | 分布式密文全文检索系统 |
US10726011B2 (en) * | 2016-10-11 | 2020-07-28 | Sap Se | System to search heterogeneous data structures |
-
2018
- 2018-08-08 CN CN201810896484.0A patent/CN109241098B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655848A (zh) * | 2008-08-20 | 2010-02-24 | 华为技术有限公司 | 一种实现内容管理的方法、系统及装置 |
CN101676899A (zh) * | 2008-09-18 | 2010-03-24 | 上海宝信软件股份有限公司 | 海量数据库记录的归档和查询方法 |
CN105988996A (zh) * | 2015-01-27 | 2016-10-05 | 腾讯科技(深圳)有限公司 | 一种索引文件生成方法及装置 |
CN105975495A (zh) * | 2016-04-26 | 2016-09-28 | 北京奇虎科技有限公司 | 大数据的存储、搜索方法及装置 |
CN106227788A (zh) * | 2016-07-20 | 2016-12-14 | 浪潮软件集团有限公司 | 一种以Lucene为基础的数据库查询方法 |
CN107291964A (zh) * | 2017-08-16 | 2017-10-24 | 南京华飞数据技术有限公司 | 一种基于HBase实现模糊查询的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109241098A (zh) | 2019-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107247808B (zh) | 一种分布式NewSQL数据库系统及图片数据查询方法 | |
CN110083601B (zh) | 面向键值存储系统的索引树构建方法及系统 | |
CN105320775B (zh) | 数据的存取方法和装置 | |
CN102890722B (zh) | 应用于时序历史数据库的索引方法 | |
CN105975587B (zh) | 一种高性能的内存数据库索引组织与访问方法 | |
CN107491487A (zh) | 一种全文数据库架构及位图索引创建、数据查询方法、服务器及介质 | |
CN1979469A (zh) | 索引及其扩展和查询方法 | |
CN103914483B (zh) | 文件存储方法、装置及文件读取方法、装置 | |
US10963440B2 (en) | Fast incremental column store data loading | |
WO2015010509A1 (zh) | 一种基于一维线性空间实现Trie树的词典检索方法 | |
US20050076018A1 (en) | Sorting result buffer | |
KR101255639B1 (ko) | 컬럼 기반 데이터베이스 시스템 및 데이터베이스 시스템의 조인 인덱스를 이용한 조인 처리 방법 | |
CN105912696A (zh) | 一种基于对数归并的dns索引创建方法及查询方法 | |
CN109189759A (zh) | Kv存储系统中的数据读取方法、数据查询方法、装置及设备 | |
CN109241098B (zh) | 一种分布式数据库的查询优化方法 | |
US7752181B2 (en) | System and method for performing a data uniqueness check in a sorted data set | |
CN113918605A (zh) | 数据查询方法、装置、设备以及计算机存储介质 | |
CN109783599A (zh) | 基于多种存储介质的知识图谱检索方法及系统 | |
CN102955808A (zh) | 一种数据获取方法和分布式文件系统 | |
US20230259490A1 (en) | Data query method and apparatus, device, and storage medium | |
US8166043B2 (en) | Bit strings search apparatus, search method, and program | |
CN109213760B (zh) | 非关系数据存储的高负载业务存储及检索方法 | |
US7991756B2 (en) | Adding low-latency updateable metadata to a text index | |
CN114428776A (zh) | 一种面向时序数据的索引分区管理方法和系统 | |
CN110505321B (zh) | 一种用于访问ip地址的方法及系统 |
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 |