CN111897837B - 数据查询方法、装置、设备和介质 - Google Patents
数据查询方法、装置、设备和介质 Download PDFInfo
- Publication number
- CN111897837B CN111897837B CN201910370676.2A CN201910370676A CN111897837B CN 111897837 B CN111897837 B CN 111897837B CN 201910370676 A CN201910370676 A CN 201910370676A CN 111897837 B CN111897837 B CN 111897837B
- Authority
- CN
- China
- Prior art keywords
- query
- prefix
- index
- target
- complete
- 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
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/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/2453—Query optimisation
-
- 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/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据查询方法、装置、设备和介质,涉及数据库领域。该方法包括:从查询请求中获取查询目的、目标查询表格和待查询层级标识;根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀;根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据。本发明实施例提供了一种数据查询方法、装置、设备和介质,实现了基于数据库对目标数据的快速查询。
Description
技术领域
本发明实施例涉及数据库领域,尤其涉及一种数据查询方法、装置、设备和介质。
背景技术
广告物料库一般按照用户(user),计划(plan),单元(unit),关键词(word)等层级划分。每个层级及每个物料都有该层级全局唯一的标识符(userid,planid,unitid和wordid)。一个常见的需求就是查询某个层级下,符合筛选条件的子层级的元素数量,或者子层级元素列表。一般来说,越细粒度层级的元素数量越多。典型的用户拥有几百个广告计划,几千个单元,几十万个关键词。
使用传统关系型数据库对各层级元素的存储和查询方法为:将不同层级的物料数据存储在数据库的关系表中。通过遍历关系表实现对目标数据的查询。
使用自定义内存结构对各层级元素的存储和查询方法为:使用支持高效查询的内存结构来存储各个层级的标识符,并保存子层级的ID数量。将其他物料属性存储在数据库中,并通过binlog等数据库同步技术来保持数据库数据和内存数据的一致性。通过内存查询层级标识符数据,然后再根据层级标识符从数据库中查询物料的其他数据。
上述二种方案使用场景有所不同,所带来的问题和不足也有所不同:
第一种方案对于目标数量的查询需要扫描大量的记录,查询效率比较低下。因此无法应用在标识符数量较多(如百万-千万量级)的在线场景中。
第二种方案实现较复杂,需要开发专门的内存存储***,并且需要较高的内存占用。由于数据同时存储在内存和数据库中,这种方案容易出现内存和数据库数据不一致的问题。
发明内容
本发明实施例提供一种数据查询方法、装置、设备和介质,以实现基于数据库对目标数据的快速查询。
第一方面,本发明实施例提供了一种数据查询方法,该方法包括:
从查询请求中获取查询目的、目标查询表格和待查询层级标识;
根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀;
根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,其中所述计数索引包括:所述目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。
第二方面,本发明实施例还提供了一种数据查询装置,该装置包括:
数据获取模块,用于从查询请求中获取查询目的、目标查询表格和待查询层级标识;
前缀确定模块,用于根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀;
请求响应模块,用于根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,其中所述计数索引包括:所述目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。
第三方面,本发明实施例还提供了一种设备,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例中任一所述的数据查询方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例中任一所述的数据查询方法。
本发明实施例通过在数据库中建立目标查询表格的计数索引,且所述计数索引包括:目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。然后根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀。将确定的联合主键的完整前缀与计数索引中的完整前缀进行匹配,将匹配一致的计数索引中的完整前缀或该完整前缀下包括的各层级元素的数量作为查询结果。
相比传统关系表,因为计数索引中包括完整前缀下包括的各层级元素的数量,所以可以直接获取元素数量,从而避免了对关系表的逐个遍历和统计。
相比自定义内存结构,因为计数索引存储在数据库中,所以较少了对内存的占用。并且,因为计数索引和目标查询表格均存储在数据库中,所以解决了内存和数据库数据容易产生不一致的问题。
附图说明
图1为本发明实施例一提供的一种数据查询方法的流程图;
图2是本发明实施例二提供的数据查询方法的流程图;
图3是本发明实施例三提供的一种数据查询方法的流程图;
图4是本发明实施例四提供的一种数据查询装置的结构示意图;
图5为本发明实施例五提供的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种数据查询方法的流程图。本实施例可适用于基于数据库对目标数据进行快速查询的情况,其中目标数据可以是待查询元素或待查询元素的数量。典型地上述数据库可以是关系型数据。该方法可以由一种数据查询装置来执行,该装置可以由软件和/或硬件的方式实现。参见图1,本实施例提供的数据查询方法包括:
S110、从查询请求中获取查询目的、目标查询表格和待查询层级标识。
具体地,查询目标可以是元素的查询,也可以是元素数量的查询。
目标查询表格是存储待查询元素的关系表。
元素可以划分不同的层级,且可以为各层级设置层级标识。例如,不同层级可以是:用户(user)、计划(plan)、单元(unit)和关键词(word)。不同层级的标识可以是:userid,planid,unitid和wordid等。
待查询层级标识是需要查询的元素所属的层级标识。
例如,查询请求为:SELECT userid,COUNT(*)FROM word_table WHERE userid=?GROUP BY userid。其表示意思为:从关键词表(word_table)中查询用户标识(userid)为?的数量。
上述查询请求中的查询目的是数量,目标查询表格是word_table,待查询层级标识是userid=?。
S120、根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀。
其中,目标查询表格的联合主键的完整前缀是指,可以清楚表示目标查询数据所述层级的前缀。
以联合主键是[userid,planid,unitid,wordid]为例,[userid]、[userid,planid]和[userid,planid,unitid]为联合主键的完整前缀。[userid,unitid]为联合主键的不完整前缀,也即联合主键的残缺前缀。
可选地,根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀,包括:
若待查询层级标识是所述联合主键的完整前缀,则将待查询层级标识作为所述联合主键的完整前缀。
若所述待查询层级标识是所述联合主键的残缺前缀,则基于所述目标查询表格的唯一前缀索引,对所述联合主键的残缺前缀进行补全,
其中,所述唯一前缀索引包括:包括所述联合主键的残缺前缀的唯一索引,以及所述唯一索引对应所述联合主键的完整前缀。
示例性地,关键词层级数据表word_table的联合主键为(userid,planid,unitid,wordid),所述唯一前缀索引可以包括:
uniq_prefix_plan:[planid]=>[userid,planid],表示[planid]可以唯一确定[userid,planid];
uniq_prefix_unit:[userid,unitid]=>[userid,planid,unitid],表示[userid,unitid]可以唯一确定[userid,planid,unitid]。
例如,查询请求是:select unitid,wordid from word_table where planid=?;
待查询层级标识为planid,但[planid]不是完整的主键前缀。因此,首先根据唯一前缀索引uniq_prefix_plan查出所有的完整前缀[userid,planid]。
S130、根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据。
其中,所述计数索引包括:所述目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。
示例性地,关键词层级数据表word_table的联合主键为(userid,planid,unitid,wordid),对应的三个计数索引的框架如下:
count_index_unit:[userid,planid,unitid]=>[row_cnt(word)]
count_index_plan:[userid,planid]=>[row_cnt(unit),row_cnt(unit,word)]
count_index_user:[userid]=>[row_cnt(plan),row_cnt(plan,unit),row_cnt(plan,unit,word)]
其中,row_cnt(word)为关键词的数量,row_cnt(unit,word)为某单元中关键词的数量,row_cnt(unit)为单元数量,row_cnt(plan)为计划数量,row_cnt(plan,unit)为某计划中单元的数量,row_cnt(plan,unit,word)为某计划中某单元中包括关键词的数量。
具体地,所述根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,包括:
将所述联合主键的完整前缀与所述计数索引中的完整前缀进行匹配;
根据所述查询目的将所述计数索引中匹配一致的完整前缀,或该完整前缀下包括的各层级元素的数量,作为响应所述查询请求的数据。
其中,如果查询条件中有IN表达式,则需构造出多个主键前缀。因为IN表达式包括多个可选的值。
本发明实施例通过在数据库中建立目标查询表格的计数索引,且所述计数索引包括:目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。然后根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀。将确定的联合主键的完整前缀与计数索引中的完整前缀进行匹配,将匹配一致的计数索引中的完整前缀或该完整前缀下包括的各层级元素的数量作为查询结果。
相比传统关系表,因为计数索引中包括完整前缀下包括的各层级元素的数量,所以可以直接获取元素数量,从而避免了对关系表的逐个遍历和统计。
相比自定义内存结构,因为计数索引存储在数据库中,所以较少了对内存的占用。并且,因为计数索引和目标查询表格均存储在数据库中,所以解决了内存和数据库数据容易产生不一致的问题。
示例性地,继续以联合主键为(userid,planid,unitid,wordid),计数索引包括count_index_user、count_index_plan和count_index_unit,唯一前缀索引包括uniq_prefix_plan,uniq_prefix_unit为例,对元素数量的查询说明如下:
1)SELECT userid,COUNT(*)FROM word_table WHERE userid=?GROUP BYuserid;
SELECT userid,COUNT(*)FROM word_table WHERE userid in(?)GROUP BYuserid;
从查询请求中获取查询目的(元素数量)、目标查询表格(word_table)和待查询层级标识(userid=?)。
根据待查询层级标识userid=?,确定目标查询表格(word_table)的联合主键的完整前缀为[userid]。根据[userid]的值从计数索引中查询count_index_user得到如下内容:
[userid]=>[row_cnt(plan),row_cnt(plan,unit),row_cnt(plan,unit,word)]
然后根据查询条件中表达式COUNT(*),获取row_cnt(plan,unit,word)的值。
2)SELECT userid,planid,COUNT(*)FROM word_table WHERE userid=?ANDplanid IN(?)GROUP BY userid,planid;
从查询请求中获取查询目的(COUNT(*))、目标查询表格(word_table)和待查询层级标识(userid=?AND planid IN(?))。
根据待查询层级标识确定目标查询表格(word_table)的联合主键的完整前缀为[userid,planid]。根据[userid,planid]的值查询count_index_plan得到如下:
[userid,planid]=>[row_cnt(unit),row_cnt(unit,word)]
然后根据查询条件中表达式COUNT(*),获取row_cnt(unit,word)的值。
SELECT planid,COUNT(*)FROM word_table WHERE userid=?AND planid IN(?)GROUP BY planid;该查询请求是对上述查询请求的一种改写,实质内容相同,处理逻辑相同。
3)SELECT userid,planid,unitid,COUNT(*)FROM word_table WHERE userid=?AND planid=?AND unitid IN(?)GROUP BY userid,planid,unitid;
从查询请求中获取查询目的(元素数量)、目标查询表格(word_table)和待查询层级标识(userid=?AND planid=?AND unitid IN(?))。
根据待查询层级标识确定目标查询表格(word_table)的联合主键的完整前缀为[userid,planid,unitid]。根据[userid,planid,unitid]的值查询count_index_unit获取对应的row_cnt(word)的值。
4)SELECT unitid,COUNT(*)FROM word_table WHERE userid=?and unitid in(?)group by unitid;
从查询请求中获取查询目的(元素数量)、目标查询表格(word_table)和待查询层级标识(userid=?and unitid in(?))。
由于待查询层级标识[userid,unitid]不能构成联合主键的完整前缀。因此,根据唯一前缀索引uniq_prefix_unit可以得到联合主键的完整前缀为[userid,planid,unitid]。然后按照上述逻辑确定待查询层级标识下关键词的数量。
5)SELECT userid,planid,COUNT(DISTINCT unitid)FROM word_table WHEREuserid=?AND planid IN(?)GROUP BY userid,planid;
从查询请求中获取查询目的(元素数量)、目标查询表格(word_table)和待查询层级标识(userid=?AND planid IN(?))。
根据待查询层级标识确定联合主键的完整前缀为[userid,planid]。根据[userid,planid]的值查询count_index_plan得到如下:
[userid,planid]=>[row_cnt(unit),row_cnt(unit,word)]
然后根据查询条件中的COUNT表达式(COUNT(DISTINCT unitid)),获取row_cnt(unit)的值。
示例性地,继续以联合主键为(userid,planid,unitid,wordid),计数索引包括count_index_user、count_index_plan和count_index_unit,唯一前缀索引包括uniq_prefix_plan,uniq_prefix_unit为例,对元素的查询说明如下:
1)select distinct planid from word_table where userid=?;
select distinct planid from word_table where userid in(?);
从查询请求中获取查询目的(元素值)、目标查询表格(word_table)和待查询层级标识(userid=?)。
根据待查询层级标识确定联合主键的完整前缀为[userid]。根据[userid]的值扫描计数索引count_index_plan中所有的Key符合该前缀的记录[userid,planid],获取并返回这些planid的值。
相比现有关系表的遍历方法,需要将待查询层级标识(userid=?)与每个元素进行匹配,反馈匹配成功的元素的planid。然后,对确定出的planid去重,得到目标查询planid。
然而,本实施例中,根据[userid]的值扫描计数索引count_index_plan中所有的Key符合该前缀的记录[userid,planid],即可得到目标查询planid。由此可见,基于计数索引可以大大提高数据查询的效率。
2)select distinct planid,unitid from word_table where userid=?;
select distinct planid,unitid from word_table where userid in(?);
从查询请求中获取查询目的(元素值)、目标查询表格(word_table)和待查询层级标识(userid=?)。
根据待查询层级标识确定联合主键的完整前缀为[userid]。根据[userid]的值扫描计数索引count_index_unit中所有的Key符合该前缀的记录[userid,planid,unitid],获取并返回这些[planid,unitid]的组合。
3)select distinct unitid from word_table where userid=?and planid=?;
select distinct unitid from word_table where userid=?and planid in(?);
从查询请求中获取查询目的(元素值)、目标查询表格(word_table)和待查询层级标识(userid=?and planid=?)。
根据待查询层级标识确定联合主键的完整前缀为[userid,planid]。根据[userid,planid]扫描计数索引count_index_unit中所有的Key符合该前缀的记录[userid,planid,unitid],获取并返回这些unitid的值。
4)select unitid,wordid from word_table where planid=?;
从查询请求中获取查询目的(元素值)、目标查询表格(word_table)和待查询层级标识(planid=?)。
[planid]不是联合主键的完整前缀,因此首先根据唯一前缀索引uniq_prefix_plan查出所有的联合主键的完整前缀为[userid,planid]。然后扫描word_table中所有的Key符合该前缀的记录[userid,planid,unitid,wordid]并返回。
实施例二
图2是本发明实施例二提供的数据查询方法的流程图。本实施例是在上述实施例的基础上提出的一种可选方案。参见图2,本实施例提供的数据查询方法包括:
S210、从查询请求中获取查询目的、目标查询表格和待查询层级标识。
S220、根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀。
S230、若所述查询目的是大偏移量元素查询,则根据所述目标查询表格关联的计数索引和所述联合主键的完整前缀确定查询起始位置。
其中,所述大偏移量查询是指查询起始位置序号大于位置序号阈值的设定偏移量的元素查询。
例如LIMIT m,n,其中m大于位置序号阈值。LIMIT m,n表示从m开始查询n个元素。
具体地,所述根据目标查询表格关联的计数索引和所述联合主键的完整前缀确定查询起始位置,包括:
从所述目标查询表格关联的计数索引中确定所述联合主键的完整前缀所属层级的各子层级包括元素的数量;
按照设定顺序,对所述各子层级包括的元素的数量进行逐个累计求和;
根据求和结果在所述目标查询表格中确定查询起始位置。
S240、根据所述查询起始位置和设定偏移量确定待查询元素。
本实施例的技术方案,通过若查询目的是大偏移量元素查询,则根据目标查询表格关联的计数索引和所述联合主键的完整前缀确定查询起始位置。根据所述查询起始位置和设定偏移量确定待查询元素。相比传统关系的逐个扫描以找到查询起始位置,本实施例的方案减少了扫描次数。
示例性地,继续以联合主键为(userid,planid,unitid,wordid),计数索引包括count_index_user、count_index_plan和count_index_unit,唯一前缀索引:uniq_prefix_plan,uniq_prefix_unit为例,对元素数量的查询说明如下:
1)select planid,unitid,wordid from word_table where userid=user1limit m,n;
从查询请求中获取查询目的(planid,unitid,wordid)、目标查询表格(word_table)和待查询层级标识(userid=user1)。
根据待查询层级标识确定联合主键的完整前缀为[user1],扫描计数索引count_index_plan,找出所有以[user1]为前缀的Key及其对应的row_cnt(unit,word)的值。并对row_cnt(unit,word)进行累加得到row_cnt_sum(unit,word),直到row_cnt_sum(unit,word)>偏移量m时停止。
假设m=4000,n=600,对count_index_plan的扫描过程如下表:
表1
[user1,plan3]对应的row_cnt_sum(unit,word)=3413<m,而[user1,plan4]对应的row_cnt_sum(unit,word)=4344>m。因此,选择[user1,plan3]为前缀,进一步扫描索引count_index_unit,确定所有以[user1,plan3]为前缀的Key及其对应的row_cnt(word)的值,并对row_cnt(word)进行累加得到row_cnt_sum(word)。(此时row_cnt_sum(word)的初始值为3413),直到row_cnt_sum(word)>m时停止。
对count_index_unit的扫描过程如下表:
表2
[user1,plan3,unit3]对应的row_cnt_sum(word)=3955<m,而[user1,plan4,unit4]对应的row_cnt_sum(word)=4277>m。因此选择[user1,plan3,unit3]为前缀,进一步扫描word_table。跳过前5(m-3955)条记录,从第6条记录开始继续读取n=600条记录并返回。
使用计数索引优化查询的总扫描记录数为:
4(count_index_plan)+4(count_index_unit)+5(主表跳过)+600(主表返回n条)=613
相比不使用计数索引直接扫描word_table的记录数为:m+n=4600。
2)select unitid,wordid from word_table where planid=?limit m,n;
由于查询条件中待查询层级标识的[planid]不能构成联合主键的完整前缀。而根据唯一前缀索引uniq_prefix_plan可以得到主键前缀[userid,planid]。然后按照上例的逻辑处理:先扫描count_index_unit,根据row_cnt(word)跳过无用记录,再扫描word_table。
实施例三
图3是本发明实施例三提供的一种数据查询方法的流程图。本实施例是在上述实施例的基础上提出的一种可选方案。参见图3,本实施例提供的数据查询方法包括:
S310、基于事务机制,对所述目标查询表格的计数索引和唯一前缀索引进行更新。
具体地,所述基于事务机制,对所述目标查询表格的计数索引进行更新,包括:
创建并开启一个事务;
若所述目标查询表格中没有包括各层级标识的联合主键,则在所述目标查询表格中***所述联合主键;
更新计数索引表格中各层级,以及各层级包括元素的数量;
提交事务。
S320、从查询请求中获取查询目的、目标查询表格和待查询层级标识。
S330、根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀。
S340、根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,其中所述计数索引包括:目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。
本实施例对各步骤的执行顺序不做限定。可选地,S320和S330可以先于S310执行。
本实施例的技术方案,通过基于事务机制对计数索引和唯一前缀索引进行更新。从而有效保证计数索引和唯一前缀索引,与目标查询表格的数据一致性。
示例性地,继续以联合主键为(userid,planid,unitid,wordid),计数索引包括count_index_user、count_index_plan和count_index_unit,唯一前缀索引:uniq_prefix_plan,uniq_prefix_unit为例。向数据库中***一条记录[user1,plan1,unit1,word1],更新目标查询表格(word_table),计数索引和唯一前缀索引的具体流程如下:
1)创建并开启一个事务。
2)若word_table中已存在以[user1,plan1,unit1,word1]为联合主键的记录,则直接取消事务并返回,否则***记录[user1,plan1,unit1,word1]到word_table中。
3)若count_index_unit中存在以[user1,plan1,unit1]为Key的记录,则执行如下a、b和c。
a、该记录的Value中row_cnt(word)+1;
b、count_index_plan中[user1,plan1]对应的Value中row_cnt(unit)不变,row_cnt(unit,word)+1;
c、count_index_user中[userid]对应的row_cnt(plan)和row_cnt(plan,unit)不变,row_cnt(plan,unit,word)+1;
若count_index_unit中不存在以[user1,plan1,unit1]为Key的记录,则在count_index_unit中新建记录[user1,plan1,unit1]=>[row_cnt(word)=1]。
4)若count_index_unit中不存在以[user1,plan1,unit1]为Key的记录,且count_index_plan中存在以[user1,plan1]为Key的记录,则执行如下c和d。
c、该记录的Value中row_cnt(unit)+1,row_cnt(unit,word)+1;
d、count_index_user中[userid]对应的row_cnt(plan)不变,row_cnt(plan,unit)+1;
若count_index_plan中不存在以[user1,plan1]为Key的记录,则count_index_plan中新建记录[user1,plan1]=>[row_cnt(unit)=1,row_cnt(word)=1]。
5)若count_index_plan中不存在以[user1,plan1]为Key的记录,且count_index_user中存在以[user1]为Key的记录,则执行如下e。
e、该记录的Value中row_cnt(plan)+1;
若count_index_user中不存在以[user1]为Key的记录,则count_index_user中新建记录[user1]=>[row_cnt(plan)=1,row_cnt(plan,unit)=1,row_cnt(plan,unit,word)=1]。
6)执行如下f和g,以更新唯一前缀索引:
f、若uniq_prefix_plan中不存在以[plan1]为Key的记录,则***
[plan1]=>[user1,plan1];
g、若uniq_prefix_unit中不存在以[user1,unit1]为Key的记录,则***
[user1,unit1]=>[user1,plan1,unit1];
7)提交事务。
需要说明的是,经过本实施例的技术教导,本领域技术人员有动机将上述实施例中描述的任一种实施方式进行方案的组合,以以实现基于数据库对目标数据的快速查询。
实施例四
图4是本发明实施例四提供的一种数据查询装置的结构示意图。参见图4,本实施例提供的数据查询装置包括:数据获取模块10、前缀确定模块20和请求响应模块30。
其中,数据获取模块10,用于从查询请求中获取查询目的、目标查询表格和待查询层级标识;
前缀确定模块20,用于根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀;
请求响应模块30,用于根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,其中所述计数索引包括:目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。
本发明实施例通过在数据库中建立目标查询表格的计数索引,且所述计数索引包括:目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。然后根据所述待查询层级标识确定所述目标查询表格的联合主键的完整前缀。将确定的联合主键的完整前缀与计数索引中的完整前缀进行匹配,将匹配一致的计数索引中的完整前缀或该完整前缀下包括的各层级元素的数量作为查询结果。
相比传统关系表,因为计数索引中包括完整前缀下包括的各层级元素的数量,所以可以直接获取元素数量,从而避免了对关系表的逐个遍历和统计。
相比自定义内存结构,因为计数索引存储在数据库中,所以较少了对内存的占用。并且,因为计数索引和目标查询表格均存储在数据库中,所以解决了内存和数据库数据容易产生不一致的问题。
进一步地,所述请求响应模块,包括:前缀匹配单元和请求响应单元。
其中,前缀匹配单元,用于将所述联合主键的完整前缀与所述计数索引中的完整前缀进行匹配;
请求响应单元,用于根据所述查询目的将所述计数索引中匹配一致的完整前缀,或该完整前缀下包括的各层级元素的数量,作为响应所述查询请求的数据。
进一步地,所述前缀确定模块,包括:前缀补全单元。
其中,前缀补全单元,用于若所述待查询层级标识是所述联合主键的残缺前缀,则基于所述目标查询表格的唯一前缀索引,对所述联合主键的残缺前缀进行补全,
其中,所述唯一前缀索引包括:包括所述联合主键的残缺前缀的唯一索引,以及所述唯一索引对应所述联合主键的完整前缀。
进一步地,所述请求响应模块,包括:起始位置确定单元和查询单元。
其中,起始位置确定单元,用于若查询目的是大偏移量元素查询,其中所述大偏移量查询是指查询起始位置序号大于位置序号阈值的设定偏移量的元素查询,则根据目标查询表格关联的计数索引和所述联合主键的完整前缀确定查询起始位置;
查询单元,用于根据所述查询起始位置和设定偏移量确定待查询元素。
进一步地,所述起始位置确定单元具体用于:
从所述目标查询表格关联的计数索引中确定所述联合主键的完整前缀所属层级的各子层级包括元素的数量;
按照设定顺序,对所述各子层级包括的元素的数量进行逐个累计求和;
根据求和结果在所述目标查询表格中确定查询起始位置。
进一步地,所述装置还包括:索引更新模块。
其中,索引更新模块,用于所述根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据之前,基于事务机制,对所述目标查询表格的计数索引进行更新。
进一步地,所述索引更新模块,包括:事务开启单元、主键***单元、更新单元和事务提交单元。
其中,事务开启单元,用于创建并开启一个事务;
主键***单元,用于若所述目标查询表格中没有包括各层级标识的联合主键,则在所述目标查询表格中***所述联合主键;
更新单元,用于更新计数索引表格中各层级,以及各层级包括元素的数量;
事务提交单元,用于提交事务。
本发明实施例所提供的数据查询装置可执行本发明任意实施例所提供的数据查询方法,具备执行方法相应的功能模块和有益效果。
实施例五
图5为本发明实施例五提供的一种设备的结构示意图。图5示出了适于用来实现本发明实施方式的示例性设备12的框图。图5显示的设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,设备12以通用计算设备的形式表现。设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,***存储器28,连接不同***组件(包括***存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,***总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及***组件互连(PCI)总线。
设备12典型地包括多种计算机***可读介质。这些介质可以是任何能够被设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
***存储器28可以包括易失性存储器形式的计算机***可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机***存储介质。仅作为举例,存储***34可以用于读写不可移动的、非易失性磁介质(图5未显示,通常称为“硬盘驱动器”)。尽管图5中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该设备12交互的设备通信,和/或与使得该设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与设备12的其它模块通信。应当明白,尽管图中未示出,可以结合设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
处理单元16通过运行存储在***存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的数据查询方法。
实施例六
本发明实施例六还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例中任一所述的数据查询方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (13)
1.一种数据查询方法,其特征在于,包括:
从查询请求中获取查询目的、目标查询表格和待查询层级标识;
若所述待查询层级标识是联合主键的完整前缀,则将待查询层级标识作为所述联合主键的完整前缀;
若所述待查询层级标识是所述联合主键的残缺前缀,则基于所述目标查询表格的唯一前缀索引,对所述联合主键的残缺前缀进行补全;
根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,其中所述计数索引包括:所述目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量;
其中,所述唯一前缀索引包括:所述联合主键的残缺前缀的唯一索引,以及所述唯一索引对应所述联合主键的完整前缀;所述目标查询表格的联合主键的完整前缀为目标查询数据所述层级的前缀。
2.根据权利要求1所述的方法,其特征在于,所述根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,包括:
将所述联合主键的完整前缀与所述计数索引中的完整前缀进行匹配;
根据所述查询目的将所述计数索引中匹配一致的完整前缀,或该完整前缀下包括的各层级元素的数量,作为响应所述查询请求的数据。
3.根据权利要求1所述的方法,其特征在于,所述根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,包括:
若所述查询目的是大偏移量元素查询,其中所述大偏移量查询是指查询起始位置序号大于位置序号阈值的设定偏移量的元素查询,则根据所述目标查询表格关联的计数索引和所述联合主键的完整前缀,确定查询起始位置;
根据所述查询起始位置和设定偏移量确定待查询元素。
4.根据权利要求3所述的方法,其特征在于,所述根据所述目标查询表格关联的计数索引和所述联合主键的完整前缀,确定查询起始位置,包括:
从所述目标查询表格关联的计数索引中,确定所述联合主键的完整前缀所属层级的各子层级包括元素的数量;
按照设定顺序,对所述各子层级包括的元素的数量进行逐个累计求和;
根据求和结果在所述目标查询表格中确定查询起始位置。
5.根据权利要求1所述的方法,其特征在于,所述根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据之前,还包括:
基于事务机制,对所述目标查询表格的计数索引进行更新。
6.根据权利要求5所述的方法,其特征在于,所述基于事务机制,对所述目标查询表格的计数索引进行更新,包括:
创建并开启一个事务;
若所述目标查询表格中没有包括各层级标识的联合主键,则在所述目标查询表格中***所述联合主键;
更新计数索引表格中各层级,以及各层级包括元素的数量;
提交事务。
7.一种数据查询装置,其特征在于,包括:
数据获取模块,用于从查询请求中获取查询目的、目标查询表格和待查询层级标识;
前缀确定模块,包括:
前缀补全单元,用于若所述待查询层级标识是联合主键的完整前缀,则将待查询层级标识作为所述联合主键的完整前缀;若所述待查询层级标识是所述联合主键的残缺前缀,则基于所述目标查询表格的唯一前缀索引,对所述联合主键的残缺前缀进行补全;
其中,所述唯一前缀索引包括:所述联合主键的残缺前缀的唯一索引,以及所述唯一索引对应所述联合主键的完整前缀;所述目标查询表格的联合主键的完整前缀为目标查询数据所述层级的前缀;
请求响应模块,用于根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据,其中所述计数索引包括:所述目标查询表格的联合主键的完整前缀,以及该完整前缀下包括的各层级元素的数量。
8.根据权利要求7所述的装置,其特征在于,所述请求响应模块,包括:
前缀匹配单元,用于将所述联合主键的完整前缀与所述计数索引中的完整前缀进行匹配;
请求响应单元,用于根据所述查询目的将所述计数索引中匹配一致的完整前缀,或该完整前缀下包括的各层级元素的数量,作为响应所述查询请求的数据。
9.根据权利要求7所述的装置,其特征在于,所述请求响应模块,包括:
起始位置确定单元,用于若所述查询目的是大偏移量元素查询,其中所述大偏移量查询是指查询起始位置序号大于位置序号阈值的设定偏移量的元素查询,则根据所述目标查询表格关联的计数索引和所述联合主键的完整前缀确定查询起始位置;
查询单元,用于根据所述查询起始位置和设定偏移量确定待查询元素。
10.根据权利要求9所述的装置,其特征在于,所述起始位置确定单元具体用于:
从所述目标查询表格关联的计数索引中确定所述联合主键的完整前缀所属层级的各子层级包括元素的数量;
按照设定顺序,对所述各子层级包括的元素的数量进行逐个累计求和;
根据求和结果在所述目标查询表格中确定查询起始位置。
11.根据权利要求7所述的装置,其特征在于,还包括:
索引更新模块,用于所述根据所述目标查询表格的计数索引、所述联合主键的完整前缀和所述查询目的,确定响应所述查询请求的数据之前,基于事务机制,对所述目标查询表格的计数索引进行更新。
12.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的数据查询方法。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910370676.2A CN111897837B (zh) | 2019-05-06 | 2019-05-06 | 数据查询方法、装置、设备和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910370676.2A CN111897837B (zh) | 2019-05-06 | 2019-05-06 | 数据查询方法、装置、设备和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111897837A CN111897837A (zh) | 2020-11-06 |
CN111897837B true CN111897837B (zh) | 2023-08-15 |
Family
ID=73169384
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910370676.2A Active CN111897837B (zh) | 2019-05-06 | 2019-05-06 | 数据查询方法、装置、设备和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111897837B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113806365B (zh) * | 2021-08-30 | 2024-02-23 | 济南浪潮数据技术有限公司 | 一种单数据源数据管理方法、装置及存储介质 |
CN117149777B (zh) * | 2023-10-27 | 2024-02-06 | 腾讯科技(深圳)有限公司 | 一种数据查询方法、装置、设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001290815A (ja) * | 2000-02-21 | 2001-10-19 | Internatl Business Mach Corp <Ibm> | データベース照会用のユーザ指向方法およびシステム |
US6546394B1 (en) * | 1999-12-28 | 2003-04-08 | Oracle International Corporation | Database system having logical row identifiers |
CN105677732A (zh) * | 2015-12-28 | 2016-06-15 | 国云科技股份有限公司 | 一种带业务属性标识的JavaBean主键设计方法 |
CN105701098A (zh) * | 2014-11-25 | 2016-06-22 | 国际商业机器公司 | 针对数据库中的表生成索引的方法和装置 |
CN107515882A (zh) * | 2016-06-17 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 数据查询方法及装置 |
CN108170815A (zh) * | 2017-12-29 | 2018-06-15 | ***股份有限公司 | 一种数据处理方法、装置及存储介质 |
CN109062936A (zh) * | 2018-06-15 | 2018-12-21 | 中国平安人寿保险股份有限公司 | 一种数据查询方法、计算机可读存储介质及终端设备 |
CN109582672A (zh) * | 2018-11-21 | 2019-04-05 | 金色熊猫有限公司 | 数据处理方法、装置及介质 |
CN109656930A (zh) * | 2018-12-27 | 2019-04-19 | 广州华多网络科技有限公司 | 数据查询方法、装置及*** |
-
2019
- 2019-05-06 CN CN201910370676.2A patent/CN111897837B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6546394B1 (en) * | 1999-12-28 | 2003-04-08 | Oracle International Corporation | Database system having logical row identifiers |
JP2001290815A (ja) * | 2000-02-21 | 2001-10-19 | Internatl Business Mach Corp <Ibm> | データベース照会用のユーザ指向方法およびシステム |
CN105701098A (zh) * | 2014-11-25 | 2016-06-22 | 国际商业机器公司 | 针对数据库中的表生成索引的方法和装置 |
CN105677732A (zh) * | 2015-12-28 | 2016-06-15 | 国云科技股份有限公司 | 一种带业务属性标识的JavaBean主键设计方法 |
CN107515882A (zh) * | 2016-06-17 | 2017-12-26 | 阿里巴巴集团控股有限公司 | 数据查询方法及装置 |
CN108170815A (zh) * | 2017-12-29 | 2018-06-15 | ***股份有限公司 | 一种数据处理方法、装置及存储介质 |
CN109062936A (zh) * | 2018-06-15 | 2018-12-21 | 中国平安人寿保险股份有限公司 | 一种数据查询方法、计算机可读存储介质及终端设备 |
CN109582672A (zh) * | 2018-11-21 | 2019-04-05 | 金色熊猫有限公司 | 数据处理方法、装置及介质 |
CN109656930A (zh) * | 2018-12-27 | 2019-04-19 | 广州华多网络科技有限公司 | 数据查询方法、装置及*** |
Non-Patent Citations (1)
Title |
---|
一种基于TwemProxy的HBase索引缓存方案;瞿龙俊;李星毅;;信息技术(第10期);第111-115页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111897837A (zh) | 2020-11-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9600507B2 (en) | Index structure for a relational database table | |
US9411840B2 (en) | Scalable data structures | |
US8108367B2 (en) | Constraints with hidden rows in a database | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
US9747349B2 (en) | System and method for distributing queries to a group of databases and expediting data access | |
US20080005183A1 (en) | Method And Apparatus for Propagating Tables While Preserving Cyclic Foreign Key Relationships | |
US20180144061A1 (en) | Edge store designs for graph databases | |
KR20100106464A (ko) | 데이터 클러스터와 유의어의 탐색과 수정에 대한 방법 및 시스템 | |
US10296497B2 (en) | Storing a key value to a deleted row based on key range density | |
CN105373541A (zh) | 数据库的数据操作请求的处理方法和*** | |
US7113951B2 (en) | Method and system for detecting tables to be modified | |
US7035842B2 (en) | Method, system, and program for defining asset queries in a digital library | |
CN111897837B (zh) | 数据查询方法、装置、设备和介质 | |
CN110688434B (zh) | 一种兴趣点处理方法、装置、设备和介质 | |
CN105760418B (zh) | 用于对关系数据库表进行交叉列搜索的方法和*** | |
CN107169003B (zh) | 一种数据关联方法及装置 | |
JP2020123320A (ja) | インデックスを管理するための方法、装置、設備及び記憶媒体 | |
CN109614411B (zh) | 数据存储方法、设备和存储介质 | |
US20240143634A1 (en) | System and methods for categorizing captured data | |
CN108549666B (zh) | 一种数据表的排序方法、装置、设备及存储介质 | |
US20080097992A1 (en) | Fast database matching | |
CN109542912B (zh) | 区间数据存储方法、装置、服务器及存储介质 | |
US20180144060A1 (en) | Processing deleted edges in graph databases | |
CN107908724B (zh) | 一种数据模型匹配方法、装置、设备及存储介质 | |
CN114116907A (zh) | 一种数据库的同步方法、装置、电子设备和存储介质 |
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 |