CN116541427B - 数据查询方法、装置、设备及存储介质 - Google Patents
数据查询方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116541427B CN116541427B CN202310791269.5A CN202310791269A CN116541427B CN 116541427 B CN116541427 B CN 116541427B CN 202310791269 A CN202310791269 A CN 202310791269A CN 116541427 B CN116541427 B CN 116541427B
- Authority
- CN
- China
- Prior art keywords
- data
- base table
- index
- node
- target
- 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
- 238000000034 method Methods 0.000 title claims abstract description 87
- 238000009826 distribution Methods 0.000 claims abstract description 125
- 238000012545 processing Methods 0.000 claims abstract description 52
- 238000005192 partition Methods 0.000 claims description 318
- 238000005265 energy consumption Methods 0.000 claims description 80
- 238000013507 mapping Methods 0.000 claims description 66
- 230000002159 abnormal effect Effects 0.000 claims description 18
- 238000004458 analytical method Methods 0.000 claims description 6
- 230000002688 persistence Effects 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 4
- 230000002085 persistent effect Effects 0.000 claims description 3
- 238000012546 transfer Methods 0.000 claims description 2
- 230000011218 segmentation Effects 0.000 claims 1
- 238000007726 management method Methods 0.000 description 17
- 238000005516 engineering process Methods 0.000 description 14
- 230000008901 benefit Effects 0.000 description 13
- 238000004590 computer program Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 12
- 238000013473 artificial intelligence Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 9
- 238000010414 shopping Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000013499 data model Methods 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 238000000638 solvent extraction Methods 0.000 description 6
- 230000003044 adaptive effect Effects 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000003672 processing method Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000000737 periodic effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012954 risk control Methods 0.000 description 2
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 239000004984 smart glass Substances 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/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
-
- 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/2228—Indexing structures
-
- 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/2282—Tablespace storage structures; Management thereof
-
- 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)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开一种数据查询方法、装置、设备及存储介质,方法包括:确定与数据库中的目标基表相关的数据查询需求,所述目标基表包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据;响应于所述数据查询需求,获取所述目标基表的数据分布;确定为所述目标基表配置的多个二级索引;基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引;根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据。通过本申请,可以提升数据查询的效率和灵活性,以及节省处理资源。
Description
技术领域
本申请涉及互联网技术领域,具体涉及计算机技术领域,尤其涉及一种数据查询方法、装置、设备及存储介质。
背景技术
随着大数据的兴起,越来越多的数据库提供基于表格的数据模型,并通过该数据模型来实现业务数据的存储。这些数据库中的任一数据库均可包括至少一个基表(即原始的数据表),每个基表中均包括多个数据行,每个数据行包括一个属性值及属性值对应的业务数据。
目前,当需查询数据库中的某一基表中的某些属性值对应的业务数据时,通常需要对整个基表进行扫描,才可查询得到这些属性值所对应的业务数据;这样的数据查询方式需消耗大量的处理资源来实现全表扫描,且会因耗时较长而导致数据查询的效率较低。
发明内容
本申请实施例提供了一种数据处理方法、装置、设备及存储介质,可以实现对提升数据查询的效率和灵活性,以及节省处理资源。
一方面,本申请实施例提供了一种数据查询方法,所述方法包括:
确定与数据库中的目标基表相关的数据查询需求,所述目标基表包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据;其中,所述数据查询需求用于指示待查询的至少一个属性值;
响应于所述数据查询需求,获取所述目标基表的数据分布,所述数据分布用于指示所述目标基表中的数据行的分布情况;
确定为所述目标基表配置的多个二级索引,各个二级索引均用于指示所述目标基表中的属性值到主键的映射关系,不同二级索引对应不同查询方式;
基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引;根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据。
另一方面,本申请实施例提供了一种数据查询装置,所述装置包括:
处理单元,用于确定与数据库中的目标基表相关的数据查询需求,所述目标基表包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据;其中,所述数据查询需求用于指示待查询的至少一个属性值;
所述处理单元,还用于响应于所述数据查询需求,获取所述目标基表的数据分布,所述数据分布用于指示所述目标基表中的数据行的分布情况;
所述处理单元,还用于确定为所述目标基表配置的多个二级索引,各个二级索引均用于指示所述目标基表中的属性值到主键的映射关系,不同二级索引对应不同查询方式;
查询单元,用于基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引;根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据。
再一方面,本申请实施例提供了一种计算机设备,所述计算机设备包括输入接口和输出接口,所述计算机设备还包括:
处理器以及计算机存储介质;
其中,所述处理器适于实现一条或多条指令,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行上述所提及的数据查询方法。
再一方面,本申请实施例提供了一种计算机存储介质,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由处理器加载并执行上述所提及的数据查询方法。
再一方面,本申请实施例提供了一种计算机程序产品,该计算机程序产品包括一条或多条指令;所述计算机程序中的一条或多条指令被处理器执行时,实现上述所提及的数据查询方法。
本申请实施例可为数据库中的目标基表配置多个二级索引,使得在确定与数据库中的目标基表相关的数据查询需求后,可根据目标基表的数据分布从多个二级索引中选取目标二级索引,从而根据目标二级索引以及相应的查询方式,从目标基表中查询数据查询需求所指示的各个属性值对应的业务数据。由于目标二级索引指示了目标基表中的属性值到主键的映射关系,因此基于目标二级索引查询业务数据时,可实现先通过目标二级索引确定出数据查询需求所指示的各个属性值对应的主键,从而基于确定出的主键在目标基表中快速定位出相应的数据行,进而快速从定位出的数据行中读取出业务数据。通过此方式,可避免对目标基表进行全表扫描,不仅可有效节省处理资源,还可缩短数据查询的时长,提升数据查询的效率。进一步的,通过为目标基表配置多个二级索引,可使得在数据查询时,不局限于单一的二级索引,提升二级索引的选择性和数据查询的灵活性。并且,考虑到目标基表可能存在更新,不同的数据分布适用不同的二级索引,所以通过基于数据分布的不同自动路由(选择)二级索引的方式,可使得路由出的二级索引与当前的目标基表更适配,这样可有利于主键的查找,从而提升数据查询的效率和有效性。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种通过节点集群分布式存储基表的示意图;
图2是本申请实施例提供的一种数据查询方法的流程示意图;
图3a是本申请实施例提供的一种基于表的二级索引的分区结果的示意图;
图3b是本申请实施例提供的一种基于表的二级索引的查询原理的示意图;
图3c是本申请实施例提供的一种共置二级索引的分区结果的示意图;
图3d是本申请实施例提供的一种共置二级索引的查询原理的示意图;
图3e是本申请实施例提供的一种多路搜索树的结构示意图;
图3f是本申请实施例提供的一种索引分区的结构示意图;
图4是本申请另一实施例提供的一种数据查询方法的流程示意图;
图5a是本申请另一实施例提供的一种使用基于表的二级索引进行数据查询的流程示意图;
图5b是本申请另一实施例提供的另一种使用基于表的二级索引进行数据查询的流程示意图;
图5c是本申请另一实施例提供的一种使用共置二级索引进行数据查询的流程示意图;
图6是本申请实施例提供的一种数据查询装置的结构示意图;
图7是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
在本申请实施例中,后续提及的数据库是指提供基于表格的数据模型的数据库;也就是说,后续提及的数据库是指通过表格存储数据的数据库。具体的,该数据库可以是关系型数据库管理系统(Relational Database Management System,RDBMS),或者也可以是非关系型数据库管理系统(NoSQL),对此不作限定。其中:
(一)关系型数据库管理系统可简称为关系型数据库,其是指采用了关系模型(即二维表格模型),使用SQL(Structured Query Language,结构化查询语言)作为操作语言的数据库管理系统。任一关系型数据库均是基于表格的数据模型来存储数据的,其特点是:在数据存储中,表与表之间的关系可以用外键等机制表示,且SQL也支持复杂的查询操作。
(二)非关系型数据库管理系统可简称为非关系型数据库,其是指采用其他数据模型(如键值对模型,文档模型等)的数据库管理系统,例如HBase(基于键值对模型的NoSQL)。随着大数据的兴起,非关系型数据库(尤其是键值存储的HBase)被广泛使用;HBase基于简单的数据模型和查询接口可以很容易地分发数据,因此其具有很高的可扩展性,并且与传统的RDMBS相比,事务管理等其他典型的数据库管理功能在HBase中只以基本形式实现从而降低了复杂性。鉴于关系性查询在实际业务中变得非常普遍,业务侧开始要求HBase支持与RDBMS类似的关系查询功能,但同时要保持Key-Value键值存储的灵活性和可扩展性。需要说明的是,虽然基于大多数NoSQL中的数据通常以键值对或者文档等形式存储,但这些NoSQL也可提供基于表格的数据模型来存储数据。
需说明的是,无论后续提及的数据库是关系型数据库还是非关系型数据库,其均是基于表格的数据模型来存储数据的,其内部包括一个或多个基表;所谓的基表是指原始的数据表,其包括多个数据行以及用于索引每个数据行的主键。此处提及的数据行也可称为基表记录(简称记录),一个数据行可包括一个属性值及该属性值对应的业务数据。此处提及的主键是用于快速查找和访问特定记录(即特定的数据行),在关系型数据库中,主键是用于唯一标识基表中的每条记录(即数据行)的一个Key(键);在非关系数据库中,主键的概念与关系型数据库中的主键的概念相同。例如在HBase 中,每一行都必须有一个唯一的Key行键作为主键。
并且,针对数据库中的任一基表,均可支持谓词查询。所谓的谓词是指可用于查询的条件或筛选器,其可以包含类似于WHERE子句(用于有条件地从单个表中取回数据或者将多个表进行合并的子句)中使用的逻辑操作符(例如AND(和)和OR(或))和比较操作符(例如等于,大于,小于,不等于等),其还可包含一个或多个属性词,基于该一个或多个属性词以及逻辑操作符和比较操作符,可确定出基表中待查询的一个或多个属性值。可见,谓词可以用于返回数据集(即基表)中符合特定条件的子集(特定的属性值对应的业务数据),从而提高查询效率。相应的,谓词查询是指检索出基表中的一部分业务数据(即谓词所指示的各个属性值对应的业务数据)的查询,即谓词查询仅需检索出基表中的全部业务数据中的一个子集。
在一种具体实现中,本申请实施例可以通过扫描整个基表来执行谓词查询;此情况下,基表中的每个记录(即每个数据行)均会被检查,只有符合条件的记录中的业务数据才会被返回。但需说明的是,如果基表已经基于定义的搜索约束的属性列进行排序,那么可以避免进行完整的表扫描,因为与待查询的属性值相匹配的业务数据可以在对数(log)时间内找到。
另一种具体实现中,本申请实施例可以通过特殊的索引来避免扫描整个基表,具体可通过特殊的索引来帮助识别符合条件的记录,并从基表中检索这些符合条件的记录。这种特殊的索引可被称为二级索引(或辅助索引),其定义在基表中的一个或多个属性列上,且可在基表中的非主键的属性值上构建。该二级索引可通过为基表中的非主键的属性值提供替代访问路径,从而显著提高业务约束下的业务数据子集的选择效率和查询效率,进而提升查询性能;可见,二级索引的性能优势主要来自于检索仅包含相关记录的数据,从而减少I/O(输入/输出)的数量。具体的,二级索引可包括为基表中现有的每个属性值进行索引的数据;为基表中的任一属性值进行索引的数据均可以看作是一对键值对,其中,该任一属性值作为该数据中的键,而该数据中的值则是一个指向拥有属性值的所有记录(数据行)的指针列表。
需要说明的是,在集中式数据库管理系统(DBMS)中,指针通常是一个物理标识符,指示记录(数据行)在文件系统(即基表)中的位置;而在分布式系统或更高级的实现中,指针通常是记录(数据行)对应的主键。为便于描述,后续均将二级索引中的指针称为主键。简单的二级索引实现可以是一个系统表(倒排列表),该系统表中的第一列存储基表中的属性值,而该系统表中的第二列(即索引属性列)存储基表中的主键;进一步的,这个系统表可以按主键排序,从而使特定属性值的查找加速。
基于上述描述,本申请实施例基于AI(Artificial Intelligence,人工智能)技术,提出了一种基于二级索引的数据查询方案,以提升数据查询的效率且节省处理资源。所谓的AI技术是指:利用数字计算机或数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统的技术。换句话说,AI是计算机科学的一个综合技术;其主要通过了解智能的实质,生产出一种新的能以人类智能相似的方式做出反应的智能机器,使得智能机器具有感知、推理与决策等多种功能。相应的,AI技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
具体的,该数据查询方案的大致原理如下:针对数据库中的任一基表,可利用AI技术中的大数据处理技术为其配置多个二级索引。其中,为该任一基表配置的每个二级索引均用于指示相应基表中的属性值到主键的映射关系,且为该任一基表配置的不同二级索引对应不同的查询方式;不同的查询方式适用基表的不同数据分布,数据分布用于指示基表中的数据行的分布情况。若接收到关于该数据库的数据查询参数(包括表名称和用于选择特定行的谓词),则可将数据查询参数中的表名称所指示的基表作为目标基表,并根据数据查询参数中的谓词确定待查询的属性值。然后,可根据该目标基表的数据分布从目标基表对应的多个二级索引中,自动路由出一个合适的二级索引作为目标二级索引;并根据目标二级索引以及对应的查询方式,从目标基表中查询待查询的属性值对应的业务数据。
进一步的,上述提及的数据库可以是一个集中式数据库,所谓的集中式数据库是指基于一个节点存储数据的数据库;此情况下,该数据库中的任一基表中的全部数据是存储在一个节点中的。或者,上述提及的数据库也可以是基于AI技术中的分布式存储技术所搭建的分布式数据库;所谓的分布式数据库是指基于一个节点集群来存储数据的数据库,节点集群由多个节点构成。此情况下,该数据库中的任一基表可被拆分成多个基表分区,一个基表分区包括该任一基表中的至少一个数据行以及相应数据行对应的主键;这多个基表分区被分布存储在节点集群中的多个节点中,不同基表分区位于不同的节点中。例如,将某一基表拆分成了3个基表分区,则可通过节点集群中的4个节点来存储这3个基表分区,如图1所示。为便于阐述,后续均以数据库为分布式数据库为例进行说明。应理解的是,节点集群中的节点可不仅限于用于存储基表分区的节点,还可包括其他节点,例如存储基表中的全部数据的节点,等等。
其中,上述提及的节点是指具有存储能力的设备,该设备可以是终端或服务器,对此不作限定。此处提及的终端可以是智能手机、电脑(如平板电脑、笔记本电脑、台式计算机等)、智能穿戴设备(如智能手表、智能眼镜)、智能语音交互设备、智能家电(如智能电视)、车载终端或飞行器等。此处提及的服务器可以是独立的物理服务器,也可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器,等等。进一步的,任一节点均可位于区块链网络内或区块链网络外,对此不作限定;更进一步的,任一节点还可将内部所存储的任一数据上传至区块链网络进行存储,以防止内部所存储的数据被篡改,提升数据安全性。
经研究表明,本申请实施例提出的数据查询方案可以具有如下有益效果:通过为每个基表配置多个二级索引,可以使得在数据查询时,可以不局限于单一的二级索引,这样可以有效提升二级索引的选择性和数据查询的灵活性。由于任一基表对应的二级索引均可用于指示该任一基表中的属性值到主键的映射关系,因此在基于目标二级索引查询业务数据时,可以实现先通过目标二级索引确定出待查询的属性值对应的主键,从而基于确定出的主键在目标基表中快速定位出相应的数据行,进而快速从定位出的数据行中读取出业务数据。可见,通过此方式,可以避免对目标基表进行全表扫描,这样不仅可有效节省处理资源,还可缩短数据查询的时长,提升数据查询的效率。并且,通过基于数据分布的不同自动路由二级索引的方式,可使得路由出的二级索引与当前的目标基表的数据分布更适配,这样可有利于主键的查找,从而提升数据查询的效率和有效性。
基于上述数据查询方案的相关描述,本申请实施例提出一种数据查询方法;在本申请实施例中,该数据处理方法可由上述提及的节点执行,也可以由除节点之外的终端或服务器执行,还可以由客户端执行,对此不作限定。此处提及的客户端是指具有访问数据库中的基表的权限的任一应用,例如视频播放应用、音乐播放应用、游戏应用、社交应用(如即时通讯应用、内容分享应用)、浏览器应用、信息流应用,等等。
需要说明的是,客户端的应用类型可以是以下任一种:云应用、APP(application,客户端)、轻应用、网页应用,等等。云应用是指:在云端服务器中安装并运行的应用程序;APP是指:在终端中安装并运行的应用程序;轻应用是指:无需下载、即搜即用的Quick App(快应用),其通常作为子程序运行于其他APP中;网页应用是指:在网页中运行的应用程序。
为便于阐述,后续均以客户端执行该数据查询方法为例进行说明。
具体的,请参见图2所示,本申请实施例提出的数据处理方法可以大致包括以下步骤S201-S205:
S201,确定与数据库中的目标基表相关的数据查询需求。
其中,数据库中可包括一个或多个基表,而目标基表是指数据库中待查询的基表。目标基表可包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据。此处提及的属性值可以理解成是目标业务的属性值,其可根据目标业务的运营需求来设定;而属性值对应的业务数据可理解成是在目标业务的运营过程中,产生或收集到的与属性值相关的数据。
此处提及的目标业务可以是任一业务,例如广告推荐业务、资源风险控制业务、购物业务、通信业务,等等。可见,本申请实施例提出的数据查询方法可面向广告推荐、资源风险控制、购物、通信等重要业务场景;即本申请实施例提出的数据查询方法可应用在大规模的分析查询系统以及推荐系统中的目标业务,从而为目标业务赋能。
例如,当目标业务是广告推荐业务时,属性值可以是对象名称(name),而属性值对应的业务数据可以包括:在广告推荐业务的运营过程中,收集到的对象名称所指示的对象的广告浏览记录(如历史浏览的广告的类型和内容等);或者,在广告推荐业务的运营过程中,收集到的对象名称指示的对象的外观信息(如身高、体重等)。又如,当目标业务是购物业务时,属性值可以是对象名称,而属性值对应的业务数据可以包括:在购物业务的运营过程中,根据对象名称所指示的对象的历史购物操作所生成的商品数据(如商品名称、商品用途等);或者,在购物业务的运营过程中,收集到的对象名称指示的对象的商品浏览记录;或者,在购物业务的运营过程中,收集到的对象名称指示的对象的外观信息(如身高、体重等)。
可以理解的是,在本申请实施例的具体实施方式中,如果涉及了对象等相关的数据(如上述提及的对象名称、广告浏览记录、商品浏览记录、历史购物操作以及外观信息等),那么当本申请实施例运用到具体产品或技术中时,这些相关数据是在获得对象许可或者同意的情况下收集的,且相关数据的收集、使用和处理遵守相关国家和地区的相关法律法规和标准。
在步骤S201的具体实施过程中,客户端可获取关于数据库的数据查询参数,该数据查询参数可至少包括表名称和谓词。然后,可根据数据查询参数中的表名称,从数据库中确定出目标基表,目标基表的表名称与数据查询参数中的表名称相同。并且,可根据数据查询参数中的谓词,确定关于该目标基表的数据查询需求,该数据查询需求用于指示待查询的至少一个属性值。
例如,设属性值是name:若谓词包括name=‘name4’,则可表明此次查询是点查询(即仅针对一个属性值的查询),生成的数据查询需求可用于指示name4这个属性值。若谓词包括name>‘name1’且name<‘name5’,则可表明此次查询是范围查询(即针对至少两个属性值的查询),生成的数据查询需求可用于指示name1-name5这个范围内的各个属性值,即指示name2、name3和name4这三个属性值,不指示name1和name5。
应理解的是,此处只是示例性阐述了数据查询需求的确定方式,并非穷举;例如,在其他实施例中,也可直接从其他应用程序或设备处获取该数据查询需求,或者提供操作界面来获取数据查询需求。
S202,响应于数据查询需求,获取目标基表的数据分布。
其中,该数据分布用于指示目标基表中的数据行的分布情况。具体的,该数据分布可用于指示目标基表中的各个数据行中的业务数据的数据量。并且,当数据库是集中式数据库时,该数据分布可用于指示目标基表中的数据行均存储在一个节点中。当数据库是分布式数据库时,该数据分布可用于指示目标基表中的数据行分布在节点集群中的P个节点中,任一节点中所存储的数据行和对应的主键构成一个基表分区,P为正整数且P大于1。并且,在此情况下,数据分布信息还可指示P个节点中的每个节点所负责的属性值范围,节点所负责的属性值范围是指节点内存储的基表分区中的属性值所构成的范围;例如,某一节点内存储的基表分区包括属性值a和属性值b,那么该节点所负责的属性值范围即是采用属性值a和属性值b构成的范围。
需要说明的是,本申请实施例对目标基表的数据分布的生成方式不作限定。例如,目标基表的数据分布可以是由数据库定期或实时对内部存储的目标基表进行数据分析所生成的。若数据库每次生成目标基表的数据分布后,便将生成的数据分布发送至客户端进行备份存储,则客户端在执行步骤S202时,可从本地空间中读取该目标基表的数据分布;若数据库每次生成目标基表的数据分布后,未向客户端发送生成的数据分布,则客户端在执行步骤S202时,可从数据库中获取该目标基表的数据分布。还需说明的是,数据库生成目标基表的数据分布可理解成是:通过数据库中具有数据分析功能的代码模块来生成目标基表的数据分布,或者由数据库对应的某个节点(如节点集群中存储有目标基表的全部数据的节点),生成目标基表的数据分布。
应理解的是,由于目标基表可动态更新(如增加数据行,删除数据行或更新数据行中的属性值或业务数据),因此目标基表的数据分布也可能存在更新。本申请实施例通过步骤S202确定的数据分布是指:目标基表在当前时刻的数据分布(即最新的数据分布);所谓的当前时刻是指:响应于数据查询需求的时刻。
S203,确定为目标基表配置的多个二级索引。
在本申请实施例中,为目标基表配置的多个二级索引中,每个二级索引均是基于目标基表中的主键和数据行之间的索引关系建立的;且各个二级索引均用于指示目标基表中的属性值到主键的映射关系,不同二级索引对应不同查询方式。具体的,为目标基表所配置的多个二级索引可包括但不限于:基于表的二级索引和共置二级索引。
下面对本申请实施例提出的基于表的二级索引和共置二级索引进行介绍:
(一)基于表的二级索引。
①相关定义:
基于表的二级索引是一种特殊的系统表,其可包括行键列和其他列;行键列存储的是相应基表中的属性列的列值(即属性值),而其他列存储的则是相应基表中包含该属性值的记录(数据行)对应的主键。可见,为目标基表所配置的基于表的二级索引本质是一个表格,其包括多个行键以及每个行键的索引数据;行键为目标基表中的属性值,行键的索引数据包括相应行键在目标基表中对应的主键。
②存储方式:
对于分布式存储的基表而言,其对应的基于表的二级索引中的数据可以集中存储在一个节点中;或者,其对应的基于表的二级索引也可以像基表一样进行分区并分布在节点集群中。因此,当目标基表的数据分布指示目标基表中的数据行分布在节点集群中的P个节点中时,该基于表的二级索引可被拆分成Q个二级索引表,且Q个二级索引表分布在节点集群中的Q个节点中,不同二级索引表存储在不同得到节点中,Q为正整数。
值得强调的是:用于分布式存储基于表的二级索引的Q个节点和用于分布式存储目标基表的P个节点可以完全相同,或者部分相同,或者完全不同。若存在一个节点同时存储了二级索引表和基表分区,则通常来说,该节点存储的二级索引表对应的属性值范围和存储的基表分区对应的属性值范围之间是有差异的。
例如,设目标基表为对象信息表,且目标基表分布在2个节点上进行了分区;其中,节点1中的基表分区对应的属性值范围包括name1和name2,节点2中的基表分区对应的属性值范围包括name2、name4和name6。若基于表的二级索引也是在这2个节点上进行分区的,则该基于表的二级索引的分区结果可示例性地参见图3a所示。基于图3a可知,基于表的二级索引中的属性name值(即行键))在节点1和节点2中分布;且存储在节点2中的name2的索引数据指向了两个基表记录(即数据行),其中一个基表记录在节点1中,另一个基表记录在节点2中。
③查询原理:
参见图3b所示,对于分布式存储的基于表的二级索引而言,其对应的查询业务数据的原理为:客户端先将基于二级属性值(即基于表的二级索引中的行键)的读取请求直接发送到包含对应二级属性值的二级索引表所处的节点;这个节点可以根据该读取请求中的二级属性值(即行键)以及内置的二级索引表,将基表记录(即数据行)对应的主键(即相应二级属性值在二级索引表中对应的索引数据)回传给客户端;然后,客户端可以通过接收到的主键从相应的节点查找每个基表记录(即数据行)中的业务数据。可理解的是,若接收到读取请求的节点内部存储有基表分区,且该基表分区中包括查询出的主键,则该节点也可以在基表分区中读取相应的基表记录,并将读取出的基表记录中的业务数据发送回客户端。
可见,基于表的二级索引对应的查询过程是一个需要四次消息交换的过程。应理解的是,在查询过程中,客户端可以并行从不同的节点检索基表记录,但没有相关数据的基表分区或索引分区不会参与到此查询过程中。并且,索引检索(即主键检索)时,只会发送请求给包含所需属性值的索引分区所在的节点;对于点查询(例如name='name4'),只需要向一个节点发送请求,而对于范围查询(例如name LIKE 'name1' to 'name4'),若所需查询的属性值跨越多个索引分区,则可分别发送请求至相应的各个索引分区所在的节点,且之后与具有匹配记录的基表分区所在的节点相连接。
由此可见,如果匹配的基表记录(即数据行)所涉及的基表分区的数量相对于总分区数(即P值)而言非常少,那么基于表的二级索引是一种有效的方法,因为在使用基于表的二级索引查询业务数据时,可以避免与无需返回业务数据的节点进行通信。
④索引结构:
在一种具体实现中,基于表的二级索引的结构可以是支持任一行键的索引数据通过多行来存储的结构。基于此,针对基于表的二级索引中的任一行键而言,若任一行键在目标基表中对应的主键的数量为至少两个,则基于表的二级索引所包括的任一行键的索引数据,可以是直接采用该任一行键对应的各个主键所构建的离散化数据。此情况下,任一行键对应的各个主键在该任一行键的索引数据中是相互独立的;并且此情况下,任一行键对应的索引数据位于基于表的二级索引中的多行,索引数据中的一个主键占据一行(如图3a所示)。
另一种具体实现中,为便于提升后续查找的便利性且减少基于表的二级索引的行数,本申请实施例针对基于表的二级索引还设计了一种新的结构,该新的结构支持不同的属性值(即行键)代表一行,即支持任一行键的索引数据均通过一行来存储。基于此,针对基于表的二级索引中的任一行键而言,若任一行键在目标基表中对应的主键的数量为至少两个,则基于表的二级索引所包括的该任一行键的索引数据,对任一行键对应的各个主键进行序列化排列所得到的序列化数据。
进一步的,可以采用TreeSet(有序集)的序列化形式表示索引数据,索引数据中的各个主键可以降序排列或者可以升序排列。例如,设目标基表中包括4个数据行,其对应的主键依次为1、2、3、4;并且,设第1个数据行和第3个数据行中的属性值均为name1,第2个数据行和第4个数据行中的属性值均为name2;基于此,可以得到下述表1所示的基于表的二级索引:
表1
基于表1可知,目标基表的主键存储在基于表的二级索引中的索引数据列,且基于表的二级索引可包括两行。第一行的行键'name1'是来自目标基表中的name列(属性值列)中的属性值,与其关联的索引数据包括的是目标基表中name为'name1'的两个记录(数据行)的主键。第二行的行键'name2'也是来自目标基表中的name列(属性值列)中的属性值,与其关联的索引数据包括的是目标基表中name为'name2'的两个记录(数据行)的主键。
由于TreeSet基于红黑树数据结构,可实现数据插入、数据更新和数据删除的时间成本均只有O(logn)(可表示为θ(logn)),而基于离散化的列表结构虽然可以容易地进行O(1)(可表示为θ(1))的数据插入,但进行数据更新和数据删除时所需的时间成本均为O (n)(可表示为θ(n))。其中,O(logn)表示数据增大n倍时,时间成本增大logn倍;O(1)表示数据增大n倍时,时间成本不变;O(n)表示数据增大n倍时,时间成本增大n倍。因此可知,基于TreeSet的序列化形式表示索引数据,有利于降低后续维护基于表的二级索引时所需的时间成本。
还需说明的是,当数据库是HBase时,该基于表的二级索引可以通过HBase表(HTable)实现,这样可以使得该基于表的二级索引可以重复使用HBase已提供的大部分功能。且在HBase中,目标基表中的一个属性值代表该基于表的二级索引中的一个行,其作为行键;且该基于表的二级索引可具有一个列族,且除主键列之外,还可具有一个列,在该列下存储的值是目标基表中的一组主键,以TreeSet的序列化形式表示。
另外,针对HBase而言,虽然基于表的二级索引因为需要随着目标基表的更新而更新,所以需对目标基表进行监测以确定目标基表是否更新,但由于HBase的协处理器可以实时监测目标基表的更新,因此在使用类似于触发器、存储过程和面向方面的编程允许将代码(即基于表的二级索引)注入到数据库中时,无需更改数据库的基本代码(即源码),这样可使得基于表的二级索引具有可插拔性。另外,本申请实施例还扩展了HBase对应的客户端接口,以允许客户端在至少一个节点中创建索引和基于索引的查询。
⑤区域管理:
区域可理解成是基表分区,而区域管理主要包括:区域分配、区域负载均衡和区域复制。在实际运用中,数据库可自动决定何时分割区域以及在哪个节点上放置它们(即分割出的基表分区),因此原则上来说,在设计基于表的二级索引时,可无需关注区域管理。但数据库可允许用户在创建基于表的二级索引(例如HTable)时,指定多个区域(即基表分区),从而使得仅根据指定的多个区域中的数据来创建基于表的二级索引,以实现负载均衡并防止少数区域所在的节点(如服务器)成为索引查找的热点。
应理解的是,由于本申请实施例是基于行键来实现基表拆分和索引拆分的,因此基表分区或索引分区的拆分或合并对索引管理没有影响。且当基表区域发生拆分或合并时,数据库可自动查找重定向到适当的区域;具体的,在基表分区发生拆分或合并后,数据库可记录每个基表分区的主键范围以及各个基表分区所在的节点,当客户端通过数据库的接口向分配了基表分区的节点发送请求时,数据库可根据记录的信息以及请求携带的行键,将该请求重定向至对应的基表分区和相应的节点。并且,对于数据库(如HBase)而言,基表分区和索引分区是两个不同的表格(如HTable),因此基表分区和索引分区是相互独立的,所以区域管理完全透明且正交于索引管理。
(二)共置二级索引。
①相关定义:
共置二级索引是指与相应基表共置在同一个节点中的二级索引,其遵循共享事务架构,所谓的共享事务架构是指多个服务共用同一个数据源的结构,其具有整体性能和可伸缩性优势。为目标基表所配置的共置二级索引可包括多个辅助索引值以及每个辅助索引值的映射数据;辅助索引值为目标基表中的属性值,辅助索引值的映射数据包括相应辅助索引值在目标基表中对应的主键。与前述提及的基于表的二级索引中的索引数据类似,该共置二级索引中的映射数据可以是离散化数据,也可以是序列化数据,对此不作限定。
②存储方式:
针对为目标基表所配置的共置二级索引而言,当目标基表的数据分布指示目标基表中的数据行集中存储在一个节点中时,该共置二级索引也集中存储在这节点中。当目标基表的数据分布指示目标基表中的数据行分布在节点集群中的P个节点中时,即当目标基表被拆分成P个基表分区时,该共置二级索引可包括P个索引分区,一个索引分区与一个基表分区对应,具有对应关系的索引分区和基表分区共置在同一个节点中,且任一索引分区用于指示相应的基表分区中的属性值到主键的映射关系。即此情况下,每个基表分区都有一个在相同分区(即相同节点)的索引分区,该索引分区具有涵盖基表分区中所有行的索引数据。
索引分区和基表分区对应是指:索引分区对应的属性值范围和基表分区对应的属性值范围相同,且索引分区对应的主键范围和基表分区对应的主键范围也相同。例如,设目标基表为对象信息表,且目标基表分布在2个节点上进行了分区;其中,节点1中的基表分区对应的属性值范围包括name1和name2,节点2中的基表分区对应的属性值范围包括name2、name4和name6。那么共置二级索引也需在这2个节点上进行分区,其对应的分区结果可示例性地参见图3c所示。基于图3c可知,对于name2这一个二级索引数据(即辅助索引值)的映射数据有两个Mark值(即主键)时,一个Mark值在节点1中,另一个Mark值在节点2可知。由此可见,共置二级索引中的任一索引分区数据存储在与相应基表记录相同的节点上,且每个节点负责维护其内置的索引分区;也就是说,每个节点分别负责维护其内置的基表分区对应的索引分区,这样可让写入基表的代价降低。
③查询原理:
参见图3d所示,对于分布式存储的共置二级索引而言,其对应的查询业务数据的原理为:客户端先将基于二级属性值(即共置二级索引中的辅助索引值)的读取请求,广播各个基表分区所处的节点;这些节点可以根据该读取请求中的二级属性值(即辅助索引值)在内置的索引分区中查找相应的映射数据(即相应辅助索引值在基表分区中对应的主键)。如果有节点在内置的索引分区中找到相应的映射数据,则可根据映射数据在本地的基表分区中查询相应的基表记录(即数据行),并将查询到的基表记录(即数据行)中的业务数据返回客户端。
也就是说,在基于共置二级索引查询业务数据时,每当读取请求到达时,该读取请求将被广播到系统中包含至少一个基表分区的所有节点,以便每个节点可以检索其所内置的辅助索引部分(即索引分区)。如果某个节点在其辅助索引中找到匹配项,则该节点根据匹配项将查找本地基表分区中相应的记录并将其返回给客户端。应理解的是,读取请求需广播到节点集群中包含至少一个基表分区的所有节点(即前述提及的P个节点),这是因为任何基表分区都可能包含与读取请求中的二级属性值相匹配的基表记录(即数据行),因此需要在所有基表分区所共置的索引分区中搜索二级属性值所对应的映射数据(即主键)。
由此可见,由于共置二级索引所涉及的二级索引搜索(即主键搜索)和基表检索等步骤均是在节点本地执行的,而分区上的单个搜索是可以并行执行的,因此基于共置二级索引的读取请求具有两次跳跃(即查询索引分区和查询基表分区)。原则上来说,相较于基于表的二级索引所需的四次请求而言,共置二级索引所需的处理资源更低。但是如果基表具有许多基表分区且这些基表分区跨越了许多节点,则所有索引分区对应的消息和索引查找成本可能较高,如果仅部分节点返回了少量的基表记录,则虽然共置二级索引具有消息请求轮次少的优势,但这优势可能无法抵消额外的消息和处理成本。
可理解的是,每当将基表记录插入基表或更新基表记录的索引属性时,均需更新相应的二级索引。而针对基于表的二级索引而言,在大节点集群中的大多数的基于表的二级索引中的索引分区将位于与其基表记录不同的节点上,因此对于基于表的二级索引的更新可能涉及较大通信开销,且可能会导致索引更新的争用,因为对于非唯一和倾斜的数据分布,多次并发更新同一个二级索引数据的概率会增加,使得处理该索引数据的节点成为热点,从而导致计算倾斜。但由于共置二级索引中的每个索引分区是由节点自己维护的,因此索引分区的数据可在节点的本地更新,无需消耗节点之间的通信开销,因此相较于基于表的二级索引而言,共置二级索引的优势可包括对基表的写入成本更低且减少计算倾斜的问题。另外,共置二级索引还具有如下优势:可以同时支持使用两个二级索引来满足联合查询的能力,即在共置二级索引的情况下,可以轻松执行联合查询的操作;这是因为共置二级索引可支持两个索引分区中的索引行可在同一节点(作为负责基表分区的节点)上,而在基于表的二级索引涉及的方法中,DBMS需将来自不同节点的基本记录对应的各种索引行汇集在一起,才可执行此操作。
④索引结构:
在一种具体实现中,共置二级索引的结构可以是基于表格的结构。在此情况下,若共置二级索引包括P个索引分区,则这P个索引分区中的每个索引分区均是一个表格。以每个索引分区中的各个辅助索引值的映射数据均为离散化数据为例,索引分区的示意图可参见图3c所示。从图3c可以看出,当各个映射数据均为离散化数据时,若存在某映射数据(如图3c中的name1这一辅助索引值对应的映射数据)包括多个主键,则该映射数据通过索引分区中的多行进行存储,即该映射数据中的一个主键占据索引分区中的一行。应理解的是,若每个索引分区中的各个辅助索引值的映射数据是序列化数据,则任一映射数据均是通过索引分区中的一行进行存储的;也就是说,即使存在某映射数据包括多个主键,则该映射数据中的各个主键通过索引分区中的一行进行存储,此情况下的索引分区的结构与前述表1类似。
另一种具体实现中,共置二级索引的结构可以是基于多路搜索树(Blink-tree,B+树)的树形结构。在此情况下,若共置二级索引包括P个索引分区,则这P个索引分区中的每个索引分区均包括一个多路搜索树和一个数据集。其中,多路搜索树是通过叶子结点存储辅助索引值的,不同叶子结点存储不同辅助索引值,且各个辅助索引值是依序(如从小到大的顺序或从大到小的顺序)存储在各个叶子结点中的;数据集包括相应索引分区中的各个辅助索引值的映射数据,各个映射数据与相应辅助索引值所处的叶子结点之间存在映射关系。需要说明的是,多路搜索树的根结点和中间结点(即位于根结点和叶子结点之间的结点)均不存储辅助索引值,而是存储用于查找叶子结点的指示数据;在基于多路搜索树查询某一辅助索引值的映射数据时,先根据根结点和中间结点找到存储该辅助索引值的叶子结点,根据叶子结点和数据集中的映射数据之间的映射关系,将找到的叶子结点映射到数据集中,便可查询到相应的映射数据。
其中,根据根结点和中间结点找到存储该辅助索引值的叶子结点的方式为:s11,访问根结点,并根据辅助索引值和根结点中存储的指示数据之间的大小关系,从根结点所拥有的子结点中选取待访问的结点。s12,访问选取出的结点。s13,若当前访问的结点是中间结点,则根据辅助索引值和当前访问的结点中存储的指示数据之间的大小关系,从当前访问的结点所拥有的子结点中选取待访问的结点,并跳转至步骤s12。s14,若当前访问的结点是叶子结点,则确定找到存储该辅助索引值的叶子结点,并结束流程。示例性地,参见图3e所示:设待查询的辅助索引值为name1,且name1=26,则先访问根结点,发现name1小于根结点中存储的指示数据(40),因此从根节点拥有的子结点中选取第1个子结点作为待访问的结点;访问选取出的结点,发现当前访问的结点不是叶子结点,且name1小于当前访问的结点存储的指示数据(35),因此从当前访问的结点拥有的子结点中选取第1个子结点作为待访问的结点。访问选取出的结点,发现当前访问的结点是叶子结点,因此确定找到了存储name1的叶子结点,并结束流程。
应理解的是,由于多路搜索树是依序存储各个辅助索引值的,因此当范围查询时,可从多路搜索树中找到范围查询所涉及的最小辅助索引值对应的叶子结点,以及找到范围查询所涉及的最大辅助索引值对应的叶子结点;然后,可将找到的两个叶子结点,以及位于这两个叶子结点之间的各个叶子结点,均映射到数据集中,以快速查询到范围查询所需的映射数据。
另一种具体实现中,考虑到虽然基于表的数据结构可以在O(1)中执行点查询,但其需要较多时间来实现范围查询,而由于多路搜索树(如B+树)是以逻辑排序顺序依序存储辅助索引值的,因此可以实现高效的范围查询,但其点查询的时间成本为O(nlogn),O(nlogn)表示数据增大n倍时,时间成本增大nlogn倍。基于此,为了同时兼具两者的优点,本申请实施例针对共置二级索引提出了一种混合数据结构,该混合数据结构是哈希表和多路搜索树的变体组合。其中,哈希表和多路搜索树用于存储相同的辅助索引值,且哈希表和多路搜索树共享一个数据集,共享的数据集中包括哈希表和多路搜索树中的各个辅助索引值的映射数据。也就是说,这些数据结构中的键是辅助索引值本身,且使用数据集中的映射数据(如TreeSet)来存储与辅助索引值关联的主键。
在此情况下,若共置二级索引包括P个索引分区,则共置二级索引中的第p个索引分区包括:一个哈希表、一个多路搜索树以及一个数据集。其中,第p个索引分区中的哈希表和多路搜索树,均是将第p个基表分区中的各个属性值作为辅助索引值,采用各个辅助索引值构建的;第p个索引分区中的数据集包括:第p个索引分区中的每个辅助索引值的映射数据;任一辅助索引值的映射数据包括:相应辅助索引值在相应基表分区中对应的主键。应理解的是,第p个索引分区和第p个基表分区需共置在同一个节点中,p∈[1,P];也就是说,每个基表分区均具有自己的辅助索引分区,该辅助索引分区仅引用它服务的基表行。
示例性的,设第p个索引分区中的各个映射数据均为序列化数据(TreeSet),序列化数据是指对至少两个主键进行序列化排列所得到的数据,则第p个索引分区的结构示意图可参见图3f所示。通过图3f可知,这些数据结构中的键是辅助索引值本身,与每个辅助索引值相关联的各个主键均存储在TreeSet中,而对TreeSets的引用也存储在哈希表和Blink-tree中,这样可以通过哈希表查找轻松满足点查询,且可基于哈希表提供更快的访问TreeSet以进行更新和删除;而树索引结构基于Blink-tree,可以提供最高的并发性和以及读取性能,从而实现快速的范围查询。应理解的是,当第p个索引分区中的各个映射数据均为离散化数据时,第p个索引分区的结构与图3f所示的结构类似,仅是数据集中的映射数据的呈现方式不同而已。
由此可见,本申请实施例提出的基于混合数据结构的共置二级索引可以同时支持点查询和范围查询,并且可以实现快速更新。进一步的,本申请实施例提出的共置二级索引可以在内存中构建,以实现该共置二级索引可以在内存中驻留,使得共置二级索引中的各个索引分区和相应基表分区可以位于统一分区(即具有相同的属性值范围)。
还需要说明的是,当数据库是HBase时,虽然HBase可以基于HTable创建包含此索引内容的索引分区,但是HBase不提供任何直接的手段来强制将此基于HTable的索引分区与相应的基表分区设置为统一分区。这是因为默认情况下,HBase认为它们是独立的HTables,只能分别决定其位置。为避免修改HBase源码以实现自定义数据负载平衡器,本申请实施例使用协处理器框架将上述提及的优化索引结构对应的共置二级索引透明地嵌入到HBase系统中,从而实现共置二级索引机制。
⑤区域管理:
由前述可知,共置二级索引中的各个索引分区可在相应节点的内存中驻留。当任一节点中的基表分区被关闭或该任一节点遭受崩溃时,该节点的内存中的数据可能会发生一系列问题,此时的数据库可依赖于一些快速的日志记录机制,将这些数据永久存储在存储设备(即节点中)中,以克服此类问题。但是这可能会引入非常规延迟,从而影响到基于内存的数据库的性能优势。对于内存驻留的相邻索引分区(即与基表分区共置的索引分区)而言,若该索引分区完全丢失,则可通过从头开始扫描基表分区来重建索引,从而实现索引分区的恢复。可理解的是,由于重建索引是一个本地操作,可以通过合理的性能开销完成;且鉴于崩溃并不频繁,其始终只影响一个节点,因此这些恢复成本是合理的,并值得在运行时提高性能。
其中,基表分区是在被执行拆分(分割)操作后被关闭的,而基表分区被关闭可理解成是基表分区不再存在。应理解的是,当存在区域(即基表分区)拆分时,由于索引分区必须与对应基表分区相邻(即必须和对应的基表分区处于同一个节点),因此需要监测区域拆分,以确保内存驻留的索引分区也可及时地进行相应拆分。基于此,本申请实施例可通过协处理器来监测区域拆分,从而实现索引分区的拆分。
为了在运行时提高性能,本申请实施例可支持任一节点在遭受崩溃时,将相应的索引分区保存至磁盘中的HDFS(Hadoop Distributed File System,分布式文件系统),以实现相应索引分区的持久化,从而使得在需重建索引分区时,可以从磁盘中读取该索引分区,避免通过扫描基表分区来重建索引分区,提升处理效率并节省处理资源。
同理,在启动区域拆分使得基表分区被关闭(即被拆分两个新的子区域)后,相应节点也可将原始内存中的索引分区存储至磁盘内的HDFS中,以实现相应索引分区的持久化。在此情况下,当新的两个子区域被不同节点启动后,相应节点可从HDFS中读取该索引分区,并对读取出的索引分区进行拆分,以得到与每个子区域对应的新的索引分区,并将各个新的索引分区加载至相应子区域所处的节点中。在启动区域拆分使得基表分区被关闭后,也可基于原始内存中的索引分区的数据结构创建两个新的索引分区,并将创建的两个新的索引分区作为单独的文件存储到磁盘内的HDFS中,以实现索引分区的持久化。然后相应节点可关闭已拆分的区域(即被拆分的区域将不再存在)。新的两个子区域(即拆分得到的两个基表分区)随后会由不同的节点启动,并且附加到它们的协处理器实例中,以实现从HDFS中加载相应的索引文件(即新的索引分区)到相应节点的主存储器中。
需要说明的是,本申请实施例可以在常规区域关闭期间将索引分区持久化到HDFS中,以便后续可以直接从HDFS中读取相应索引分区以执行相应操作(如拆分操作),而无需扫描基表区域来创建相应的索引分区。以相似的方式,本申请实施例也可在定期区域关闭期间将索引分区持续存储到HDFS中,以便后续可以在不扫描基本分区的情况下恢复相应的索引分区。这样做是因为数据库为实现负载均衡,可能需要分割且移动基表分区。对于这样的数据移动,持续存储和传输索引分区比在新节点(如区域服务器)上从头开始重新创建所以分区更快。其中,常规区域关闭是指:因区域超过一定阈值而对区域进行分割,从而关闭区域;定期区域关闭是指:定时地对区域进行分割,从而关闭区域。
可理解的是:与区域拆分类似,当区域(基表分区)需被重建或转移时,相应节点也可将原始内存中的索引分区存储至磁盘内的HDFS中,以使得在基表分区被重建或转移后,可从HDFS中读取该索引分区,并将读取出的索引分区保存至相应节点,以避免相应节点通过扫描基表分区来得到索引分区,可提升处理效率并节省处理资源。
综上可知,P个节点中的任一节点中的索引分区是存储在相应节点的内存中的。且该任一节点在内置的基表分区的关闭期间、重建期间或转移期间,均可通过将内存中的索引分区保存至磁盘中,实现相应索引分区的持久化(即保持可操作性)。并且,在持久化索引分区后,当相应索引分区需被执行目标操作时,则相应节点从磁盘中读取相应索引分区,并对读取出的索引分区执行目标操作;其中,此处提及的目标操作包括:重建操作、分割操作(即拆分操作)或转移操作。可见,通过将整个索引分区(即共置二级索引)保留在主存储器(即内存中的存储器)中,且保持各个索引分区仅在区域关闭期间持久化,可以提升索引维护的速度,且可利用优化的主存储器数据结构,将工作数据集(即索引分区中的各个数据)保留在主存储器中来避免昂贵的I / O(输入/输出成本)。
S204,基于目标基表的数据分布,从多个二级索引中选取目标二级索引。
由前述可知,多个二级索引包括基于表的二级索引以及共置二级索引,不同的二级索引具有不同的查询方式。其中,在目标基表的数据分布指示目标基表中的数据行分布在节点集群中的P个节点中的情况下:
基于表的二级索引对应的查询方式用于指示:先请求包含待查询的属性值的二级索引表所在的节点根据相应属性值,在内置的二级索引表中查询相应主键并返回相应主键;再请求包含相应主键的基表分区所在的节点,根据相应主键在内置的基表分区中查询业务数据,并返回查询出的业务数据。
共置二级索引对应的查询方式用于指示:请求P个节点中的每个节点根据待查询的属性值在内置的索引分区中查询相应主键,并基于查询出的主键在内置的基表分区查询业务数据,且返回查询出的业务数据。
通过对上述两个二级索引对应的查询方式进行差异化分析可知,上述两个二级索引存在如下表2所示的区别:
表2
基于表2可知,当目标基表对应的基表分区的数量(即P值)较大(例如远大于2),或查询仅从少量节点返回基表记录中的业务数据时,基于表的二级索引是有益的,这是因为虽然基于表的二级索引的网络请求次数大于共置二级索引的网络请求次数,但是基于表的二级索引仅需这些少量的节点行数据查询操作,而共置二级索引则需所有节点均执行数据查询操作和索引查询操作(即主键查询操作),这样容易导致所有节点执行相关操作所消耗的处理资源远大于少量节点执行相关操作所消耗的处理资源,从而无法抵消掉因网络请求次数少所带来的成本优势。可见此情况下,客户端在执行步骤S204时,可以选取基于表的二级索引作为目标二级索引。相反,当目标基表对应的基表分区的数量较小(例如小于或等于2),或查询需从大量节点返回基表记录中的业务数据时,共置二级索引是有益的。可见此情况下,客户端在执行步骤S204时,可以选取共置二级索引作为目标二级索引。
S205,根据目标二级索引以及相应的查询方式,从目标基表中查询数据查询需求所指示的各个属性值对应的业务数据。
本申请实施例可为数据库中的目标基表配置多个二级索引,使得在确定与数据库中的目标基表相关的数据查询需求后,可根据目标基表的数据分布从多个二级索引中选取目标二级索引,从而根据目标二级索引以及相应的查询方式,从目标基表中查询数据查询需求所指示的各个属性值对应的业务数据。由于目标二级索引指示了目标基表中的属性值到主键的映射关系,因此基于目标二级索引查询业务数据时,可实现先通过目标二级索引确定出数据查询需求所指示的各个属性值对应的主键,从而基于确定出的主键在目标基表中快速定位出相应的数据行,进而快速从定位出的数据行中读取出业务数据。通过此方式,可避免对目标基表进行全表扫描,不仅可有效节省处理资源,还可缩短数据查询的时长,提升数据查询的效率。进一步的,通过为目标基表配置多个二级索引,可使得在数据查询时,不局限于单一的二级索引,提升二级索引的选择性和数据查询的灵活性。并且,考虑到目标基表可能存在更新,不同的数据分布适用不同的二级索引,所以通过基于数据分布的不同自动路由(选择)二级索引的方式,可使得路由出的二级索引与当前的目标基表更适配,这样可有利于主键的查找,从而提升数据查询的效率和有效性。
基于上述图2所示的方法实施例的相关描述,本申请实施例进一步提出了图4所示的数据查询方法。在本申请实施例中,仍以客户端执行该数据查询方法为例进行说明。请参见图4,该数据查询方法可包括以下步骤S401-S407:
S401,确定与数据库中的目标基表相关的数据查询需求,并响应于数据查询需求,获取目标基表的数据分布。
在本申请实施例中,步骤S401的具体实现可参见前述步骤S201-S202的相关描述,在此不作赘述。另外,本申请实施例中,目标基表可包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据。与目标基表相关的数据查询需求用于指示:待查询的至少一个属性值。目标基表的数据分布指示:目标基表中的数据行分布在节点集群中的P个节点中,以及P个节点中的每个节点所负责的属性值范围。其中,任一节点中所存储的数据行和对应的主键构成一个基表分区。
经研究表明,在某些情况下查询可以直接使用二级索引返回结果而无需访问基表。并且,通常如果只有很少的基表记录(即数据行))符合搜索条件,则二级索引的结构是有效的,这是因为通过二级索引可以非常快速地找到这些基表记录对应的主键,从而可以基于主键在基表中逐个检索。当有许多条基表记录符合条件时,扫描整个基表可能会更快,这是因为扫描允许批量读取数据(例如所有在给定块上的数据),而使用二级索引不仅需要先访问节点来获取属性值对应的主键,以实现基于主键在基表中进行查询,而且符合条件的数据的单独检索可能导致在基表的块(即基表分区)之间进行许多随机访问。基于此,本申请实施例可通过后续步骤S402,来决定选择使用二级索引进行查询还是使用目标基表进行查询。
S402,确定策略选择参数,并基于策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略。
其中,策略选择参数包括以下至少一项:目标基表的数据分布以及数据查询需求;多个数据查询策略至少包括:基于目标基表进行查询的数据查询策略,以及基于二级索引进行查询的数据查询策略。
在一种具体实现中,若策略选择参数包括:目标基表的数据分布以及数据查询需求,则由于数据分布指示了目标基表中的数据行分布在节点集群中的P个节点中,以及每个节点所负责的属性值范围,而任一属性值对应的业务数据均需从P个节点中的至少一个节点处获取;因此客户端在基于策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略时,可以先根据目标基表的数据分布所指示的每个节点负责的属性值范围,以及数据查询需求指示的各个属性值,确定节点集群中需返回业务数据的节点的数量。
若确定出的数量大于目标数量,则表明此情况下需返回的业务数据跨越大多数的基表分区(即匹配的基表记录中的业务数据位于大多数的基表分区内),这样会使得即使基于二级索引查询业务数据,但仍需要扫描目标基表中的大部分数据行,从而使得与对目标基表进行全表扫描相比,扫描目标基表中的大部分数据所带来的优势可能无法抵消与多个节点进行通信所需的处理资源,进而使得相较于基于表扫描进行查询的方式而言,基于二级索引进行查询的方式在数据信息交换方面几乎没有优势,甚至消耗的处理资源大于基于表扫描所需的处理资源。基于此,若确定出的数量大于目标数量,则客户端可从预设的多个数据查询策略中选取基于目标基表进行查询的数据查询策略;相反,若确定出的数量小于或等于目标数量,则确定数据查询策略为基于二级索引进行查询的数据查询策略。
另一种具体实现中,若策略选择参数仅包括数据查询需求,则客户端在基于策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略时,可以确定数据查询需求所指示的属性值,在目标基表中的数量占比。若该数量占比大于占比阈值,则表明此情况下,即使基于二级索引查询业务数据,但仍需要扫描目标基表中的大部分数据行,这样同样会使得基于二级索引进行查询的方式在数据信息交换方面几乎没有优势,甚至消耗的处理资源大于基于表扫描所需的处理资源。因此,若数量占比大于占比阈值,则从预设的多个数据查询策略中选取基于目标基表进行查询的数据查询策略;若数量占比小于或等于占比阈值,则确定数据查询策略为基于二级索引进行查询的数据查询策略。
S403,若选取的数据查询策略为基于二级索引进行查询的数据查询策略,则确定为目标基表配置的多个二级索引,并基于目标基表的数据分布,从多个二级索引中选取目标二级索引。
由前述可知,不同的二级索引对应不同的查询方式。基于此,客户端在基于目标基表的数据分布,从多个二级索引中选取目标二级索引时,可以在目标基表的数据分布下,确定用于影响多个二级索引之间的能耗大小关系的目标参数;该目标参数是在目标基表的数据分布下,通过对各个二级索引对应的查询方式进行差异化分析得到的。以多个二级索引包括基于表的二级索引和共置二级索引为例,那么基于前述步骤S204的相关描述可知,该目标参数的取值可与目标基表对应的基表分区的数量相关,也可与节点集群中需返回业务数据的节点的数量相关。然后,可根据目标参数的取值,确定多个二级索引之间的能耗大小关系;并基于确定的能耗大小关系,从多个二级索引中选取目标二级索引;其中,目标二级索引的能耗小于其他二级索引的能耗。
在一种具体实现中,目标参数可包括第一参数,该第一参数的取值为目标基表对应的基表分区的数量,且基表分区的数量为P。在此情况下,客户端在根据目标参数的取值,确定多个二级索引之间的能耗大小关系时,可以将第一参数的取值和预设阈值进行比较。若第一参数的取值小于预设阈值,则确定共置二级索引和基于表的二级索引之间的能耗大小关系为第一关系;该第一关系指示:共置二级索引的能耗小于基于表的二级索引的能耗。若第一参数的取值大于或等于预设阈值,则确定共置二级索引和基于表的二级索引之间的能耗大小关系为第二关系;第二关系指示:共置二级索引的能耗大于基于表的二级索引的能耗。
另一种具体实现中,数据分布信息还指示P个节点中的每个节点所负责的属性值范围,目标参数包括第二参数,该第二参数的取值是节点集群中需返回业务数据的节点的数量,且节点的数量根据每个节点负责的属性值范围和数据查询需求指示的各个属性值确定。在此情况下,客户端在根据目标参数的取值,确定多个二级索引之间的能耗大小关系时,可以将第二参数的取值和数量阈值进行比较。若第二参数的取值大于数量阈值,则确定共置二级索引和基于表的二级索引之间的能耗大小关系为第一关系(即用于指示共置二级索引的能耗小于基于表的二级索引的能耗的关系)。若第二参数的取值小于或等于数量阈值,则确定共置二级索引和基于表的二级索引之间的能耗大小关系为第二关系(即用于指示共置二级索引的能耗大于基于表的二级索引的能耗的关系)。
另一种具体实现中,目标参数包括第一参数和第二参数。在此情况下,客户端在根据目标参数的取值,确定多个二级索引之间的能耗大小关系时,可以将第一参数的取值和预设阈值进行比较,以及将第二参数的取值和数量阈值进行比较。若第一参数的取值大于预设阈值,且第二参数的取值大于数量阈值,则可确定共置二级索引和基于表的二级索引之间的能耗大小关系为第一关系(即用于指示共置二级索引的能耗小于基于表的二级索引的能耗的关系)。若第一参数的取值大于预设阈值,且第二参数的取值小于或等于数量阈值,则可确定共置二级索引和基于表的二级索引之间的能耗大小关系为第二关系(即用于指示共置二级索引的能耗大于基于表的二级索引的能耗的关系)。若第一参数的取值小于预设阈值,则无论第二参数的取值小于、大于或等于数量阈值,均可确定共置二级索引和基于表的二级索引之间的能耗大小关系为第一关系(即用于指示共置二级索引的能耗小于基于表的二级索引的能耗的关系)。
S404,根据目标二级索引以及相应的查询方式,从目标基表中查询数据查询需求所指示的各个属性值对应的业务数据。
在一种具体实现中,目标二级索引为基于表的二级索引。
若基于表的二级索引中的数据集中存储在一个节点(后续称为主节点)中,则步骤S404的具体实施方式可以包括如下步骤:根据数据查询需求指示的各个属性值,向该主节点发送查询请求,使得该主节点在基于表的二级索引中查询并返回数据查询需求所指示的各个属性值对应的主键。然后,可根据主节点返回的各个主键,以及目标基表的数据分布所指示的P个节点中的各个节点所负责的基表分区对应的主键范围,请求P个节点中的至少一个节点根据相应主键和内置的基表分区返回相应属性值对应的业务数据。其中,P个节点中被请求的节点满足如下条件:内置的基表分区包括主节点返回的至少一个主键。最后,可接收P个节点中的至少一个节点返回的各个属性值对应的业务数据。需说明的是:此情况下,P可以等于1或大于1,当P等于1时,可理解成是目标基于集中存储在一个节点中,当P大于1时,可理解成是目标基表分布式存储在多个节点中。
若基于表的二级索引被拆分成Q个二级索引表,且Q个二级索引表分布在节点集群中的Q个节点中,每个二级索引表均包括多个行键(即目标基表中的属性值)以及每个行键的索引数据(包括相应行键在目标基表中对应的主键),则步骤S404的具体实施方式可以包括如下步骤:可根据数据查询需求指示的各个属性值,以及Q个节点中的每个节点所负责的二级索引表对应的属性值范围(即行键范围),请求Q个节点中的至少一个节点基于内置的二级索引表返回相应属性值对应的主键。其中,Q个节点中被请求的节点满足如下条件:内置的二级索引表包括数据查询需求所指示的至少一个属性值。然后,可基于Q个节点中的至少一个节点返回的主键,以及目标基表的数据分布所指示的P个节点中的各个节点所负责的基表分区对应的主键范围,请求P个节点中的至少一个节点根据相应主键和内置的基表分区返回相应属性值对应的业务数据。其中,P个节点中被请求的节点满足如下条件:内置的基表分区包括Q个节点中的至少一个节点返回的主键。最后,可接收P个节点中的至少一个节点返回的各个属性值对应的业务数据。
举例说明,参见图5a所示:若数据查询需求指示了name1这个属性值,而根据Q个节点中的每个节点所负责的二级索引表对应的属性值范围(即行键范围)确定Q个节点中的节点a内置的二级索引表中存在一个行键为name1,即节点a内置的二级索引表包括name1这个属性值,因此客户端可请求Q个节点中的节点a在内置的二级索引表中查询name1对应的主键,并将查询到的主键(如“4”这个主键)返回给客户端。相应的,客户端在接收到“4”这个主键后,根据目标基表的数据分布确定P个节点中的节点b内置的基表分区对应的主键范围包括“4”“5”和“6”这三个主键,那么根据此主键范围可知节点b内置的基表分区包括了Q个节点中的至少一个节点返回的“4”这个主键,因此客户端可请求P个节点中的节点b在内置的基表分区中查询“4”这个主键所索引的数据行,将查询出的数据行中的业务数据(即name1对应的业务数据)返回给客户端。
或者,考虑到可能基于表的二级索引可能未包括目标基表中的全部属性值,即目标基表中存在部分属性值未在基于表的二级索引中建立索引(即存在部分属性值未出现在基于表的二级索引中),且数据查询需求所指示的属性值中恰好包括未建立索引的属性值,那么为了保证后续查询到的业务数据的完整性,本申请实施例除了可将数据查询需求指示的且已建立索引的属性值发送给Q个节点中的至少一个节点进行查询处理以外,还可进行额外处理,将数据查询需求指示的且未建立索引的属性值下沉至节点集群中的目标节点进行查询处理,目标节点是指存储目标基表的全部数据的节点。
基于此,步骤S404的具体实施方式可以包括如下步骤:首先,根据Q个节点中的每个节点内存储的二级索引表对应的属性值范围,在数据查询需求所指示的各个属性值中筛选有效的属性值;其中,有效的属性值是指:落入Q个节点中的至少一个节点对应的属性值范围中的属性值。其次,可基于筛选出的各个属性值,请求Q个节点中的至少一个第一节点基于内置的二级索引表返回相应属性值对应的主键;其中,第一节点满足如下条件:内置的二级索引表包括筛选出的至少一个属性值。然后,可基于各个第一节点返回的主键,请求P个节点中的至少一个第二节点根据相应主键和内置的基表分区返回相应属性值对应的业务数据;其中,第二节点满足如下条件:内置的基表分区包括至少一个第一节点返回的主键。最后,可接收各个第二节点返回的各个属性值对应的业务数据。进一步的,若筛选出的属性值的数量小于数据查询需求所指示的属性值的数量,则客户端还可将数据查询需求所指示的全部属性值中,未被筛选出的各个属性值均作为异常属性值;并将各个异常属性值下沉(即发送)至目标节点,使目标节点在目标基表中扫描出各个异常属性值对应的业务数据。然后,客户端可接收目标节点返回的各个异常属性值对应的业务数据。
举例说明,参见图5b所示:设Q个节点和P个节点均包括节点a和节点b两个节点。若数据查询需求指示了name1和name7这两个属性值,而根据Q个节点中的每个节点所负责的二级索引表对应的属性值范围,确定节点a内置的二级索引表包括name1这个属性值,且节点a和节点b中内置的二级索引表均不包括name7这个属性值,因此name1为有效的属性值,而name7为异常属性值。基于此,客户端可请求Q个节点中的节点a在内置的二级索引表中查询name1对应的主键,并将查询到的主键(如“4”这个主键)返回给客户端;相应的,客户端在接收到“4”这个主键后,根据目标基表的数据分布确定节点b内置的基表分区包括了节点a返回的“4”这个主键,因此客户端可请求节点b在内置的基表分区中查询“4”这个主键所索引的数据行,将查询出的数据行中的业务数据(即name1对应的业务数据)返回给客户端。另外,客户端还可将name7发送给目标节点,使目标节点在目标基表中扫描出name7对应的业务数据,并将扫描出的业务数据返回给客户端。
由此可见,本申请实施例设计了一种新的查询方式,该查询方式具有与默认查询相同的输入参数(即用于确定目标基表的表名称,以及用于通过指示一个或多个属性值来选择特定行的过滤器谓词)。该查询方式可通过客户端控制查询执行,例如:如果过滤器谓词是一个点查询(如name='name1'),则客户端库首先发送一个查找请求到包含二级索引值(即待查询的属性值)的索引分区所在的节点,以查找具有所请求的二级索引值(即待查询的属性值)作为行键的二级数据。相应的,该节点返回与此二级索引值关联的基表行键的序列化TreeSet(索引数据)。客户端库然后使用返回的序列化TreeSet对目标基表中的所有匹配行执行批量查找;具体的,如果目标基表的基表分区很多,则会向包含至少一个匹配行的每个基表分区所处的节点发送批量查找。然后,客户端库收集所有查找结果并将它们返回给应用程序。
并且,支持范围查询的实现方式类似。在这种情况下,过滤器包含要限制的二级属性值的起始(即待查询的最小属性值)和结束范围(即待查询的最大属性值)。客户端库可将其转换为二级索引上搜索范围内的行键范围上的范围查询,该查询可能会发送到基于表的二级索引中的一个或多个索引分区所处的节点。每个索引分区所处的节点将返回符合条件的序列化TreeSet(索引数据)。确定所有匹配的基表记录的主键后,该过程与点查询相同,其中批量查找被发送到目标基表的所有相关的基表分区,并在查找结果汇集后返回给应用程序。进一步的,如果查询包含对具有未建立索引的属性的索引属性和谓词,则可进行额外处理;具体可以是先确定与建立索引的属性值匹配的行键,然后通过修改的批量查找方式将未建立索引的异常属性值过滤下沉到目标节点(如HBase服务器)中。
另一种具体实现中,目标二级索引为共置二级索引。
若目标基表中的全部数据和共置二级索引中的全部数据均集中存储在一个节点中,则步骤S404的具体实施方式可以包括如下步骤:根据数据查询需求指示的各个属性值,向该节点发送查询请求,使得该节点先在共置二级索引中查询数据查询需求所指示的各个属性值对应的主键,再根据查询到的各个主键在目标基表中查询并返回相应的业务数据。然后,客户端可接收此节点返回的业务数据。需说明的是:此情况下,共置二级索引可以是基于表格的结构,也可以是基于多路搜索树的树形结构,还可以是基于哈希表和多路搜索树所组成的混合数据结构,对此不作限定。且当是混合数据结构时,节点可随机采用多路搜索树或哈希表来查询各个属性值对应的主键;或者,考虑到树结构的索引(即多路搜索树)更适用于范围查询(搜索属性值范围),而哈希表适用于点查询(其中属性值作为键,指针列表(即属性值对应的主键)作为值),因此节点也可根据数据查询需求指示的属性值的数量来选取多路搜索树或者哈希表来执行主键的查询操作。具体可以是当数量为1个时,选取哈希表,当数量大于1时,选取多路搜索树。
若目标基表中的全部数据和共置二级索引中的全部数据均分布式存储在P个节点中,且P个节点中的每个节点内置的索引分区均是哈希表和多路搜索树的混合数据结构,则步骤S404的具体实施方式可以包括如下步骤:
若数据查询需求指示了一个属性值,则客户端可根据数据查询需求指示的属性值生成点查询请求;并将点查询请求广播给P个节点,使P个节点中的每个节点根据点查询请求和内置的索引分区中的哈希表,查询相应属性值对应的主键,基于查询出的主键和内置的基表分区返回相应属性值对应的业务数据。然后,客户端可接收P个节点中的至少一个节点返回的业务数据。例如参见图5c所示:设P个节点包括节点a和节点b。若数据查询需求指示了name1这一个属性值,则客户端可生成携带name1的点查询请求,并将该点查询请求分别发送给节点a和节点b,使这两个节点分别在内置的索引分区中的哈希表中查找name4对应的主键。其中,只有节点a查找到了name1对应的主键(如“4”这个主键),因此节点a可继续在内置的基表分区中查询“4”所索引的数据行,将查找到的数据行的业务数据作为name1对应的业务数据,返回给客户端。
若数据查询需求指示了多个属性值,则客户端可根据数据查询需求指示的属性值生成范围查询请求;并将范围查询请求广播给P个节点,使P个节点中的每个节点根据范围查询请求和内置的索引分区中的多路搜索树,查询相应属性值对应的主键,基于查询出的主键和内置的基表分区返回相应属性值对应的业务数据。然后,客户端可接收P个节点中的至少一个节点返回的业务数据。其中,考虑到多路搜索树中的各个叶子结点是按照属性值从大到小或从小到大的顺序来依次存储属性值的,因此为提升查询效率且节省处理资源,范围查询请求可携带数据查询需求指示的全部属性值中的最大属性值和最小属性值。在此情况下,任一节点可分别根据数据查询需求指示的最大属性值和最小属性值在内置的多路搜索树中确定出第一叶子结点和第二叶子结点。接着,可根据叶子结点和数据集中的映射数据之间的映射关系,在数据集中确定第一叶子结点和第二叶子结点中的属性值对应的映射数据(即主键),以及查询位于第一叶子结点和第二叶子结点之间的各个叶子结点中的属性值对应的映射数据(即主键)。然后,在内置的基表分区中查询各个主键对应的数据行中的业务数据,作为相应属性值对应的业务数据。
需说明的是,若任一节点负责的全部属性值中包括数据查询需求指示的最大属性值,则第一叶子结点中存储的辅助索引值为数据查询需求指示的最大属性值,即第一叶子结点是数据查询需求指示的最大属性值所处的叶子结点;若任一节点负责的全部属性值中不包括数据查询需求指示的最大属性值,则第一叶子结点中存储的辅助索引值为任一节点负责的全部属性值中小于且最接近该最大属性值的属性值。例如,设数据查询需求指示了3个属性值,且按照从小到大的顺序,这3个属性值依次包括name1、name4和name7;若节点a负责的全部属性值包括name1、name7和name9,则此情况下的第一叶子结点为name7所处的叶子结点;若节点a负责的全部属性值包括name1、name6和name9,则由于name6是节点a负责的全部属性值中,小于name7且最接近name7的属性值,因此该情况下的第一叶子结点为name6所处的叶子结点。同理,若任一节点负责的全部属性值中包括数据查询需求指示的最小属性值,则第二叶子结点中存储的辅助索引值为最小属性值,即第二叶子结点是数据查询需求指示的最小属性值所处的叶子结点;若任一节点负责的全部属性值中不包括数据查询需求指示的最小属性值,则第二叶子结点中存储的辅助索引值为任一节点负责的全部属性值中大于且最接近该最小属性值的属性值。
可选的,范围查询请求也可携带数据查询需求指示的各个属性值。在此情况下,客户端在将范围查询请求发送给P个节点中的任一节点后,该任一节点可在内置的索引分区中的多路搜索树中,分别查找存储了数据查询需求指示的各个属性值的叶子结点,并根据叶子结点和数据集中的映射数据之间的映射关系,将查找到的叶子结点映射到数据集中,得到相应的映射数据(即主键),然后根据得到的主键在内置的基表分区中查询相应属性值对应的业务数据。又或者,在范围查询请求携带数据查询需求指示的各个属性值的情况下,P个节点中的任一节点也可在内置的索引分区中的哈希表,来查询数据查询需求指示的各个属性值,并从内置的索引分区中的数据集中确定查询到的属性值对应的映射数据,然后在内置的基表分区中查询确定出的映射数据中的各个主键对应的数据行中的业务数据,作为相应数据值对应的业务数据。
由此可见,本申请实施例可以同时支持相邻索引(存储在相应基表数据所在的节点上的索引,即共置二级索引)的查询,使用相邻索引的客户端API(ApplicationProgramming Interface,应用程序接口)与基于表的索引的API类似。但是内部执行流程更类似于HBase表扫描而不是基于表的索引。当客户端API接收到希望使用相邻索引的查询时,它将包含查询中的过滤条件的特殊请求发送到目标基表的所有基表分区所在的节点。这些特殊请求并行发送以便所有基表分区所在的节点可以并发执行相应的查询操作。在节点端(如服务器端),特殊请求被定向到协处理器方法,该协处理器方法执行与基表分区相关联的辅助索引结构的哈希表部分或B-Link树部分的查找,以检索相应的主键。这些主键用于从相应的基表分区中本地获取数据行中的业务数据。包含跨索引的属性值和没有索引的属性值的复杂过滤器的查询可以轻松处理相邻索引,该相邻索引用于确定满足索引属性的搜索条件的数据行的主键,然后访问基表分区以检索这些数据行并仅返回满足其他属性上的剩余条件的数据行。
应理解的是,上述是以索引分区是基于哈希表和多路搜索树的混合数据结构为例进行说明的;在其他实施例中,索引分区也可以是基于表格的结构,或基于多路搜索树的树形结构,此情况下的业务数据查询方式与上述提及的查询方式类似,在此不再赘述。
S405,若选取的数据查询策略为基于目标基表进行查询的数据查询策略,则确定目标节点,并根据数据查询需求生成数据查询需求,生成的数据查询需求携带数据查询需求所指示的各个属性值。
S406,将生成的数据查询需求发送给目标节点,使目标节点在目标基表中扫描出相应属性值对应的业务数据,并返回扫描出的业务数据。
S407,接收目标节点返回的相应业务数据。
本申请实施例可为数据库中的目标基表配置多个二级索引,使得在确定与数据库中的目标基表相关的数据查询需求后,可根据目标基表的数据分布从多个二级索引中选取目标二级索引,从而根据目标二级索引以及相应的查询方式,从目标基表中快速查询数据查询需求所指示的各个属性值对应的业务数据。通过此方式,可避免对目标基表进行全表扫描,不仅可有效节省处理资源,还可缩短数据查询的时长,提升数据查询的效率。进一步的,通过为目标基表配置多个二级索引,可使得在数据查询时,不局限于单一的二级索引,提升二级索引的选择性和数据查询的灵活性。并且,通过设计一种同时支持基于表的二级索引和共置二级索引的混合索引机制,使得数据库可以同时利用两者的优点,通过增强版的客户端接口,同时支持点查询和复杂的范围查询。进一步的,本申请实施例还可根据不同的数据分布实现索引的自动路由机制,使得路由出的二级索引与当前的目标基表更适配,这样可有利于主键的查找,从而提升数据查询的效率和有效性。还可理解的是,当本申请实施例提及的数据库为HBase时,还可实现通过基于HBase等Key-Vlaue数据库的二级共置索引机制,来提升HBase等NoSql数据库的关系查询性能。
基于上述数据查询方法实施例的描述,本申请实施例还公开了一种数据查询装置;所述数据查询装置可以是运行于计算机设备中的一个计算机程序(包括一条或多条指令),且该数据查询装置可以执行图2或图4所示的方法流程中的各个步骤。请参见图6,所述数据查询装置可以运行如下单元:
处理单元601,用于确定与数据库中的目标基表相关的数据查询需求,所述目标基表包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据;其中,所述数据查询需求用于指示待查询的至少一个属性值;
所述处理单元601,还用于响应于所述数据查询需求,获取所述目标基表的数据分布,所述数据分布用于指示所述目标基表中的数据行的分布情况;
所述处理单元601,还用于确定为所述目标基表配置的多个二级索引,各个二级索引均用于指示所述目标基表中的属性值到主键的映射关系,不同二级索引对应不同查询方式;
查询单元602,用于基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引;根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据。
在一种实施方式中,查询单元602在用于基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引时,可具体用于:
在所述目标基表的数据分布下,确定用于影响所述多个二级索引之间的能耗大小关系的目标参数,所述目标参数是在所述目标基表的数据分布下,通过对各个二级索引对应的查询方式进行差异化分析得到的;
根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系;二级索引的能耗是指:使用二级索引和相应查询方式查询业务数据所需的处理资源;
基于确定的能耗大小关系,从所述多个二级索引中选取目标二级索引;其中,所述目标二级索引的能耗小于其他二级索引的能耗。
另一种实施方式中,所述目标参数包括第一参数,所述第一参数的取值为所述目标基表对应的基表分区的数量,且所述基表分区的数量为P;
相应的,查询单元602在用于根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系时,可具体用于:
若所述第一参数的取值小于预设阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第一关系;所述第一关系指示:所述共置二级索引的能耗小于所述基于表的二级索引的能耗;
若所述第一参数的取值大于或等于预设阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第二关系;所述第二关系指示:所述共置二级索引的能耗大于所述基于表的二级索引的能耗。
另一种实施方式中,所述数据分布信息还指示所述P个节点中的每个节点所负责的属性值范围,所述目标参数包括第二参数,所述第二参数的取值是所述节点集群中需返回业务数据的节点的数量,且所述节点的数量根据所述每个节点负责的属性值范围和所述数据查询需求指示的各个属性值确定;
相应的,查询单元602在用于根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系时,可具体用于:
若所述第二参数的取值大于数量阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第一关系;所述第一关系指示:所述共置二级索引的能耗小于所述基于表的二级索引的能耗;
若所述第二参数的取值小于或等于数量阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第二关系;所述第二关系指示:所述共置二级索引的能耗大于所述基于表的二级索引的能耗。
另一种实施方式中,所述目标二级索引为所述基于表的二级索引;相应的,查询单元602在用于根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据时,可具体用于:
根据所述Q个节点中的每个节点内存储的二级索引表对应的属性值范围,在所述数据查询需求所指示的各个属性值中筛选有效的属性值,有效的属性值是指:落入所述Q个节点中的至少一个节点对应的属性值范围中的属性值;
基于筛选出的各个属性值,请求所述Q个节点中的至少一个第一节点基于内置的二级索引表返回相应属性值对应的主键;所述第一节点满足如下条件:内置的二级索引表包括筛选出的至少一个属性值;
基于所述各个第一节点返回的主键,请求所述P个节点中的至少一个第二节点根据相应主键和内置的基表分区返回相应属性值对应的业务数据;所述第二节点满足如下条件:内置的基表分区包括至少一个第一节点返回的主键;
接收各个第二节点返回的各个属性值对应的业务数据。
另一种实施方式中,所述节点集群中包括目标节点,所述目标节点是指存储有所述目标基表的全部数据的节点;若所述筛选出的属性值的数量小于所述数据查询需求所指示的属性值的数量,则查询单元602还可用于:
将所述数据查询需求所指示的全部属性值中,未被筛选出的各个属性值均作为异常属性值;
将各个异常属性值下沉至所述目标节点,使所述目标节点在所述目标基表中扫描出所述各个异常属性值对应的业务数据;
接收所述目标节点返回的所述各个异常属性值对应的业务数据。
另一种实施方式中,所述目标二级索引为所述共置二级索引,所述共置二级索引中的第p个索引分区包括:一个哈希表、一个多路搜索树以及一个数据集;其中,第p个索引分区和第p个基表分区共置在同一个节点中,p∈[1,P];
所述第p个索引分区中的哈希表和多路搜索树,均是将所述第p个基表分区中的各个属性值作为辅助索引值,采用各个辅助索引值构建的;其中,多路搜索树是通过叶子结点存储辅助索引值的,不同叶子结点存储不同辅助索引值;
所述第p个索引分区中的数据集包括:所述第p个索引分区中的每个辅助索引值的映射数据;任一辅助索引值的映射数据包括:相应辅助索引值在相应基表分区中对应的主键;所述第p个索引分区中的各个映射数据均为序列化数据,序列化数据是指对至少两个主键进行序列化排列所得到的数据。
相应的,查询单元602在用于根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据时,可具体用于:
若所述数据查询需求指示了一个属性值,则根据所述数据查询需求指示的属性值生成点查询请求;
将所述点查询请求广播给所述P个节点,使所述P个节点中的每个节点根据所述点查询请求和内置的索引分区中的哈希表,查询相应属性值对应的主键,基于查询出的主键和内置的基表分区返回相应属性值对应的业务数据;
接收所述P个节点中的至少一个节点返回的业务数据。
另一种实施方式中,查询单元602在用于根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据时,还可用于:
若所述数据查询需求指示了多个属性值,则根据所述数据查询需求指示的属性值生成范围查询请求;
将所述范围查询请求广播给所述P个节点,使所述P个节点中的每个节点根据所述范围查询请求和内置的索引分区中的多路搜索树,查询相应属性值对应的主键,基于查询出的主键和内置的基表分区返回相应属性值对应的业务数据;
接收所述P个节点中的至少一个节点返回的业务数据。
另一种实施方式中,处理单元601在获取到所述目标基表的数据分布之后,还可用于:
确定策略选择参数,所述策略选择参数包括以下至少一项:所述目标基表的数据分布以及所述数据查询需求;
基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略;所述多个数据查询策略至少包括:基于所述目标基表进行查询的数据查询策略,以及基于二级索引进行查询的数据查询策略;
若选取的数据查询策略为基于二级索引进行查询的数据查询策略,则触发执行所述确定为所述目标基表配置的多个二级索引的步骤。
另一种实施方式中,查询单元602还可用于:
若选取的数据查询策略为基于所述目标基表进行查询的数据查询策略,则确定目标节点,所述目标节点内存储有所述目标基表的全部数据;
根据所述数据查询需求生成数据查询需求,生成的数据查询需求携带所述数据查询需求所指示的各个属性值;
将生成的数据查询需求发送给所述目标节点,使所述目标节点在所述目标基表中扫描出相应属性值对应的业务数据,并返回扫描出的业务数据;
接收所述目标节点返回的相应业务数据。
另一种实施方式中,所述策略选择参数包括:所述目标基表的数据分布以及所述数据查询需求;所述数据分布指示:所述目标基表中的数据行分布在节点集群中的P个节点中,以及所述P个节点中的每个节点所负责的属性值范围;任一属性值对应的业务数据均需从所述P个节点中的至少一个节点处获取;
相应的,处理单元601在用于基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略时,可具体用于:
根据所述目标基表的数据分布所指示的每个节点负责的属性值范围,以及所述数据查询需求指示的各个属性值,确定所述节点集群中需返回业务数据的节点的数量;
若确定出的数量大于目标数量,则从预设的多个数据查询策略中选取基于所述目标基表进行查询的数据查询策略;
若确定出的数量小于或等于目标数量,则确定所述数据查询策略为基于二级索引进行查询的数据查询策略。
另一种实施方式中,所述策略选择参数包括:所述数据查询需求;相应的,处理单元601在用于基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略时,可具体用于:
确定所述数据查询需求所指示的属性值,在所述目标基表中的数量占比;
若所述数量占比大于占比阈值,则从预设的多个数据查询策略中选取基于所述目标基表进行查询的数据查询策略;
若所述数量占比小于或等于占比阈值,则确定所述数据查询策略为基于二级索引进行查询的数据查询策略。
根据本申请的另一个实施例,图6所示的数据查询装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本申请的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本申请的其它实施例中,基于数据查询装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
根据本申请的另一个实施例,可以通过在包括中央处理单元(CPU)、随机存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行如图2或图4中所示的相应方法所涉及的各步骤的计算机程序(包括一条或多条指令),来构造如图6中所示的数据查询装置设备,以及来实现本申请实施例的数据查询方法。所述计算机程序可以记载于例如计算机可读存储介质上,并通过计算机可读存储介质装载于上述计算设备中,并在其中运行。
本申请实施例可为数据库中的目标基表配置多个二级索引,使得在确定与数据库中的目标基表相关的数据查询需求后,可根据目标基表的数据分布从多个二级索引中选取目标二级索引,从而根据目标二级索引以及相应的查询方式,从目标基表中查询数据查询需求所指示的各个属性值对应的业务数据。由于目标二级索引指示了目标基表中的属性值到主键的映射关系,因此基于目标二级索引查询业务数据时,可实现先通过目标二级索引确定出数据查询需求所指示的各个属性值对应的主键,从而基于确定出的主键在目标基表中快速定位出相应的数据行,进而快速从定位出的数据行中读取出业务数据。通过此方式,可避免对目标基表进行全表扫描,不仅可有效节省处理资源,还可缩短数据查询的时长,提升数据查询的效率。进一步的,通过为目标基表配置多个二级索引,可使得在数据查询时,不局限于单一的二级索引,提升二级索引的选择性和数据查询的灵活性。并且,考虑到目标基表可能存在更新,不同的数据分布适用不同的二级索引,所以通过基于数据分布的不同自动路由(选择)二级索引的方式,可使得路由出的二级索引与当前的目标基表更适配,这样可有利于主键的查找,从而提升数据查询的效率和有效性。
基于上述方法实施例以及装置实施例的描述,本申请实施例还提供一种计算机设备。请参见图7,该计算机设备至少包括处理器701、输入接口702、输出接口703以及计算机存储介质704。其中,计算机设备内的处理器701、输入接口702、输出接口703以及计算机存储介质704可通过总线或其他方式连接。计算机存储介质704可以存储在计算机设备的存储器中,所述计算机存储介质704用于存储计算机程序,所述计算机程序包括一条或多条指令,所述处理器701用于执行所述计算机存储介质704存储的计算机程序中的一条或多条指令。处理器701(或称CPU(Central Processing Unit,中央处理器))是计算机设备的计算核心以及控制核心,其适于实现一条或多条指令,具体适于加载并执行一条或多条指令从而实现相应方法流程或相应功能。
在一个实施例中,本申请实施例所述的处理器701可以用于进行一系列的数据查询处理,具体包括:确定与数据库中的目标基表相关的数据查询需求,所述目标基表包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据;其中,所述数据查询需求用于指示待查询的至少一个属性值;响应于所述数据查询需求,获取所述目标基表的数据分布,所述数据分布用于指示所述目标基表中的数据行的分布情况;确定为所述目标基表配置的多个二级索引,各个二级索引均用于指示所述目标基表中的属性值到主键的映射关系,不同二级索引对应不同查询方式;基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引;根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据,等等。
本申请实施例还提供了一种计算机存储介质(Memory),所述计算机存储介质是计算机设备中的记忆设备,用于存放计算机程序和数据。可以理解的是,此处的计算机存储介质既可以包括计算机设备中的内置存储介质,当然也可以包括计算机设备所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了计算机设备的操作系统。并且,在该存储空间中还存放了计算机程序,该计算机程序包括适于被处理器701加载并执行的一条或多条的指令,这些指令可以是一个或一个以上的程序代码。需要说明的是,此处的计算机存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器;可选的,还可以是至少一个位于远离前述处理器的计算机存储介质。
在一个实施例中,可由处理器加载并执行计算机存储介质中存放的一条或多条指令,以实现上述有关图2或图4所示的方法实施例中的相应步骤;具体实现中,计算机存储介质中的一条或多条指令可由处理器加载并执行如下步骤:
确定与数据库中的目标基表相关的数据查询需求,所述目标基表包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据;其中,所述数据查询需求用于指示待查询的至少一个属性值;
响应于所述数据查询需求,获取所述目标基表的数据分布,所述数据分布用于指示所述目标基表中的数据行的分布情况;
确定为所述目标基表配置的多个二级索引,各个二级索引均用于指示所述目标基表中的属性值到主键的映射关系,不同二级索引对应不同查询方式;
基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引;根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据。
在一种实施方式中,在基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引时,所述一条或多条指令可由处理器加载并具体执行:
在所述目标基表的数据分布下,确定用于影响所述多个二级索引之间的能耗大小关系的目标参数,所述目标参数是在所述目标基表的数据分布下,通过对各个二级索引对应的查询方式进行差异化分析得到的;
根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系;二级索引的能耗是指:使用二级索引和相应查询方式查询业务数据所需的处理资源;
基于确定的能耗大小关系,从所述多个二级索引中选取目标二级索引;其中,所述目标二级索引的能耗小于其他二级索引的能耗。
另一种实施方式中,所述目标参数包括第一参数,所述第一参数的取值为所述目标基表对应的基表分区的数量,且所述基表分区的数量为P;
相应的,在根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系时,所述一条或多条指令可由处理器加载并具体执行:
若所述第一参数的取值小于预设阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第一关系;所述第一关系指示:所述共置二级索引的能耗小于所述基于表的二级索引的能耗;
若所述第一参数的取值大于或等于预设阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第二关系;所述第二关系指示:所述共置二级索引的能耗大于所述基于表的二级索引的能耗。
另一种实施方式中,所述数据分布信息还指示所述P个节点中的每个节点所负责的属性值范围,所述目标参数包括第二参数,所述第二参数的取值是所述节点集群中需返回业务数据的节点的数量,且所述节点的数量根据所述每个节点负责的属性值范围和所述数据查询需求指示的各个属性值确定;
相应的,在根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系时,所述一条或多条指令可由处理器加载并具体执行:
若所述第二参数的取值大于数量阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第一关系;所述第一关系指示:所述共置二级索引的能耗小于所述基于表的二级索引的能耗;
若所述第二参数的取值小于或等于数量阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第二关系;所述第二关系指示:所述共置二级索引的能耗大于所述基于表的二级索引的能耗。
另一种实施方式中,所述目标二级索引为所述基于表的二级索引;相应的,在根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据时,所述一条或多条指令可由处理器加载并具体执行:
根据所述Q个节点中的每个节点内存储的二级索引表对应的属性值范围,在所述数据查询需求所指示的各个属性值中筛选有效的属性值,有效的属性值是指:落入所述Q个节点中的至少一个节点对应的属性值范围中的属性值;
基于筛选出的各个属性值,请求所述Q个节点中的至少一个第一节点基于内置的二级索引表返回相应属性值对应的主键;所述第一节点满足如下条件:内置的二级索引表包括筛选出的至少一个属性值;
基于所述各个第一节点返回的主键,请求所述P个节点中的至少一个第二节点根据相应主键和内置的基表分区返回相应属性值对应的业务数据;所述第二节点满足如下条件:内置的基表分区包括至少一个第一节点返回的主键;
接收各个第二节点返回的各个属性值对应的业务数据。
另一种实施方式中,所述节点集群中包括目标节点,所述目标节点是指存储有所述目标基表的全部数据的节点;若所述筛选出的属性值的数量小于所述数据查询需求所指示的属性值的数量,则所述一条或多条指令可由处理器加载并具体执行:
将所述数据查询需求所指示的全部属性值中,未被筛选出的各个属性值均作为异常属性值;
将各个异常属性值下沉至所述目标节点,使所述目标节点在所述目标基表中扫描出所述各个异常属性值对应的业务数据;
接收所述目标节点返回的所述各个异常属性值对应的业务数据。
另一种实施方式中,所述目标二级索引为所述共置二级索引,所述共置二级索引中的第p个索引分区包括:一个哈希表、一个多路搜索树以及一个数据集;其中,第p个索引分区和第p个基表分区共置在同一个节点中,p∈[1,P];
所述第p个索引分区中的哈希表和多路搜索树,均是将所述第p个基表分区中的各个属性值作为辅助索引值,采用各个辅助索引值构建的;其中,多路搜索树是通过叶子结点存储辅助索引值的,不同叶子结点存储不同辅助索引值;
所述第p个索引分区中的数据集包括:所述第p个索引分区中的每个辅助索引值的映射数据;任一辅助索引值的映射数据包括:相应辅助索引值在相应基表分区中对应的主键;所述第p个索引分区中的各个映射数据均为序列化数据,序列化数据是指对至少两个主键进行序列化排列所得到的数据。
相应的,在根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据时,所述一条或多条指令可由处理器加载并具体执行:
若所述数据查询需求指示了一个属性值,则根据所述数据查询需求指示的属性值生成点查询请求;
将所述点查询请求广播给所述P个节点,使所述P个节点中的每个节点根据所述点查询请求和内置的索引分区中的哈希表,查询相应属性值对应的主键,基于查询出的主键和内置的基表分区返回相应属性值对应的业务数据;
接收所述P个节点中的至少一个节点返回的业务数据。
另一种实施方式中,在根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据时,所述一条或多条指令可由处理器加载并具体执行:
若所述数据查询需求指示了多个属性值,则根据所述数据查询需求指示的属性值生成范围查询请求;
将所述范围查询请求广播给所述P个节点,使所述P个节点中的每个节点根据所述范围查询请求和内置的索引分区中的多路搜索树,查询相应属性值对应的主键,基于查询出的主键和内置的基表分区返回相应属性值对应的业务数据;
接收所述P个节点中的至少一个节点返回的业务数据。
另一种实施方式中,在获取到所述目标基表的数据分布之后,所述一条或多条指令可由处理器加载并具体执行:
确定策略选择参数,所述策略选择参数包括以下至少一项:所述目标基表的数据分布以及所述数据查询需求;
基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略;所述多个数据查询策略至少包括:基于所述目标基表进行查询的数据查询策略,以及基于二级索引进行查询的数据查询策略;
若选取的数据查询策略为基于二级索引进行查询的数据查询策略,则触发执行所述确定为所述目标基表配置的多个二级索引的步骤。
另一种实施方式中,所述一条或多条指令可由处理器加载并具体执行:
若选取的数据查询策略为基于所述目标基表进行查询的数据查询策略,则确定目标节点,所述目标节点内存储有所述目标基表的全部数据;
根据所述数据查询需求生成数据查询需求,生成的数据查询需求携带所述数据查询需求所指示的各个属性值;
将生成的数据查询需求发送给所述目标节点,使所述目标节点在所述目标基表中扫描出相应属性值对应的业务数据,并返回扫描出的业务数据;
接收所述目标节点返回的相应业务数据。
另一种实施方式中,所述策略选择参数包括:所述目标基表的数据分布以及所述数据查询需求;所述数据分布指示:所述目标基表中的数据行分布在节点集群中的P个节点中,以及所述P个节点中的每个节点所负责的属性值范围;任一属性值对应的业务数据均需从所述P个节点中的至少一个节点处获取;
相应的,在基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略时,所述一条或多条指令可由处理器加载并具体执行:
根据所述目标基表的数据分布所指示的每个节点负责的属性值范围,以及所述数据查询需求指示的各个属性值,确定所述节点集群中需返回业务数据的节点的数量;
若确定出的数量大于目标数量,则从预设的多个数据查询策略中选取基于所述目标基表进行查询的数据查询策略;
若确定出的数量小于或等于目标数量,则确定所述数据查询策略为基于二级索引进行查询的数据查询策略。
另一种实施方式中,所述策略选择参数包括:所述数据查询需求;相应的,在基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略时,所述一条或多条指令可由处理器加载并具体执行:
确定所述数据查询需求所指示的属性值,在所述目标基表中的数量占比;
若所述数量占比大于占比阈值,则从预设的多个数据查询策略中选取基于所述目标基表进行查询的数据查询策略;
若所述数量占比小于或等于占比阈值,则确定所述数据查询策略为基于二级索引进行查询的数据查询策略。
本申请实施例可为数据库中的目标基表配置多个二级索引,使得在确定与数据库中的目标基表相关的数据查询需求后,可根据目标基表的数据分布从多个二级索引中选取目标二级索引,从而根据目标二级索引以及相应的查询方式,从目标基表中查询数据查询需求所指示的各个属性值对应的业务数据。由于目标二级索引指示了目标基表中的属性值到主键的映射关系,因此基于目标二级索引查询业务数据时,可实现先通过目标二级索引确定出数据查询需求所指示的各个属性值对应的主键,从而基于确定出的主键在目标基表中快速定位出相应的数据行,进而快速从定位出的数据行中读取出业务数据。通过此方式,可避免对目标基表进行全表扫描,不仅可有效节省处理资源,还可缩短数据查询的时长,提升数据查询的效率。进一步的,通过为目标基表配置多个二级索引,可使得在数据查询时,不局限于单一的二级索引,提升二级索引的选择性和数据查询的灵活性。并且,考虑到目标基表可能存在更新,不同的数据分布适用不同的二级索引,所以通过基于数据分布的不同自动路由(选择)二级索引的方式,可使得路由出的二级索引与当前的目标基表更适配,这样可有利于主键的查找,从而提升数据查询的效率和有效性。
需要说明的是,根据本申请的一个方面,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括一条或多条指令,该一条或多条指令存储在计算机存储介质中。计算机设备的处理器从计算机存储介质读取一条或多条指令,处理器执行该一条或多条指令,使得该计算机设备执行上述图2或图4所示的方法实施例方面的各种可选方式中提供的方法。应理解的是,以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (19)
1.一种数据查询方法,其特征在于,包括:
确定与数据库中的目标基表相关的数据查询需求,所述目标基表包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据;其中,所述数据查询需求用于指示待查询的至少一个属性值;
响应于所述数据查询需求,获取所述目标基表的数据分布,所述数据分布用于指示所述目标基表中的数据行的分布情况;
确定为所述目标基表配置的多个二级索引,各个二级索引均用于指示所述目标基表中的属性值到主键的映射关系,不同二级索引对应不同查询方式;
基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引;其中,是在所述目标基表的数据分布下,根据所述多个二级索引之间的能耗大小关系来选取目标二级索引的;所述目标基表的数据分布指示:所述目标基表中的数据行分布在节点集群中的P个节点中;任一节点中所存储的数据行和对应的主键构成一个基表分区,P为正整数;其中,所述多个二级索引包括:共置二级索引和基于表的二级索引;所述共置二级索引包括P个索引分区,一个索引分区与一个基表分区对应,具有对应关系的索引分区和基表分区共置在同一个节点中,且任一索引分区用于指示相应的基表分区中的属性值到主键的映射关系;所述基于表的二级索引包括多个行键以及每个行键的索引数据,行键为所述目标基表中的属性值,行键的索引数据包括相应行键在所述目标基表中对应的主键;所述基于表的二级索引被拆分成Q个二级索引表,且所述Q个二级索引表分布在所述节点集群中的Q个节点中,Q为正整数;
根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据。
2.如权利要求1所述的方法,其特征在于,所述基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引,包括:
在所述目标基表的数据分布下,确定用于影响所述多个二级索引之间的能耗大小关系的目标参数,所述目标参数是在所述目标基表的数据分布下,通过对各个二级索引对应的查询方式进行差异化分析得到的;
根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系;二级索引的能耗是指:使用二级索引和相应查询方式查询业务数据所需的处理资源;
基于确定的能耗大小关系,从所述多个二级索引中选取目标二级索引;其中,所述目标二级索引的能耗小于其他二级索引的能耗。
3.如权利要求2所述的方法,其特征在于,在所述目标基表的数据分布下:
所述共置二级索引对应的查询方式用于指示:请求所述P个节点中的每个节点根据待查询的属性值在内置的索引分区中查询相应主键,并基于查询出的主键在内置的基表分区查询业务数据,且返回查询出的业务数据;
所述基于表的二级索引对应的查询方式用于指示:先请求包含待查询的属性值的二级索引表所在的节点根据相应属性值,在内置的二级索引表中查询相应主键并返回相应主键;再请求包含相应主键的基表分区所在的节点,根据相应主键在内置的基表分区中查询业务数据,并返回查询出的业务数据。
4.如权利要求2或3所述的方法,其特征在于,所述目标参数包括第一参数,所述第一参数的取值为所述目标基表对应的基表分区的数量,且所述基表分区的数量为P;
所述根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系,包括:
若所述第一参数的取值小于预设阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第一关系;所述第一关系指示:所述共置二级索引的能耗小于所述基于表的二级索引的能耗;
若所述第一参数的取值大于或等于预设阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第二关系;所述第二关系指示:所述共置二级索引的能耗大于所述基于表的二级索引的能耗。
5.如权利要求2或3所述的方法,其特征在于,所述数据分布信息还指示所述P个节点中的每个节点所负责的属性值范围,所述目标参数包括第二参数,所述第二参数的取值是所述节点集群中需返回业务数据的节点的数量,且所述节点的数量根据所述每个节点负责的属性值范围和所述数据查询需求指示的各个属性值确定;
其中,根据所述目标参数的取值,确定所述多个二级索引之间的能耗大小关系,包括:
若所述第二参数的取值大于数量阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第一关系;所述第一关系指示:所述共置二级索引的能耗小于所述基于表的二级索引的能耗;
若所述第二参数的取值小于或等于数量阈值,则确定所述共置二级索引和所述基于表的二级索引之间的能耗大小关系为第二关系;所述第二关系指示:所述共置二级索引的能耗大于所述基于表的二级索引的能耗。
6.如权利要求1所述的方法,其特征在于,针对所述基于表的二级索引中的任一行键,若所述任一行键在所述目标基表中对应的主键的数量为至少两个,则所述基于表的二级索引所包括的所述任一行键的索引数据,是对所述任一行键对应的各个主键进行序列化排列所得到的序列化数据。
7.如权利要求1或6所述的方法,其特征在于,所述目标二级索引为所述基于表的二级索引;所述根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据,包括:
根据所述Q个节点中的每个节点内存储的二级索引表对应的属性值范围,在所述数据查询需求所指示的各个属性值中筛选有效的属性值,有效的属性值是指:落入所述Q个节点中的至少一个节点对应的属性值范围中的属性值;
基于筛选出的各个属性值,请求所述Q个节点中的至少一个第一节点基于内置的二级索引表返回相应属性值对应的主键;所述第一节点满足如下条件:内置的二级索引表包括筛选出的至少一个属性值;
基于各个第一节点返回的主键,请求所述P个节点中的至少一个第二节点根据相应主键和内置的基表分区返回相应属性值对应的业务数据;所述第二节点满足如下条件:内置的基表分区包括至少一个第一节点返回的主键;
接收各个第二节点返回的各个属性值对应的业务数据。
8.如权利要求7所述的方法,其特征在于,所述节点集群中包括目标节点,所述目标节点是指存储有所述目标基表的全部数据的节点;若所述筛选出的属性值的数量小于所述数据查询需求所指示的属性值的数量,则所述方法还包括:
将所述数据查询需求所指示的全部属性值中,未被筛选出的各个属性值均作为异常属性值;
将各个异常属性值下沉至所述目标节点,使所述目标节点在所述目标基表中扫描出所述各个异常属性值对应的业务数据;
接收所述目标节点返回的所述各个异常属性值对应的业务数据。
9.如权利要求1所述的方法,其特征在于,所述共置二级索引中的第p个索引分区包括:一个哈希表、一个多路搜索树以及一个数据集;其中,第p个索引分区和第p个基表分区共置在同一个节点中,p∈[1,P];
所述第p个索引分区中的哈希表和多路搜索树,均是将所述第p个基表分区中的各个属性值作为辅助索引值,采用各个辅助索引值构建的;其中,多路搜索树是通过叶子结点存储辅助索引值的,不同叶子结点存储不同辅助索引值;
所述第p个索引分区中的数据集包括:所述第p个索引分区中的每个辅助索引值的映射数据;任一辅助索引值的映射数据包括:相应辅助索引值在相应基表分区中对应的主键;所述第p个索引分区中的各个映射数据均为序列化数据,序列化数据是指对至少两个主键进行序列化排列所得到的数据。
10.如权利要求9所述的方法,其特征在于,所述目标二级索引为所述共置二级索引;所述根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据,包括:
若所述数据查询需求指示了一个属性值,则根据所述数据查询需求指示的属性值生成点查询请求;
将所述点查询请求广播给所述P个节点,使所述P个节点中的每个节点根据所述点查询请求和内置的索引分区中的哈希表,查询相应属性值对应的主键,基于查询出的主键和内置的基表分区返回相应属性值对应的业务数据;
接收所述P个节点中的至少一个节点返回的业务数据。
11.如权利要求10所述的方法,其特征在于,所述根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据,还包括:
若所述数据查询需求指示了多个属性值,则根据所述数据查询需求指示的属性值生成范围查询请求;
将所述范围查询请求广播给所述P个节点,使所述P个节点中的每个节点根据所述范围查询请求和内置的索引分区中的多路搜索树,查询相应属性值对应的主键,基于查询出的主键和内置的基表分区返回相应属性值对应的业务数据;
接收所述P个节点中的至少一个节点返回的业务数据。
12.如权利要求1所述的方法,其特征在于,所述P个节点中的任一节点中的索引分区是存储在相应节点的内存中的,且所述任一节点在内置的基表分区的关闭期间,通过将内存中的索引分区保存至磁盘中,实现相应索引分区的持久化;
在持久化索引分区后,当相应索引分区需被执行目标操作时,则相应节点从磁盘中读取相应索引分区,并对读取出的索引分区执行所述目标操作;其中,所述目标操作包括:重建操作、分割操作或转移操作。
13.如权利要求1所述的方法,其特征在于,在获取到所述目标基表的数据分布之后,所述方法还包括:
确定策略选择参数,所述策略选择参数包括以下至少一项:所述目标基表的数据分布以及所述数据查询需求;
基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略;所述多个数据查询策略至少包括:基于所述目标基表进行查询的数据查询策略,以及基于二级索引进行查询的数据查询策略;
若选取的数据查询策略为基于二级索引进行查询的数据查询策略,则触发执行所述确定为所述目标基表配置的多个二级索引的步骤。
14.如权利要求13所述的方法,其特征在于,所述方法还包括:
若选取的数据查询策略为基于所述目标基表进行查询的数据查询策略,则确定目标节点,所述目标节点内存储有所述目标基表的全部数据;
根据所述数据查询需求生成数据查询需求,生成的数据查询需求携带所述数据查询需求所指示的各个属性值;
将生成的数据查询需求发送给所述目标节点,使所述目标节点在所述目标基表中扫描出相应属性值对应的业务数据,并返回扫描出的业务数据;
接收所述目标节点返回的相应业务数据。
15.如权利要求13或14所述的方法,其特征在于,所述策略选择参数包括:所述目标基表的数据分布以及所述数据查询需求;所述数据分布还指示:所述P个节点中的每个节点所负责的属性值范围;其中,任一属性值对应的业务数据均需从所述P个节点中的至少一个节点处获取;
所述基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略,包括:
根据所述目标基表的数据分布所指示的每个节点负责的属性值范围,以及所述数据查询需求指示的各个属性值,确定所述节点集群中需返回业务数据的节点的数量;
若确定出的数量大于目标数量,则从预设的多个数据查询策略中选取基于所述目标基表进行查询的数据查询策略;
若确定出的数量小于或等于目标数量,则确定所述数据查询策略为基于二级索引进行查询的数据查询策略。
16.如权利要求13或14所述的方法,其特征在于,所述策略选择参数包括:所述数据查询需求;所述基于所述策略选择参数,从预设的多个数据查询策略中选取一个数据查询策略,包括:
确定所述数据查询需求所指示的属性值,在所述目标基表中的数量占比;
若所述数量占比大于占比阈值,则从预设的多个数据查询策略中选取基于所述目标基表进行查询的数据查询策略;
若所述数量占比小于或等于占比阈值,则确定所述数据查询策略为基于二级索引进行查询的数据查询策略。
17.一种数据查询装置,其特征在于,包括:
处理单元,用于确定与数据库中的目标基表相关的数据查询需求,所述目标基表包括多个数据行和用于索引每个数据行的主键,任一数据行包括一个属性值及属性值对应的业务数据;其中,所述数据查询需求用于指示待查询的至少一个属性值;
所述处理单元,还用于响应于所述数据查询需求,获取所述目标基表的数据分布,所述数据分布用于指示所述目标基表中的数据行的分布情况;
所述处理单元,还用于确定为所述目标基表配置的多个二级索引,各个二级索引均用于指示所述目标基表中的属性值到主键的映射关系,不同二级索引对应不同查询方式;
查询单元,用于基于所述目标基表的数据分布,从所述多个二级索引中选取目标二级索引;根据所述目标二级索引以及相应的查询方式,从所述目标基表中查询所述数据查询需求所指示的各个属性值对应的业务数据;
其中,是在所述目标基表的数据分布下,根据所述多个二级索引之间的能耗大小关系来选取目标二级索引的;所述目标基表的数据分布指示:所述目标基表中的数据行分布在节点集群中的P个节点中;任一节点中所存储的数据行和对应的主键构成一个基表分区,P为正整数;其中,所述多个二级索引包括:共置二级索引和基于表的二级索引;所述共置二级索引包括P个索引分区,一个索引分区与一个基表分区对应,具有对应关系的索引分区和基表分区共置在同一个节点中,且任一索引分区用于指示相应的基表分区中的属性值到主键的映射关系;所述基于表的二级索引包括多个行键以及每个行键的索引数据,行键为所述目标基表中的属性值,行键的索引数据包括相应行键在所述目标基表中对应的主键;所述基于表的二级索引被拆分成Q个二级索引表,且所述Q个二级索引表分布在所述节点集群中的Q个节点中,Q为正整数。
18.一种计算机设备,包括输入接口和输出接口,其特征在于,还包括:处理器以及计算机存储介质;
其中,所述处理器适于实现一条或多条指令,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由所述处理器加载并执行如权利要求1-16任一项所述的数据查询方法。
19.一种计算机存储介质,其特征在于,所述计算机存储介质存储有一条或多条指令,所述一条或多条指令适于由处理器加载并执行如权利要求1-16任一项所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310791269.5A CN116541427B (zh) | 2023-06-30 | 2023-06-30 | 数据查询方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310791269.5A CN116541427B (zh) | 2023-06-30 | 2023-06-30 | 数据查询方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116541427A CN116541427A (zh) | 2023-08-04 |
CN116541427B true CN116541427B (zh) | 2023-11-14 |
Family
ID=87458104
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310791269.5A Active CN116541427B (zh) | 2023-06-30 | 2023-06-30 | 数据查询方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116541427B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117290560B (zh) * | 2023-11-23 | 2024-02-23 | 支付宝(杭州)信息技术有限公司 | 图计算任务中获取图数据的方法和装置 |
CN117743337A (zh) * | 2023-12-20 | 2024-03-22 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
CN117857468A (zh) * | 2024-01-05 | 2024-04-09 | 合肥卓讯云网科技有限公司 | 一种基于dpdk的网络数据包去重方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150032141A (ko) * | 2013-09-16 | 2015-03-25 | 고려대학교 산학협력단 | 스마트 기기 내 시맨틱 검색 시스템 및 검색방법 |
CN104794123A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 一种为半结构化数据构建NoSQL数据库索引的方法及装置 |
CN104834688A (zh) * | 2015-04-20 | 2015-08-12 | 北京奇艺世纪科技有限公司 | 一种二级索引建立方法和装置 |
CN109299102A (zh) * | 2018-10-23 | 2019-02-01 | 中国电子科技集团公司第二十八研究所 | 一种基于Elastcisearch的HBase二级索引系统及方法 |
CN112231321A (zh) * | 2020-10-20 | 2021-01-15 | 中国电子科技集团公司第二十八研究所 | 一种Oracle二级索引及索引实时同步方法 |
CN114661666A (zh) * | 2022-03-03 | 2022-06-24 | 北京城市网邻信息技术有限公司 | 数据搜索方法、装置、设备及存储介质 |
-
2023
- 2023-06-30 CN CN202310791269.5A patent/CN116541427B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150032141A (ko) * | 2013-09-16 | 2015-03-25 | 고려대학교 산학협력단 | 스마트 기기 내 시맨틱 검색 시스템 및 검색방법 |
CN104794123A (zh) * | 2014-01-20 | 2015-07-22 | 阿里巴巴集团控股有限公司 | 一种为半结构化数据构建NoSQL数据库索引的方法及装置 |
CN104834688A (zh) * | 2015-04-20 | 2015-08-12 | 北京奇艺世纪科技有限公司 | 一种二级索引建立方法和装置 |
CN109299102A (zh) * | 2018-10-23 | 2019-02-01 | 中国电子科技集团公司第二十八研究所 | 一种基于Elastcisearch的HBase二级索引系统及方法 |
CN112231321A (zh) * | 2020-10-20 | 2021-01-15 | 中国电子科技集团公司第二十八研究所 | 一种Oracle二级索引及索引实时同步方法 |
CN114661666A (zh) * | 2022-03-03 | 2022-06-24 | 北京城市网邻信息技术有限公司 | 数据搜索方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116541427A (zh) | 2023-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11157478B2 (en) | Technique of comprehensively support autonomous JSON document object (AJD) cloud service | |
US11580070B2 (en) | Utilizing metadata to prune a data set | |
CN116541427B (zh) | 数据查询方法、装置、设备及存储介质 | |
US9501550B2 (en) | OLAP query processing method oriented to database and HADOOP hybrid platform | |
Cambazoglu et al. | Scalability challenges in web search engines | |
Owens et al. | Clustered TDB: a clustered triple store for Jena | |
Gajendran | A survey on nosql databases | |
Lu et al. | Scalagist: Scalable generalized search trees for mapreduce systems [innovative systems paper] | |
Challa et al. | DD-Rtree: A dynamic distributed data structure for efficient data distribution among cluster nodes for spatial data mining algorithms | |
Iyer et al. | A scalable distributed spatial index for the internet-of-things | |
Tian et al. | A survey of spatio-temporal big data indexing methods in distributed environment | |
CN115827907A (zh) | 基于分布式内存的跨云多源数据立方体发现与集成方法 | |
CN115114374A (zh) | 事务执行方法、装置、计算设备及存储介质 | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
US20230161792A1 (en) | Scaling database query processing using additional processing clusters | |
Theocharidis et al. | SRX: efficient management of spatial RDF data | |
CN117539915A (zh) | 一种数据处理方法及相关装置 | |
Ho et al. | Data partition optimization for column-family NoSQL databases | |
D’silva et al. | Secondary indexing techniques for key-value stores: Two rings to rule them all | |
CN115964444B (zh) | 一种云原生分布式多租户数据库实现方法及系统 | |
Schroeder et al. | A data distribution model for RDF | |
US20220365905A1 (en) | Metadata processing method and apparatus, and a computer-readable storage medium | |
Zheng et al. | Timo: In‐memory temporal query processing for big temporal data | |
Yu et al. | An efficient multidimension metadata index and search system for cloud data | |
Dobos et al. | A comparative evaluation of NoSQL database systems |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40091105 Country of ref document: HK |