CN103970870A - 数据库查询方法和服务器 - Google Patents
数据库查询方法和服务器 Download PDFInfo
- Publication number
- CN103970870A CN103970870A CN201410199444.2A CN201410199444A CN103970870A CN 103970870 A CN103970870 A CN 103970870A CN 201410199444 A CN201410199444 A CN 201410199444A CN 103970870 A CN103970870 A CN 103970870A
- Authority
- CN
- China
- Prior art keywords
- data
- row
- module
- target column
- cache
- 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.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
Abstract
本发明实施例提供一种列式内存数据库查询的方法,包括:接收查询请求;解析查询查询请求,获得查询条件;从列式内存数据库中,确定与查询条件相关的目标列;循环执行以下步骤,直到完成所有行的查询:从查询各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的查询各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据查询查询条件,查询查询Cache存储的数据,发送分段查询结果,释放查询Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数。采用本发明的方法降低了查询过程中的数据溢出,减少了数据查询的时延。
Description
技术领域
本发明实施例涉及数据库技术,尤其涉及一种数据库查询方法和服务器。
背景技术
缓存Cache是位于CPU与内存RAM之间的临时存储器,它的容量比内存小但交换速度快。当CPU调用大量数据时,可直接从Cache中调用,从而加快读取速度。通常经常下,Cache分为L1、L2、L3几个级别,L1是单CPU的单核独占使用空间,L2是单CPU的多核共享使用的空间,L3是多个CPU多核共享使用的空间,例如:L1、L2、L3的Cache的大小分别为32K、512K和15360K。以每次读取256Byte为例,3个CACHE的时延分别为:1.2ns、4ns和30ns。而在内存RAM中数据读取需要100ns。相同指令情况下,数据在不同的位置,需要的时间相差数倍或数十倍。虽然各个厂家的芯片不尽相同,但时延相差的倍数基本一致。
列式内存数据库是指数按列组织存储的数据库,每个列的数据独立紧密存放,这种存放组织方式特别适合分析场景下对大量数据的少数列查询,查询时,系统仅读取需要处理的列,而不读入全部数据列。
当前的列式处理是按列分解条件,查询时,每个列单独查询,而后把符合条件的记录行合并求交集,取得最终结果的。例如,SELECT COUNT(*),SUM(v.SALARY)FROM(SELECT AGE,SALARY,CITY,JOB FROM T WHERE AGE>24ANDSALARY>5000AND CITY=’SHENZHEN’AND JOB=’SALE’);列式内存数据库执行这个SQL时通常分解为以下几步:
1,扫描AGE列符合AGE>24条件的记录行号集合和数据集;
2,扫描SALARY列符合SALARY>5000条件的记录行号集合和数据集;
3,扫描CITY列符合CITY=’SHENZHEN’条件的记录行号集合和数据集;
4,扫描JOB列符合JOB=’SALE’条件的记录行号集合和数据集;
5,对AGE、SALARY、CITY、JOB的行号集合求交集,得到一个条件都满足的最终行号集合;
6,统计最终的行号集合,扫描中间结果得到COUNT和SUM结果。
以上每个步骤,尤其是扫描列时,会产生大量的行号集合和数据集合这些中间数据,由于Cache的容量有限,可能会导致Cache无法保存这些数据,那就不得不将这些中间数据溢出到RAM中。如果后续对中间数据进一步运算时,则需要将这些中间数据从RAM中取出并计算,那么从RAM读取数据的过程将产生较大时延,如果计算变复杂,时延就会呈倍数增加。
发明内容
本发明实施例提供一种数据库查询方法和服务器,减少了数据库查询过程的时延。
第一方面,本发明提供了一种数据库查询方法,包括:接收查询请求;解析查询请求,获得查询条件;从列式内存数据库中,确定与查询条件相关的目标列;循环执行以下步骤,直到完成所有行的查询:从各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据查询条件,查询Cache存储的数据,发送分段查询结果,释放Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数。
结合第一方面,在第一方面的第一种可能的实现方式中,该方法还包括:当查询最后的m行或者少于m行的数据时,在发送的分段查询结果中还包含查询结束标识,以通知请求者本次查询请求已经完成。
结合第一方面的第一种可能,在第一方面的第二种可能的实现方式中,该方法还包括:请求者接收各个分段查询结果后,存储各个分段查询结果,当接收到查询结束标识后,组合各个分段查询结果,并将组合后的查询结果作为最终查询结果。
结合第一方面的第一种可能,在第一方面的第三种可能的实现方式中,当将从列式内存数据库中的目标列某行的数据存储到cache中时,在列式内存数据库中获取到目标列的末行标识或者无法获取到目标列的下一行的地址或者指针时,则生成查询结束标识。
第二方面,本发明提供了一种数据库查询服务器,包括,接收模块,解析模块、确定模块和查询模块,其中:接收模块,用于接收请求者发送的查询请求,查询请求包含查询条件,并将查询请求发送到解析模块上;解析模块,用于接收接收模块发送到的查询请求,并解析查询请求,获得查询条件,将查询条件发送到确定模块和查询模块上;确定模块,用于接收解析模块发送到的查询条件,并从列式内存数据库中,确定与查询条件相关的目标列;和查询模块,用于循环执行以下步骤,直到完成所有行的查询:从各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据查询条件,查询Cache存储的数据,发送分段查询结果和释放Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数。
结合第二方面,在第二方面的第一种可能的实现方式中,该查询模块,具体用于当查询最后的m行或者少于m行的数据时,发送包含查询结束标识的分段查询结果,以通知请求者本次查询请求已经完成。
结合第二方面,在第二方面的第二种可能的实现方式中,数据库查询服务器还包括:生成模块,用于当将从列式内存数据库中的目标列某行的数据存储到cache中时,在列式内存数据库中获取到目标列的末行标识或者无法获取到目标列的下一行的地址或者指针时,生成查询结束标识。
第三方面,本发明提供了列式内存数据库查询的方法,方法包括:
接收查询请求;解析查询请求,获得查询条件;从列式内存数据库中,确定与查询条件相关的目标列;循环执行以下步骤,直到完成所有行的查询:从各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的各个目标列中连续m行的数据或者最后少于m行的数据存储到缓存Cache,根据查询条件,查询Cache存储的数据,在临时存储模块中存储分段查询结果,释放Cache的存储空间,其中m是一个自然常数,i为变量,表示已经循环执行的次数;当查询条件相关的目标列的数据均被查询后,组合临时存储模块中的各个分段查询结果,将组合后的查询结果作为最终查询结果,发送最终查询结果。
结合第三方面,在第三方面的第一种可能的实现方式中,方法还包括:当将从列式内存数据库中的目标列某行的数据存储到cache中,在列式内存数据库中获取到目标列的末行标识,或者无法获取到目标列的下一行的地址或者指针时,生成查询结束标识,以通知临时存储模块组合临时存储模块中的各个分段查询结果。
第四方面,本发明提供了数据库查询服务器,包括,接收模块,解析模块、确定模块、查询模块和临时存储模块,其中:接收模块,用于接收请求者发送的查询请求,查询请求包含查询条件,并将查询请求发送到解析模块上;解析模块,用于接收接收模块发送到的查询请求,并解析查询请求,获得查询条件,将查询条件发送到确定模块和查询模块上;确定模块,用于接收解析模块发送到的查询条件,并从列式内存数据库中,确定与查询条件相关的目标列;和查询模块,用于循环执行以下步骤,直到完成所有行的查询:从各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据查询条件,查询Cache存储的数据,在临时存储模块中存储分段查询结果,释放Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数;临时存储模块,用于存储循环执行过程中的分段查询结果,当查询条件相关的目标列的数据均被查询后,组合临时存储模块中的各个分段查询结果,将组合后的查询结果作为最终查询结果,发送最终查询结果。
结合第四方面,在第四方面的第一种可能的实现方式中,数据库查询服务器,还包括:生成模块,用于当将从列式内存数据库中的目标列某行的数据存储到cache中,在列式内存数据库中获取到目标列的末行标识,或者无法获取到目标列的下一行的地址或者指针时,生成查询结束标识,以通知临时存储模块组合临时存储模块中的各个分段查询结果。
本发明的实施例中,由于查询的数据都是一段一段来查询的,因此在查询过程中产生的数据以及查询的数据都只可以存储在Cache中,并没有溢出到RAM中,因此降低了查询过程中的数据溢出,减少了数据查询的时延。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的数据库查询方法的流程示意图;
图2为本发明实施例的数据库查询另一种方法的流程示意图;
图3为本发明实施例的数据库查询方法的一个查询过程的示意图;
图4为本发明实施例的数据库查询服务器的结构示意图;
图5为本发明实施例的又一个数据库查询服务器的结构示意图;
图6为本发明实施例的又一个数据库查询服务器的结构示意图;
图7为本发明实施例的又一个数据库查询服务器的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
图1为本发明数据库查询方法实施例的流程图,该方法应用在列式内存数据库中,列式内存数据库的列式数据是存储在内存中的,该方法包括:
步骤101:接收查询请求。
而外部设备可以直接向数据库查询服务器发送查询请求,此时请求者为外部设备,外部设备也可以通过代理装置向数据库查询服务器发送查询请求,此时请求者为代理装置,该代理装置可以位于数据库查询服务器中,也可以位于数据库查询服务器之外,该查询请求包含了查询条件。
步骤102:解析查询请求,获得查询条件。
数据库查询服务器根据查询请求,获得查询条件,这个查询条件可能是一个SQL语句,如:SELECT NAME FROM DETAIL_RECORD WHEREFEE>100AND AGE>18。
步骤103:从列式内存数据库中,确定与查询条件相关的目标列;
查询条件涉及到的列就是为目标列,例如:查询条件中“FEE>100ANDAGE>18”涉及到两个列,FEE列和AGE列,那么这两个列就是查询条件相关的目标列。
步骤104:循环执行以下步骤,直到完成所有行的查询:从各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的各个目标列中连续m行的数据或最后少于m行的数据存储到Cache,根据所述查询条件,查询Cache存储的数据,发送分段查询结果和释放所述Cache的存储空间,其中m为自然常数,m表示每次查询目标列的行数,m为1000-10000,特别可以取8192行,i是变量,表示已经循环执行的次数,比如第一次循环执行时i为1,第二次循环执行时,i为2。
图2为本发明数据库查询方法实施例的流程图,该方法应用在列式内存数据库中,列式内存数据库的列式数据是存储在内存中的,该方法包括:
步骤201-203与步骤101-103相同。
步骤204:循环执行以下步骤,直到完成所有行的查询:从所述各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的所述各个目标列中连续m行的数据或者最后少于m行的数据存储到缓存Cache,根据所述查询条件,查询所述Cache存储的数据,在临时存储模块中存储分段查询结果,释放所述Cache的存储空间,其中m是一个自然常数,m表示每次查询目标列的行数,i为变量,表示已经循环执行的次数;
步骤205:当所述查询条件相关的目标列的数据均被查询后,组合临时存储模块中的各个分段查询结果,将组合后的查询结果作为最终查询结果,发送所述最终查询结果。
例如:上述步骤102中的SQL语句,需要查询两列,FEE列和AGE列,而根据预先的设定,每次查询目标列的行数为8192行,即m为8192,,则首先将列式内存数据库中FEE列第一个连续8192行的数据存储到Cache,并根据查询条件和Cache存储的该8192行的数据,进行运算,获得第一个中间运算结果,并将该第一中间运算结果存储在Cache中。然后将列式内存数据库中AGE列第一个连续8192行的数据存储到Cache,并根据查询条件和Cache存储的该8192行的数据,进行运算,获得第二个中间运算结果,并将该第二中间运算结果存储在Cache中。各个中间运算结果可以是一个位图。
接着,再根据查询条件、第一个中间运算结果和第二个中间运算结果,进行运算,获得本次查询的分段查询结果,然后向请求者或者向临时存储模块发送分段查询结果,释放Cache的存储空间,这样可以腾出Cache的空间,以进行下一次分段查询。
执行下i次分段查询时,第8192*(i-1)+1行开始,从列式内存数据库中读入目标列中的连续8192行的数据到Cache中,中间运算和取得查询的结果的方式,每一次循环执行都是相同的。从列式内存数据库读取某行的数据的方式可以有多种,比如:在读取某行数据时,会得到该行的下一行数据指针或者地址,也就是说如果执行第i次分段查询时,就从第i-1次分段查询的最后一行读取过程中,获取该第i次分段查询的第一行的指针或者地址,然后获取到的该第i次分段查询的第一行的指针或者地址。或者每行都有一个行号,需要读取哪一行,就通过行号来读取。
当各个目标列中未被查询行的行数少于m(8192)行时,则将列式内存数据库中FEE列最后未被查询行的数据存储到Cache,并根据查询条件和Cache存储的该最后未被查询行的数据,进行运算,获得本次查询的第一个中间运算结果,并将本次查询的第一中间运算结果存储在Cache中。然后将列式内存数据库中AGE列最后未被查询行的数据存储到Cache,并根据查询条件和Cache存储的最后未被查询行的数据,进行运算,获得本次查询的第二个中间运算结果,并将本次查询的该第二中间运算结果存储在Cache中。再根据查询条件、本次查询的第一个中间运算结果和本次查询的第二个中间运算结果,进行运算,获得本次查询的分段查询结果,然后向请求者或者向临时存储模块发送分段查询结果,释放Cache的存储空间。
当将从列式内存数据库中的目标列某行的数据存储到cache中时,在列式内存数据库中获取到所述目标列的末行标识或者无法获取到所述目标列的下一行的地址或者指针时,则生成查询结束标识。在查询过程中,有多种方式判断查询的一行是否为最后一行,例如:如果事先知道目标列的行数,这样通过在查询过程中统计已经查询的行数,从而获知查询的一行是否为最后一行,结束查询。或者,各个列中的最后一行有一个末行标识,该末行标识指示该行是本列的最后一行,因此在查询过程中,在列式内存数据库中获得该末行标识时,就可以获知该行是最后一行,结束查询。或者,在查询每一行的同时,将会获得下一行的指针或者地址,如果查询一行时,在列式内存数据库中不能获得下一行的指针或者地址时,则表示查询的该行为最后一行,结束查询。
数据库查询服务器可以将每一个分段查询结果直接发送给外部设备或代理装置,如果直接发送给代理装置的话,代理装置可以直接将每一个分段查询结果直接发送给外部设备,代理装置也可以先存储各个分段查询结果,当接收到查询结束标志时,根据查询结束标志,组合所有的分段查询结果,并将组合后的分段查询结果发送给外部设备。数据库查询服务器还可以将各个分段查询结果存储在数据库查询服务器里的临时存储模块中,当获得查询结束标志,就意味着所有的分段查询结束了,因此组合所有的分段查询结果,并将组合后的分段查询结果发送给请求者。
由于列式内存数据库的列式数据的一列存在很多行,一次性查询所有行,会导致Cache的数据存储不下,溢出RAM中,这样会带来查询的时延,本发明的实施例中,由于查询的数据都是一段一段来查询的,因此在查询过程中产生的数据以及查询的数据都只可以存储在Cache中,并没有溢出到RAM中,因此降低了查询过程中的数据溢出,减少了数据查询的时延。
下面介绍一个例子来说明上述本发明的实施例。
数据库查询服务器接收请求者发送的一个SQL查询语句,例如,该SQL查询语句为:SELECT NAME FROM DETAIL_RECORD WHERE FEE>100AND AGE>18。数据库查询服务器处理过程,如图3所示。
1、数据库查询服务器接收了SQL语句后,解析该SQL语句,确认该SQL语句与DETAIL_RECORD表中的FEE列和AGE列有关。
2、数据库查询服务器将FEE列一个连续8192行的数据存储到Cache,并根据表达式‘FEE>100’和Cache存储的该8192行的数据,进行运算,生成一张8192行的第一位图(bitmap)。该第一位图中符合FEE>100条件的行标识为1,不符合FEE>100条件的行标识为0,将第一位图存储在Cache中。具体的上述Cache可以为L2级别的Cache,。
在列式数据的处理中,一般的数据类型分别是BOOLEAN、INT8,INT16,INT32,INT64,DOUBLE,VARCHAR类型,最小数据类型是1bit,常用数字类型不超过8字节,字符类型也就30字节以内。因为一个8字节数据,8192行也就是64KB,考虑到运算结果一个bitmap也就是8K,数据和处理中间结果都在L2级别的CACHE以内,包括程序代码段,这样就可以很好的利用CPU的L2级的低时延特性。
3、然后将DETAIL_RECORD表中的AGE列第一个连续8192行的数据存储到Cache,并根据表达式AGE>18和Cache存储的该8192行的数据,进行运算,生成一张8192行的第二位图,该第二位图中符合AGE>18条件的行标识为1,不符合AGE>18条件的行标识为0,并将该第二位图存储在Cache中。
4、接着,再根据表达式FEE>100AND AGE>18、第一位图和第二位图,执行AND操作,生成一张8192行的第三位图,并将第三位图存储在级别的Cache中。
5,根据上述第三位图和表达式SELECT NAME FROMDETAIL_RECORD,从DETAIL_RECORD表中提取出相应的NAME列数据,因此获得了本次分段查询结果,然后向请求者发送分段查询结果和释放Cache的存储空间,这样可以腾出Cache的空间,以进行下一次分段查询。
循环执行上面的过程2-5,每循环执行一次,就查询一个segment,直至所有行都被处理完。数据库查询服务器在最后一条返回外部设备的消息中包含处理结束标识。
在循环执行上面的步骤2-5时,如果是第一次执行分段查询,则步骤2和3中,数据库查询服务器将FEE列第一个连续8192行的数据存储到Cache,如果是第i次执行分段查询,则步骤2和3中,数据库查询服务器将FEE列中未被查询的第(i)个连续8192行的的数据存储到Cache中。如果最后一次执行分段查询,则步骤2和3中,数据库查询服务器将FEE列中未被查询的剩余的所有行的数据存储到Cache中。
例如:本实施场景以10亿记录数据表数据库查询为例,评估数据量如下:
时延对比分析结果如下:(假设city为300个)
其中因CACHE溢出到RAM时延11.38-6.63=4.75s,占查询41.7%.
由于对表数据采用了分段查询,Cache中可以保存定长的bitmap而不是传统方案中满足过滤条件的行号集或者过长的bitmap,查询过程的所有中间结果都在L2级别的Cache中计算处理,而不会溢出到RAM中,因此大大缩短了系统的处理时延,提高了查询的效率。
图4为本发明实施例的一个数据库查询服务器400的结构示意图,包括:处理器402,内存406,输入输出接口408,网络接口408以及总线412。总线412可包括一通路,在数据库查询服务器各个部件之间传送信息。处理器402用于处理信息,执行指令或操作,具体可以是一个通用中央处理器(CPU),微处理器,特定应用集成电路application-specific integrated circuit(ASIC),或一个或多个用于控制本发明方案程序执行的集成电路。数据库查询服务器还包括一个或多个内存406,用于存储信息和指令,如:数据库查询服务器的数据,存储器可以是只读存储器read-only memory(ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器random access memory(RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是磁盘存储器。这些存储器通过总线412与处理器402相连接。处理器402还包括了缓存cache404,缓存404用于从内存406获取列式内存数据库的一段数据,处理器402可以直接获取缓存404的该段数据,并执行分段查询处理过程,将查询的中间过程数据也存储在缓存404中,在每段查询处理结束后,将清除缓存404中的存储的内容,释放缓存404的存储空间。
输入输出接口408可包括输入装置或输出装置。输入装置用以接收用户输入的数据和信息,例如键盘,鼠标、摄像头,扫描仪,光笔,语音输入装置,触摸屏等。输出装置用以允许输出或显示信息给用户,包括显示屏,打印机,扬声器等。数据库查询服务器还包括一个网络接口410,该网络接口使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。处理器402也能通过总线412与输入输出接口408,网络接口410相连接。
上述数据库查询服务器处理器402和缓存404等具体的处理过程,可以参见如图1所示的方法实施例。
如附图5所示,本发明实施例还公开了一种数据库查询服务器,包括,接收模块51,解析模块52、确定模块53和查询模块54,其中:
接收模块51,用于接收请求者发送的查询请求,所述查询请求包含查询条件,并将所述查询请求发送到解析模块52上;
解析模块52,用于接收接收模块51发送到的查询请求,并解析查询请求,获得查询条件,将查询条件发送到确定模块53和查询模块54上;
确定模块53,用于接收所述解析模块发送到的查询条件,并从列式内存数据库中,确定与查询条件相关的目标列;
查询模块54,用于循环执行以下步骤,直到完成所有行的查询:从所述各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的所述各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据所述查询条件,查询所述Cache存储的数据,发送查询结果和释放所述Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数。
进一步的,如图6所示,上述数据库查询服务器还包括生成模块55,用于用于当将从列式内存数据库中的目标列某行的数据存储到cache中时,在列式内存数据库中获取到所述目标列的末行标识或者无法获取到所述目标列的下一行的地址或者指针时,生成查询结束标识。进一步的,所述查询模块54,具体用于当查询最后的m行或者少于m行的数据时,发送包含所述查询结束标识的查询结果,以通知所述请求者本次查询请求已经完成。
如附图7所示,本发明实施例还公开了另一种数据库查询服务器,包括,接收模块61,解析模块62、确定模块63、查询模块64和临时存储模块65,其中:
接收模块61,用于接收请求者发送的查询请求,查询请求包含查询条件,并将查询请求发送到解析模块62上;
解析模块62,用于接收接收模块发送到的查询请求,并解析查询请求,获得查询条件,将查询条件发送到确定模块63和查询模块64上;
确定模块63,用于接收解析模块62发送到的查询条件,并从列式内存数据库中,确定与查询条件相关的目标列;和
查询模块64,用于循环执行以下步骤,直到完成所有行的查询:从各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据查询条件,查询Cache存储的数据,在临时存储模块中存储查询结果,释放Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数;
临时存储模块65,用于存储循环执行过程中的查询结果,当查询条件相关的目标列的数据均被查询后,组合临时存储模块中的各个查询结果,将组合后的查询结果作为最终查询结果,发送最终查询结果。
进一步的,所述数据库查询服务器还包括:生成模块66,用于当将从列式内存数据库中的目标列某行的数据存储到cache中,在列式内存数据库中获取到所述目标列的末行标识,或者无法获取到所述目标列的下一行的地址或者指针时,生成查询结束标识,以通知所述临时存储模块组合临时存储模块中的各个查询结果。
由于本发明的数据库查询服务器对表数据采用了分段查询,Cache中可以保存定长的bitmap而不是传统方案中满足过滤条件的行号集或者过长的bitmap,查询过程的所有中间结果都在Cache中计算处理,而不会溢出到RAM中,因此大大缩短了系统的处理时延,提高了查询的效率。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (12)
1.一种列式内存数据库查询的方法,其特征在于,所述方法包括:
接收查询请求;
解析所述查询请求,获得查询条件;
从列式内存数据库中,确定与查询条件相关的目标列;
循环执行以下步骤,直到完成所有行的查询:从所述各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的所述各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据所述查询条件,查询所述Cache存储的数据,发送分段查询结果,释放所述Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:当查询最后的m行或者少于m行的数据时,在发送的分段查询结果中还包含查询结束标识,以通知所述请求者本次查询请求已经完成。
3.如权利要求2所述的方法,其特征在于,所述方法还包括:所述请求者接收各个分段查询结果后,存储所述各个分段查询结果,当接收到查询结束标识后,组合所述各个分段查询结果,并将组合后的查询结果作为最终查询结果。
4.如权利要求2所述的方法,其特征在于,所述方法还包括:
当将从列式内存数据库中的目标列某行的数据存储到cache中时,在列式内存数据库中获取到所述目标列的末行标识或者无法获取到所述目标列的下一行的地址或者指针时,则生成查询结束标识。
5.如权利要求1或2所述的方法,其特征在于,所述Cache为L2级别时,所述m为1000-10000。
6.一种数据库查询服务器,其特征在于,包括,接收模块,解析模块、确定模块和查询模块,其中:
所述接收模块,用于接收请求者发送的查询请求,所述查询请求包含查询条件,并将所述查询请求发送到所述解析模块上;
所述解析模块,用于接收所述接收模块发送到的查询请求,并解析所述查询请求,获得查询条件,将所述查询条件发送到所述确定模块和所述查询模块上;
所述确定模块,用于接收所述解析模块发送到的查询条件,并从列式内存数据库中,确定与查询条件相关的目标列;和
所述查询模块,用于循环执行以下步骤,直到完成所有行的查询:从所述各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的所述各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据所述查询条件,查询所述Cache存储的数据,发送分段查询结果和释放所述Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数。
7.如权利要求6所述的数据库查询服务器,其特征在于,所述查询模块,具体用于当查询最后的m行或者少于m行的数据时,发送包含所述查询结束标识的分段查询结果,以通知所述请求者本次查询请求已经完成。
8.如权利要求6所述的数据库查询服务器,其特征在于,还包括:生成模块,用于当将从列式内存数据库中的目标列某行的数据存储到cache中时,在列式内存数据库中获取到所述目标列的末行标识或者无法获取到所述目标列的下一行的地址或者指针时,生成查询结束标识。
9.一种列式内存数据库查询的方法,其特征在于,所述方法包括:
接收查询请求;
解析所述查询请求,获得查询条件;
从列式内存数据库中,确定与查询条件相关的目标列;
循环执行以下步骤,直到完成所有行的查询:从所述各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的所述各个目标列中连续m行的数据或者最后少于m行的数据存储到缓存Cache,根据所述查询条件,查询所述Cache存储的数据,在临时存储模块中存储分段查询结果,释放所述Cache的存储空间,其中m是一个自然常数,i为变量,表示已经循环执行的次数;
当所述查询条件相关的目标列的数据均被查询后,组合临时存储模块中的各个分段查询结果,将组合后的查询结果作为最终查询结果,发送所述最终查询结果。
10.如权利要求9所述的方法,其特征在于,所述方法还包括:
当将从列式内存数据库中的目标列某行的数据存储到cache中,在列式内存数据库中获取到所述目标列的末行标识,或者无法获取到所述目标列的下一行的地址或者指针时,生成查询结束标识,以通知所述临时存储模块组合临时存储模块中的各个分段查询结果。
11.一种数据库查询服务器,其特征在于,包括,接收模块,解析模块、确定模块、查询模块和临时存储模块,其中:
所述接收模块,用于接收请求者发送的查询请求,所述查询请求包含查询条件,并将所述查询请求发送到所述解析模块上;
所述解析模块,用于接收所述接收模块发送到的查询请求,并解析所述查询请求,获得查询条件,将所述查询条件发送到所述确定模块和所述查询模块上;
所述确定模块,用于接收所述解析模块发送到的查询条件,并从列式内存数据库中,确定与查询条件相关的目标列;和
所述查询模块,用于循环执行以下步骤,直到完成所有行的查询:从所述各个目标列的第m*(i-1)+1行开始,将列式内存数据库中的所述各个目标列中连续m行的数据或最后少于m行的数据存储到缓存Cache,根据所述查询条件,查询所述Cache存储的数据,在临时存储模块中存储分段查询结果,释放所述Cache的存储空间,其中m是一个自然常数,i是变量,表示已经循环执行的次数;
所述临时存储模块,用于存储循环执行过程中的分段查询结果,当所述查询条件相关的目标列的数据均被查询后,组合临时存储模块中的各个分段查询结果,将组合后的查询结果作为最终查询结果,发送所述最终查询结果。
12.如权利要求11所述的数据库查询服务器,其特征在于,还包括:生成模块,用于当将从列式内存数据库中的目标列某行的数据存储到cache中,在列式内存数据库中获取到所述目标列的末行标识,或者无法获取到所述目标列的下一行的地址或者指针时,生成查询结束标识,以通知所述临时存储模块组合临时存储模块中的各个分段查询结果。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410199444.2A CN103970870A (zh) | 2014-05-12 | 2014-05-12 | 数据库查询方法和服务器 |
PCT/CN2014/090240 WO2015172533A1 (zh) | 2014-05-12 | 2014-11-04 | 数据库查询方法和服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410199444.2A CN103970870A (zh) | 2014-05-12 | 2014-05-12 | 数据库查询方法和服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103970870A true CN103970870A (zh) | 2014-08-06 |
Family
ID=51240367
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410199444.2A Withdrawn CN103970870A (zh) | 2014-05-12 | 2014-05-12 | 数据库查询方法和服务器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103970870A (zh) |
WO (1) | WO2015172533A1 (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104331467A (zh) * | 2014-10-31 | 2015-02-04 | 上海玮舟微电子科技有限公司 | 一种数据查询方法及系统 |
CN104537030A (zh) * | 2014-12-22 | 2015-04-22 | 华为技术有限公司 | 一种业务数据查询方法及装置、数据库系统 |
WO2015172533A1 (zh) * | 2014-05-12 | 2015-11-19 | 华为技术有限公司 | 数据库查询方法和服务器 |
WO2016041479A1 (en) * | 2014-09-17 | 2016-03-24 | Huawei Technologies Co., Ltd. | Method and system for adaptively building a column store database from a temporal row store database based on query demands |
CN105630864A (zh) * | 2014-11-25 | 2016-06-01 | Sap欧洲公司 | 存储行标识符值的字典的强制排序 |
CN106294772A (zh) * | 2016-08-11 | 2017-01-04 | 电子科技大学 | 分布式内存列式数据库的缓存管理方法 |
CN106682042A (zh) * | 2015-11-11 | 2017-05-17 | 杭州海康威视数字技术股份有限公司 | 一种关系数据缓存及查询方法及装置 |
CN106776689A (zh) * | 2016-11-10 | 2017-05-31 | 郑州云海信息技术有限公司 | 一种主机信息查询方法、装置和主机 |
CN108009250A (zh) * | 2017-12-01 | 2018-05-08 | 武汉斗鱼网络科技有限公司 | 一种多分类赛事数据缓存建立、查询方法及装置 |
CN109313547A (zh) * | 2016-06-06 | 2019-02-05 | 微软技术许可有限责任公司 | 用于cpu利用率和代码重构的查询优化器 |
CN109800237A (zh) * | 2019-01-28 | 2019-05-24 | 广州酷狗计算机科技有限公司 | 数据查询方法、装置和计算机可读存储介质 |
CN110019332A (zh) * | 2017-09-29 | 2019-07-16 | 北京国双科技有限公司 | 一种基于预计算的数据查询方法及装置 |
CN113626555A (zh) * | 2021-10-12 | 2021-11-09 | 中孚安全技术有限公司 | 一种超大表单分段式加载显示方法及系统 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10496647B2 (en) * | 2017-04-18 | 2019-12-03 | Microsoft Technology Licensing, Llc | Delay detection in query processing |
CN109086279B (zh) * | 2017-06-13 | 2021-10-15 | 北京京东尚科信息技术有限公司 | 报表缓存方法和装置 |
CN109885589B (zh) * | 2017-12-06 | 2022-09-16 | 腾讯科技(深圳)有限公司 | 数据查询方法、装置、计算机设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100088309A1 (en) * | 2008-10-05 | 2010-04-08 | Microsoft Corporation | Efficient large-scale joining for querying of column based data encoded structures |
EP2701077A1 (en) * | 2012-08-24 | 2014-02-26 | Software AG | Method and system for storing tabular data in a memory-efficient manner |
CN103678556B (zh) * | 2013-12-06 | 2017-10-10 | 华为技术有限公司 | 列式数据库处理的方法和处理设备 |
CN103970870A (zh) * | 2014-05-12 | 2014-08-06 | 华为技术有限公司 | 数据库查询方法和服务器 |
-
2014
- 2014-05-12 CN CN201410199444.2A patent/CN103970870A/zh not_active Withdrawn
- 2014-11-04 WO PCT/CN2014/090240 patent/WO2015172533A1/zh active Application Filing
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015172533A1 (zh) * | 2014-05-12 | 2015-11-19 | 华为技术有限公司 | 数据库查询方法和服务器 |
WO2016041479A1 (en) * | 2014-09-17 | 2016-03-24 | Huawei Technologies Co., Ltd. | Method and system for adaptively building a column store database from a temporal row store database based on query demands |
US9836507B2 (en) | 2014-09-17 | 2017-12-05 | Futurewei Technologies, Inc. | Method and system for adaptively building a column store database from a temporal row store database based on query demands |
CN104331467B (zh) * | 2014-10-31 | 2019-02-26 | 上海玮舟微电子科技有限公司 | 一种数据查询方法及系统 |
CN104331467A (zh) * | 2014-10-31 | 2015-02-04 | 上海玮舟微电子科技有限公司 | 一种数据查询方法及系统 |
CN105630864A (zh) * | 2014-11-25 | 2016-06-01 | Sap欧洲公司 | 存储行标识符值的字典的强制排序 |
CN105630864B (zh) * | 2014-11-25 | 2020-12-08 | Sap欧洲公司 | 存储行标识符值的字典的强制排序 |
CN104537030A (zh) * | 2014-12-22 | 2015-04-22 | 华为技术有限公司 | 一种业务数据查询方法及装置、数据库系统 |
CN104537030B (zh) * | 2014-12-22 | 2018-03-02 | 华为技术有限公司 | 一种业务数据查询方法及装置、数据库系统 |
CN106682042A (zh) * | 2015-11-11 | 2017-05-17 | 杭州海康威视数字技术股份有限公司 | 一种关系数据缓存及查询方法及装置 |
CN106682042B (zh) * | 2015-11-11 | 2019-11-22 | 杭州海康威视数字技术股份有限公司 | 一种关系数据缓存及查询方法及装置 |
CN109313547B (zh) * | 2016-06-06 | 2022-04-15 | 微软技术许可有限责任公司 | 用于cpu利用率和代码重构的查询优化器 |
CN109313547A (zh) * | 2016-06-06 | 2019-02-05 | 微软技术许可有限责任公司 | 用于cpu利用率和代码重构的查询优化器 |
CN106294772A (zh) * | 2016-08-11 | 2017-01-04 | 电子科技大学 | 分布式内存列式数据库的缓存管理方法 |
CN106294772B (zh) * | 2016-08-11 | 2019-03-19 | 电子科技大学 | 分布式内存列式数据库的缓存管理方法 |
CN106776689A (zh) * | 2016-11-10 | 2017-05-31 | 郑州云海信息技术有限公司 | 一种主机信息查询方法、装置和主机 |
CN110019332A (zh) * | 2017-09-29 | 2019-07-16 | 北京国双科技有限公司 | 一种基于预计算的数据查询方法及装置 |
CN108009250A (zh) * | 2017-12-01 | 2018-05-08 | 武汉斗鱼网络科技有限公司 | 一种多分类赛事数据缓存建立、查询方法及装置 |
CN109800237A (zh) * | 2019-01-28 | 2019-05-24 | 广州酷狗计算机科技有限公司 | 数据查询方法、装置和计算机可读存储介质 |
CN113626555A (zh) * | 2021-10-12 | 2021-11-09 | 中孚安全技术有限公司 | 一种超大表单分段式加载显示方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2015172533A1 (zh) | 2015-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103970870A (zh) | 数据库查询方法和服务器 | |
KR101994021B1 (ko) | 파일 조작 방법 및 장치 | |
CN108205577B (zh) | 一种数组构建、数组查询的方法、装置及电子设备 | |
US7890480B2 (en) | Processing of deterministic user-defined functions using multiple corresponding hash tables | |
CN105468764B (zh) | 一种数据处理方法、装置及集群服务系统 | |
EP3217296A1 (en) | Data query method and apparatus | |
US9904705B2 (en) | Data table performance optimization | |
CN110083579A (zh) | 增量数据同步的方法、装置、计算机设备及计算机存储介质 | |
CN109977135A (zh) | 一种数据查询方法、装置及服务器 | |
CN112233009A (zh) | 一种图片渲染方法、装置、设备和存储介质 | |
CN107256233B (zh) | 一种数据存储方法和装置 | |
CN111104178A (zh) | 一种动态库加载方法、终端装置及存储介质 | |
CN108140022A (zh) | 数据查询方法和数据库系统 | |
CN113791730B (zh) | 基于双存储池的放置组调整方法、系统、装置及存储介质 | |
CN110928900B (zh) | 多表数据的查询方法、装置、终端以及计算机存储介质 | |
CN105138649A (zh) | 数据的搜索方法、装置及终端 | |
CN105939388B (zh) | 一种推送业务内容的方法和内容控制器 | |
CN110222046B (zh) | 列表数据的处理方法、装置、服务器和存储介质 | |
CN110909072B (zh) | 一种数据表建立方法、装置及设备 | |
WO2016088237A1 (ja) | 配信方法、装置、及びプログラム | |
CN110019229B (zh) | 数据库配置系统 | |
CN106446080B (zh) | 数据查询的方法、查询服务设备、客户端设备和数据系统 | |
CN105468603B (zh) | 数据选择方法及装置 | |
CN110928895B (zh) | 一种数据查询、数据表建立方法、装置及设备 | |
CN109063201B (zh) | 一种基于混合存储方案的impala在线交互式查询方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C04 | Withdrawal of patent application after publication (patent law 2001) | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20140806 |