CN104424287B - 数据查询方法和装置 - Google Patents
数据查询方法和装置 Download PDFInfo
- Publication number
- CN104424287B CN104424287B CN201310389717.5A CN201310389717A CN104424287B CN 104424287 B CN104424287 B CN 104424287B CN 201310389717 A CN201310389717 A CN 201310389717A CN 104424287 B CN104424287 B CN 104424287B
- Authority
- CN
- China
- Prior art keywords
- column
- row
- data
- storage file
- query
- 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/242—Query formulation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据查询方法和装置。其中,该方法包括:获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令;根据预设查询条件在行存储文件和列存储文件中判断出查询成本较低的一个作为查询对象,其中,在行存储文件中数据表中的数据记录按行保存,在列存储文件中数据表中的数据记录按列或列组保存;在判断出的查询对象中查询目标数据记录,并将查询出的目标数据记录进行返回。本发明解决了现有的数据查询方法的查询效率较低的技术问题,达到了提高数据查询效率的技术效果。
Description
技术领域
本发明涉及互联网通信领域,具体而言,涉及一种数据查询方法和装置。
背景技术
在互联网通信领域中,数据仓库是决策支持***和联机分析应用数据源的结构化数据环境。数据仓库研究和解决从数据库中获取信息的问题,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的。基于MapReduce的分布式数据仓库,在超大规模数据分析中扮演了重要角色,对于典型的互联网服务供应商,这些分析有助于它们快速理解动态的用户行为及变化的用户需求。
分布式数据仓库涉及到多个***,特别是在成百上千服务器上部署的数据仓库,任何一个组件都有可能失效,硬件错误是常态,因此错误检测和快速、自动的恢复是分布式数据仓库的核心架构目标之一。考虑到***容错,一般使用数据复制来保证数据的可用,如使用硬盘镜像(Disk Mirroring),将数据同时写入二个硬盘,二个硬盘上的数据完全相同,因此一个硬盘故障时,另一个硬盘可提供数据。基于Hadoop分布式文件***HDFS(HadoopDistributed File System)的分布式数据仓库HIVE,则依赖于底层的HDFS文件***的数据复制,来保证数据的高可用性。HDFS文件***对文件进行数据块(或者说文件带区)划分,并通过对数据块做数据复制和数据一致性检查达到容错的效果,此外,数据的带区化,也是并行访问数据的基础。
另一方面,数据存储结构是影响数据仓库性能的关键因素之一。数据仓库中为了快速的查询处理和适应不同的查询负载,一般会对数据使用不同的存储结构,在分布式数据仓库***中,多种结构存储得到了广泛的研究和应用。然而,在现有的针对数据仓库的数据查询方法中,这些存储结构各自存在不同的缺陷,从而在面临多样化的查询任务时,时而存在数据查询效率较低、难以满足大规模数据分析的要求的问题。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种数据查询方法和装置,以至少解决现有的数据查询方法的查询效率较低的技术问题。
根据本发明实施例的一个方面,提供了一种数据查询方法,包括:获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令;根据上述预设查询条件在行存储文件和列存储文件中判断出查询成本较低的一个作为查询对象,其中,在上述行存储文件中上述数据表中的数据记录按行保存,在上述列存储文件中上述数据表中的数据记录按列或列组保存;在判断出的上述查询对象中查询上述目标数据记录,并将查询出的上述目标数据记录进行返回。
根据本发明实施例的另一方面,还提供了一种数据查询装置,包括:获取单元,用于获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令;判断单元,用于根据上述预设查询条件在行存储文件和列存储文件中判断出查询成本较低的一个作为查询对象,其中,在上述行存储文件中上述数据表中的数据记录按行保存,在上述列存储文件中上述数据表中的数据记录按列或列组保存;查询单元,用于在判断出的上述查询对象中查询上述目标数据记录,并将查询出的上述目标数据记录进行返回。
在本发明实施例中,区别于固定地在行存储文件或者固定地在列存储文件中执行查询任务,而是通过在行存储文件和列存储文件之间进行判断以选取合适的查询对象,并在判断出的查询对象中查找满足查询指令中携带的预设查询条件的数据记录,从而在一定程度上规避了行存储结构和列存储结构各自的缺点,达到了提高查询效率的技术效果,进而解决了现有的数据查询方法的查询效率较低的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的数据查询方法的示意图;
图2是根据本发明实施例的另一种可选的数据查询方法的示意图;
图3是根据本发明实施例的又一种可选的数据查询方法的示意图;
图4(a)是根据本发明实施例的又一种可选的数据查询方法的示意图;
图4(b)是根据本发明实施例的又一种可选的数据查询方法的示意图;
图5是根据本发明实施例的又一种可选的数据查询方法的示意图;
图6是根据本发明实施例的又一种可选的数据查询方法的示意图;
图7是根据本发明实施例的又一种可选的数据查询方法的示意图;
图8是根据本发明实施例的又一种可选的数据查询方法的示意图;
图9是根据本发明实施例的又一种可选的数据查询方法的示意图;
图10是根据本发明实施例的一种可选的数据查询装置的示意图;
图11是根据本发明实施例的另一种可选的数据查询装置的示意图;
图12是根据本发明实施例的又一种可选的数据查询装置的示意图;
图13(a)是根据本发明实施例的又一种可选的数据查询装置的示意图;
图13(b)是根据本发明实施例的又一种可选的数据查询装置的示意图;
图14是根据本发明实施例的又一种可选的数据查询装置的示意图;
图15是根据本发明实施例的又一种可选的数据查询装置的示意图;
图16是根据本发明实施例的又一种可选的数据查询装置的示意图;
图17是根据本发明实施例的又一种可选的数据查询装置的示意图;
图18是根据本发明实施例的又一种可选的数据查询装置的示意图;
图19是根据本发明实施例的一种可选的HDFS的示意图;
图20是根据本发明实施例的一种可选的行存储文件及行存储结构的示意图;
图21是根据本发明实施例的一种可选的列存储文件及列存储结构的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明实施例,提供了一种数据查询方法,如图1所示,该方法包括:
S102:获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令;
S104:根据预设查询条件在行存储文件和列存储文件中判断出查询成本较低的一个作为查询对象,其中,在行存储文件中数据表中的数据记录按行保存,在列存储文件中数据表中的数据记录按列或列组保存;
S106:在判断出的查询对象中查询目标数据记录,并将查询出的目标数据记录进行返回。
应当明确的是,本发明所要解决的技术问题之一是提供一种方法,对查询指令进行响应,具体地,可以根据该方法在数据表中查询满足查询指令所携带的预设查询条件的目标数据记录,并返回查询到的该目标数据记录。从而,根据本发明实施例提供的数据查询方法,在步骤S102中,可以获取携带有上述预设查询条件的查询指令,并可以在步骤S106中将查询到的目标数据记录进行返回。
在本发明实施例中,一般而言,上述查询指令可以表现为结构化查询语言SQL(Structured Query Language)命令,例如SELECT命令等。然而这并不意味着对本发明构成了限定,例如,在本发明的一些实施例中,该查询指令也可以通过关系数据库的其他操作语言、非关系型数据库的操作语言或者其他可行的计算机语言或信息传输格式来实现,比如该查询指令也可以表现为超文本传输协议http(Hypertext Transfer Protocol)请求,例如应用GET方法的数据请求等。
在另一方面,查询指令中携带的查询条件也可以有多种具体表现形式,且根据查询指令的不同,其表现形式也各有不同。例如,一条最基本的SQL查询命令可以表现为“SELECT ID,Name FROM Student WHERE ID=5”,用于在数据表Student中查询ID为5的学生的编号和姓名信息,从而该查询指令中的查询条件可以包括两部分,其中一部分为在SELECT标识符之后出现的“ID”和“Name”,用于表示查询出的数据记录的属性,另一部分为WHERE标识符之后出现的“ID=5”,用于表示这些数据记录所要满足的条件。
从以上描述可以看出,在本申请实施例中,查询命令中所携带的查询条件可以不仅包括一个,且该查询条件也可以不仅限于数值化的关系式,而查询出的数据记录应满足该查询指令中的所有查询条件。
当然,以上只是一种示例,本发明对于查询条件的具体形式不作任何限定,例如,在本发明的一些实施例中,也可以根据行地址和/或列地址对目标数据记录进行定位,从而该查询指令对应的查询条件即可以为行地址和/或列地址的相关信息。
值得注意的是,在本发明实施例中,通过步骤S102获取的查询指令可以表示服务器接收的客户端发送的消息,也可以来自于在服务器本地运行的进程,特别地,还可以表示对接收到的消息进行解析所得到的查询指令,等。上述情形并不影响本发明技术方案的实施,本发明对此也不作任何限定。
在另一方面,通过上述实施例所给出的对于查询指令的响应方式,在现有技术中也还有多种可行的实施方式,本发明在此不作累述。通过上述方式,可以实现对查询指令的准确响应,而在实现这一效果的基础上,本发明所要进一步达到的目的是提高响应于查询指令所进行的数据查询的查询效率,例如,其可以体现为缩短查询时间或者降低处理成本等。
为达到这一目的,区别与现有技术,在根据本发明实施例提供的数据查询方法中,可以在通过步骤S102获取查询指令之后、通过步骤S106返回目标数据记录之前,对在哪一种数据存储结构的文件中对目标数据记录进行查询进行判断,并进一步地面向判断出的查询对象执行查询任务。
具体地,根据本发明实施例提供的数据查询方法,在步骤S104中,可以根据获取的查询指令对应的预设查询条件来判断后续执行的查询任务的查询对象。其中,作为可选的查询对象,可以包括行存储文件和列存储文件。
在本发明实施例中,提出了行存储文件和列存储文件的概念。一般而言,行存储文件可以视为按行存储结构保存的数据表,而列存储文件可以视为按列存储结构保存的数据表,其中,行存储结构和列存储结构可以适用于同一张数据表,也即,上述行存储文件和列存储文件所记录的数据记录的总和可以是一致的,而仅仅表现出存储结构的不同。
下面将结合表1对行存储结构和列存储结构进行详细阐述。其中,表1用于表示包含M个属性和N行数据的一张数据表T。
如表1所示,数据表T可以包括M个属性,或者说M个列:F1,F2,……,FM,以及N行数据:R1,R2,……,RN,其中,第i行的第j个属性,或者说第i行第j列的数据记录为V(i,j),其中,1<=i<=N,1<=j<=M。
表1
F<sub>1</sub> | F<sub>2</sub> | …… | F<sub>M</sub> | |
R<sub>1</sub> | V(1,1) | V(1,2) | …… | V(1,M) |
R<sub>2</sub> | V(2,1) | V(2,2) | …… | V(2,M) |
…… | …… | …… | …… | …… |
R<sub>n</sub> | V(N,1) | V(N,2) | …… | V(N,M) |
在本发明实施例中,在行存储结构下,数据记录可以按数据表中的行进行存储,从而数据表中的一行数据记录将被视为在同一存储空间内,例如,可以将数据保存在一个连续的空间中,并且在这个空间里,同一行的数据可以连续保存。
例如,对于如表1所示的数据表T而言,在行存储结构下,可以先保存第一行数据R1的M个属性,然后保存第二行数据R2的M个属性,以此类推,最后保存第N行数据RN的M个属性,从而形成N行数据首尾相接的数据结构:R1|R2|……|RN,或者说按行保存的数据结构。
在上述场景下,由于行存储结构中的一整行的数据记录保存在连续的存储空间中,因而一行数据记录的所有属性可以存储在同一数据节点上,从而在对整行数据记录进行查询,例如根据行地址或该行数据记录对应的主键执行查询操作,或者对一行数据记录的多个属性进行查询时,可以一次性地提取出这一行数据,然后直接进行返回、或者进一步提取出该行数据的多个属性,从而达到在仅对一个数据节点进行访问的同时执行较少次数的查询操作即可以完成查询任务的效果,进而实现较高的查询效率。
从以上描述可以看出,行存储结构的优势在于对快速数据加载和动态负载的较高适应能力,且行存储可以确保一行数据记录的所有属性均位于同一个数据节点上。然而,行存储结构也存在相应的缺点,例如,行存储结构难以支持快速的查询处理,比如上述对一行数据的多个属性进行查询时,只能先查询出一行数据,然后再逐个属性地查询,从而,当查询任务的目标针对数据表中的几个属性,或者说少数几列时,行存储结构下的查询操作不能跳过不必要的列而直接读取出所需的几列数据。
在另一方面,由于行存储结构中连续存储的一行数据记录中的多个属性的数值和数据类型通常存在差异,因此造成连续存储空间中的数据的多样化,从而难以获得一个较好的压缩比,导致存储空间利用率的降低。
与行存储结构相对的,在本发明实施例中,在列存储结构下,数据记录可以按数据表中的列或者列组进行存储,其中,数据表中的一列或多列形成的列组中的数据记录将被视为存储在同一存储空间内。
例如,对于如表1所示的数据表T而言,在列存储结构下,可以先保存第一属性F1的N行数据记录,或者说第一列数据记录,然后保存第二属性F2对应的第二列数据,以此类推,最后保存第M属性FM对应的第M列数据,从而形成N列数据首尾相接的数据结构:F1|F2|……|FM,也即按列保存的数据结构。
在另一方面,数据表T的列存储结构还可以表现为按列组进行储存,在这一场景下,可以先对列组进行划分,然后在每一列组内按行或按列保存数据记录。
例如,对于如表1所示的数据表T,在列存储结构下,可以划分为多个列组:G1,G2,……,GP。进而可选地,例如列组G1可以包括F1对应的第一列和F2对应的第二列,也即可以在列组G1中顺序保存所有行的F1和F2属性,进而G1可以采用如下方式对这些数据记录进行保存:
V(1,1),V(1,2),V(2,1),V(2,2),……,V(N,1),V(N,2)。
在另一方面,可选地,例如列组G2可以包括FM对应的第M列,也即列组G2中保存的是所有行的FM属性,进而G2可以采用如下方式对这些数据记录进行保存:
V(1,M),V(2,M),……,V(N,M)。
在上述场景下,由于列存储结构中的数据表按列或列组划分,因而在查询任务针对列或列组,例如在查询数据表中的几个属性对应的数据记录时,可以避免读取其他不必要的列。此外,由于列存储结构中连续存储的一列或几列数据记录中的数值和数值类型通常较为相似,因此在列存储结构下,通过压缩相似数据记录可以达到一个较高的压缩比,从而提升了存储空间的利用率。
从以上描述可以看出,列存储结构的优势在于对部分查询任务、尤其是批量查询的快速处理,以及相对较高的存储空间利用率。然而,列存储结构也存在相应的缺点,例如,由于列存储结构中的一行数据记录的所有属性并非连续存储,因而在一些场景下,例如分布式文件***中,列存储结构难以保证同一记录的所有属性都存储在同一数据节点,从而数据表的重构将导致集群节点网络中的数据节点之间的大量的数据传输。此外,对于高度动态的负载模式,列存储结构并不具备很好的适应性。
通过上述示例本发明对两种存储结构及其对应的存储文件进行了描述,然而这并不意味着对本发明构成了任何不必要的限定,例如,上述数据表T中基于“属性”的描述可以仅适用于关系型数据库,而对于其他类型的数据库,依然可以适用于“行”与“列”的直观定义。
在以上描述的基础上,为综合以上两种实施方式的优点,在本发明实施例中,可以通过步骤S104来判断在同一张数据表对应的行存储文件还是列存储文件中执行查询任务能够获得更高的查询效率,并据此选择合适的查询对象,进而可以在步骤S106中在判断出的查询对象中查询目标数据记录,而非固定地在行存储文件或者固定地在列存储文件中执行查询任务,从而在一定程度上规避了行存储结构和列存储结构各自的缺点,达到了提高查询效率的技术效果,进而解决了现有的数据查询方法的查询效率较低的技术问题。
在本发明实施例中,在行存储文件和列存储文件之间进行判断的具体实施方式有多种,例如,最基本地,判断条件之一可以设置为:若预设查询条件中仅包括行的相关信息,则可以判断出查询对象为行存储文件;若预设查询条件中仅包括属性查询条件,则可以判断出查询对象为列存储文件。
例如,对于如表1所示的数据表T,若接收的查询指令针对行R1,R2,……,RN中的一行或多行,或者说在步骤S202中判断出查询条件为行属性,例如“WHERE F1=V(1,1)”,则在适用行存储结构的行存储文件中进行查询的查询效率更高,从而可以进一步在步骤S204判断出查询对象为数据表T的行存储文件,反之,若接收到的查询指令针对列F1,F2,……,FM中的一列或多列,或者说在步骤S202中判断出查询条件为列属性,例如“SELECT F1,F2”,则在适用于列存储结构的列存储文件中进行查询的查询效率更高,从而可以进一步在步骤S204中判断出查询对象为数据表T的列存储文件。通过上述方式,可以在查询条件分别为行属性和列属性时判断出不同的查询对象,进而可以在步骤S106中,在判断出的查询对象中查询目标数据记录,以达到更高的查询效率。
当然,以上只是一种示例,在本发明实施例中,还可以有其他可选的实施方式来对查询对象进行判断,例如,可选地,如图2所示,在本发明实施例中,步骤S104可以包括:
S202:若预设查询条件中包括的数据表中的属性的个数大于第一阈值,则判断出查询对象为行存储文件;
S204:若预设查询条件中包括的数据表中的属性的个数小于第二阈值,则判断出查询对象为列存储文件。
其中,数据表中的属性即可以表示数据表中的列标签,从而,在步骤S202和S204中,通过对于预设查询条件中所包含的属性的个数,即可以判断出与该预设查询条件对应的查询指令所要查询的列的数量。
具体地,在步骤S202中,在判断出预设查询条件中的属性个数超过第一阈值时,可以视为所需查询的数据记录主要集中在一行数据记录中,从而在行存储文件中查询目标数据记录的查询成本可以判断为低于在列存储文件中查询目标数据记录的查询成本,进而可以判断出查询对象为行存储文件。在另一方面,在步骤S204中,在判断出预设查询条件中的属性个数不超过第二阈值时,可以视为所需查询的数据记录并非广泛分布在一行数据记录中,且查询过程中所需调用的列数相对较少,因此在行存储文件中查询目标数据记录的查询成本可以判断为高于在列存储文件中查询目标数据记录的查询成本,进而可以判断出查询对象为列存储文件。通过这种方式,即可以实现对查询对象的合理判断,从而实现更高的查询效率。更具体地,第一阈值和第二阈值的具体数值可以根据数据表的规模而设置,然而本发明对此不作限定。
除上述实施方式之外,更一般地,在本发明实施例中,也可以通过如下方式对查询对象进行更为准确地判断,其中,如图3所示,步骤S104可以包括:
S302:根据预设查询条件获取行查询任务的查询成本和列查询任务的查询成本,其中,行查询任务表示在行存储文件中查找目标数据记录的查询任务,列查询任务表示在列存储文件中查找目标数据记录的查询任务;
S304:在获取的行查询任务的查询成本和列查询任务的查询成本之间进行比较,若行查询任务的查询成本低于列查询任务的查询成本,则判断出查询对象为行存储文件,若行查询任务的查询成本高于列查询任务的查询成本,则判断出查询对象为列存储文件。
其中,在步骤S302中,可以先根据查询指令中携带的预设查询条件对分别在行存储文件和列存储文件中实际执行的针对目标数据记录的查询任务的查询成本进行预估,进而可以在步骤S304中在行查询任务的查询成本和列查询任务的查询成本之间进行比较,并根据比较的结果,将查询成本较小的查询任务对应的存储文件作为实际的查询对象,从而达到较高的查询效率。
更具体地,在步骤S302中,查询成本的衡量标准至少可以包括两种:时间成本和执行成本,其中,时间成本可以表示***响应于查询指令到查询出目标数据记录的时间开销,执行成本可以表示***响应于查询指令到查询出目标数据记录的***开销,例如可以体现为处理器的占用率和占用时间的结合等。从而在步骤S304中,在根据上述时间成本和/或执行成本判断出的查询对象中查询目标数据记录的过程,可以实现更短的查询时间和/或更低的处理量,从而达到缩短查询时间或降低处理压力的技术效果。
具体地,在本发明实施例中,对行查询任务的查询成本和列查询任务的查询成本的量化可以采用如下标准,其中,如图4(a)所示,步骤S302可以包括:
S402:根据行查询任务中所需执行的所有操作中属于每一操作类型的操作的个数以及每一操作类型对应的预置时间开销获取行查询任务的时间成本,并将行查询任务的时间成本作为行查询任务的查询成本;
S404:根据列查询任务中所需执行的所有操作中属于每一操作类型的操作的个数以及每一操作类型对应的预置时间开销获取列查询任务的时间成本,并将列查询任务的时间成本作为列查询任务的查询成本。
在本发明实施例中,可以预先对查询任务所需执行的操作进行分类,其中,该操作可以表示在查询过程中所需执行的数据处理动作,例如,提取一行数据记录可以记为一种操作,而在一行数据记录中提取一个或多个属性可以记为另一种操作,此外,对数据节点进行访问的应答过程也可以视为一种操作,其中,每一种操作的执行时间各有不同,而由于同一类操作的执行时间通常是相近的,因此,可以对每一类型的操作设置一个预置时间开销来表示该类操作的时间开销,其中,该预置时间开销可以为常数,也可以为变量,例如,与不同数据节点的数据交互的时长可以根据与数据节点之间的数据链路的长短而变化。
在以上描述的基础上,在步骤S402中,可以获取行查询任务中的属于每一预设操作类型中的操作的个数,从而该行查询任务的时间成本可以根据下式获取:
其中,R_CT表示行查询任务的时间成本,R_nk表示行查询任务所需执行的操作中属于第k类操作的操作个数,R_t(k)表示第k类操作对应的预置时间开销,A表示所有操作类型的总数。
类似地,在步骤S404中,可以获取列查询任务中的属于每一预设操作类型中的操作的个数,从而该列查询任务的时间成本可以根据下式获取:
其中,C_CT表示列查询任务的时间成本,C_nk表示列查询任务所需执行的操作中属于第k类操作的操作个数,C_t(k)表示第k类操作对应的预置时间开销,A表示所有操作类型的总数。
在另一方面,在本发明实施例中,对行查询任务的查询成本和列查询任务的查询成本的量化还可以采用如下标准,其中,如图4(b)所示,步骤S302可以包括:
S406:根据行查询任务中所需调用的所有线程中属于每一线程类型的线程的个数以及每一线程类型对应的预置***开销获取行查询任务的执行成本,并将行查询任务的执行成本作为列查询任务的查询成本;
S408:根据列查询任务中所需调用的所有线程中属于每一线程类型的线程的个数以及每一线程类型对应的预置***开销获取列查询任务的执行成本,并将列查询任务的执行成本作为列查询任务的查询成本。
其中,在本发明实施例中,还可以预先对查询任务所需调用的线程进行分类,例如,读取一行数据记录可以记为一种线程,根据预设查询条件中的参数进行判断可以为另一种线程,此外,向数据节点请求数据这一动作本也可以划分为线程中的一类,其中,每一类线程的调用和执行造成的***开销各有不同,而对于同一类线程,其***开销通常是相近的,因此,可以对每一类型的线程设置一个预置***开销来表示该类线程的时间开销,其中,该预置***开销可以为常数,也可以为变量,例如,针对一个数据记录规模较为庞大的数据表读数据的线程的运行通常对应较高的***开销,从而与这一类型的线程对应的预置***开销的相关参数可以为数据表的行数和列数。
在以上描述的基础上,在步骤S406中,还可以获取行查询任务中的属于每一预设线程类型中的线程的个数,从而该行查询任务的执行成本可以根据下式获取:
其中,R_CS表示行查询任务的执行成本,R_ml表示行查询任务所需调用的线程中属于第l类线程的线程个数,R_s(k)表示第l类线程对应的预置***开销,B表示所有线程类型的总数。
类似地,在步骤S408中,还可以获取列查询任务中的属于每一预设操作类型中的操作的个数,从而该列查询任务的执行成本可以根据下式获取:
其中,C_CS表示列查询任务的执行成本,C_ml表示列查询任务所需调用的线程中属于第l类线程的线程个数,C_s(k)表示第l类线程对应的预置***开销,B表示所有线程类型的总数。
通过上述实施例所提供的查询成本的量化标准,可以较为准确地对行查询任务的查询成本和列查询任务的查询成本进行预测,并可以进一步根据预测结果判断出更合适的查询对象,以进一步提升查询效率。当然,在本发明实施例中,还可以通过其他可行的方式来对查询成本进行权衡以判断出更优的查询对象,本发明在此不作累述。
进一步地,在本发明实施例中,还可以将上述数据查询方法应用到分布式文件***,例如Hadoop文件***HDFS(Hadoop Distributed File System)中,从而形成一种面向分布式数据仓库的数据查询方法。
其中,与本发明技术方案对应的,在该分布式数据仓库中,同一张数据表将同时存储于行存储文件和列存储文件中,且该行存储文件和/或列存储文件将被划分为多个数据块(或者说数据带区)分别存储于不同的数据节点上,从而导致分块后的行存储文件和列存储文件的底层存储形式与前述的连续存储方式有所不同,例如,在应用于分布式文件***的列存储结构下,从数据仓库服务器识别到的列或列组可以进一步被划分为多个数据块并分别存储于不同的数据节点,其中,每一数据块也可以仅包括该列或列组中的几行数据记录。然而,应当理解,此类对本发明技术方案的明显变型仍应视为在本发明的保护范围之内,并且在这一情形下,对于服务器层,本发明实施例中所述的行存储文件和列存储文件的保存方式仍然符合分别按行和按列或列组进行保存的这一限定。
例如对于如图19所示的HDFS,其可以包括:一个数据仓库服务器、一个名称节点(Name Node)以及多个数据节点服务器(Data Node)。其中,数据仓库服务器可以表现为决策支持***DSS(Decision Support System)和联机分析应用数据源的结构化数据环境,其上建立的数据仓库的通常可以用于为前端查询和分析提供查询和分析基础,名称节点服务器可以用于对平台中存储信息的元数据进行管理,以确保上述数据仓库中的数据完整性,其中,该元数据可以用于数据仓库和底层存储结构之间的解析,而数据节点服务器可以用于实际数据信息的存储,并直接与客户端程序进行交互以及数据传输。
一般而言,在这一环境下,通常可以将一张数据表按照行存储格式进行存储,而这种存储结构将由数据仓库服务器记录,从而在该数据仓库服务器对数据表进行访问时,面向的存储文件即可以为行存储文件。在另一方面,在底层的存储结构中,该行存储文件或者说数据表还可以被划分为多个数据块,如图19中所示的数据块1、2、3、4,且这些数据块可以互为冗余地存储在不同的数据节点上。在上述场景下,客户端在对数据表进行访问时,可以将请求数据的消息发送给数据仓库服务器,进而通过名称节点找到实际存储有与请求对应的数据记录的数据节点,并从该数据节点向上述客户端返回该数据记录。
在本发明实施例中,同一张数据表可以分别按照行存储结构和列存储结构进行保存,并且这种存储结构可以由数据仓库服务器记录,从而在该数据仓库服务器对数据表进行访问时,面向的存储文件可以至少为一个行存储文件和一个列存储文件。在此基础上,在底层的存储结构中,该行存储文件和列存储文件还可以分别被划分为多个数据块,且这些数据块可以互为冗余地存储在不同的数据节点上。在上述场景下,客户端在对数据表进行访问时,在数据仓库服务器接收到客户端发送的请求数据的消息后,可以根据本发明实施例提供的数据查询方法,在行存储文件和列存储文件中判断出查询成本较低的一个存储文件作为查询对象,进而通过名称节点找到实际存储有与上述请求对应的数据记录的数据节点,并从该数据节点向上述客户端返回该数据记录。
下面将结合表2以及图20和图21对本发明技术方案在分布式文件***中的具体实施方式作出更为详细的描述。其中,表2表示一个用于记录用户信息的数据表。
表2
ID | 年龄 | 性别 | 省份 | …… |
3212 | 32 | m | GD | …… |
873 | 18 | m | BJ | …… |
1231 | 44 | f | SH | …… |
…… | …… | …… | …… | …… |
4321 | 35 | f | GD | …… |
如表2所示,数据表中的每一行数据记录可以对应一个用户,而该用户的多项信息,例如年龄、性别和省份等,可以作为一行数据记录的不同属性存储在数据表中的不同的列中,其中,ID属性既可以表示该用户的ID,也可以作为一行数据记录的键值。
一般而言,这样一张数据表可以记录有大量***用户的大量信息,因此数据表会包括很多条数据记录,且每条数据记录会包括大量字段,也即数据表在行、列方向上的规模都将较大。因此,尽管可以将数据表整体视为存储于一份行存储文件或者列存储文件,然而在分布式文件***的底层存储结构中,通常还需要对这样一张数据表进行分块,再分别作存储和备份处理。
在如图20所示的行存储结构下,同一行的数据将被连续保存,也即,同一个用户ID的所有数据保持在连续的空间中。在另一方面,在底层存储***上会将会保存行存储文件划分成的数据块的多个副本。
相应地,用户信息表使用行存储结构的相关信息会记录在数据仓库服务器的元数据中。但数据对应的文件相关的信息,如文件的数据块信息,则保存在存储***中,如图20所示。
在如图21所示的列存储结构下,由于用户的年龄和性别一般很少变化,而且被多种分析任务使用,所以年龄和性别这两个属性对应的第一列和第二列可以形成一个列组,并保存在子存储文件1中。用户所属的省份变化相对比较频繁,它被单独保存在一个列组中,用户信息表中的其它字段列组,分别保存在各自的文件中。
相应地,上述的这些列组信息,会保存在数据仓库的元数据中。
在本发明实施例中,上述用户信息表的行存储文件和列存储文件将同时存在,从而一方面可以用于实施本发明技术方案,另一方面行存储文件和列存储文件或者二者之中的数据块可以互为备份,从而实现了冗余设计,提高了存储结构的可靠性。
在上述场景下,如图5所示,在步骤S106中,在查询对象中查询目标数据记录的步骤具体可以包括:
S502:在预存映射表中查找满足预设查询条件的数据块以及满足预存查询条件的数据块所在的数据节点;
S504:访问查找出的数据节点,并在查找出的数据块中查询目标数据记录。
其中,预存映射表可以表示上述名称节点中存储数据块和数据节点信息,进而可以在步骤S502中通过预存映射表找到待访问的数据节点和数据块,达成查询任务在底层数据结构中的实现。
通过上述实施例,对根据本发明实施例的数据查询方法进行了描述。下面将结合图6至9对本发明技术方案中对错误数据文件或数据块进行恢复的冗余设计以及向同时对应行存储文件和列存储文件数据表中的导入数据的方式进行描述。
可选地,如图6所示,在本发明实施例中,上述数据查询方法还可以包括:
S602:在接收到行存储文件的第一报错信息时,判断是否存在行存储文件的备份文件,若不存在,则根据列存储文件对行存储文件进行恢复操作;和/或,
S604:在接收到列存储文件的第二报错信息时,判断是否存在列存储文件的备份文件,若不存在,则根据行存储文件对列存储文件进行恢复操作。
在本发明实施例中,在本发明技术方案所实施的计算机网络环境下,在硬件设备或软件运行出现故障时,***通常会根据检测到的故障生成报错信息,进而根据本发明实施例提供的数据查询方法,可以在步骤S602或S604中对上述报错信息进行接收和识别,其中,若接收到表示行存储文件出错的第一报错信息或者表示列存储文件出错的第二报错信息时,可以分别对行存储文件和列存储文件进行恢复,以确保存储***的正常运行,并保证在冗余设计中的一份文件出现故障时可以维持数据副本的总数。
区别与现有技术,在本申请实施例中,在接收到第一报错信息之后,若判断出不存在剩余的行存储文件的副本时,可以根据列存储文件对行存储文件进行恢复,类似地,在接收到第二报错信息之后,若判断出不存在剩余的列存储文件的副本时,可以根据行存储文件对列存储文件进行恢复。
具体地,如图7所示,作为一种可选的方式,步骤S602中所述的根据列存储文件对行存储文件进行恢复操作的步骤可以包括:
S702:按照行存储文件中第一报错信息所指示的出错行数据块的存储格式从列存储文件中获取与出错行数据块对应的正常行数据块,并在行存储文件中将出错行数据块替换为获取到的正常行数据块。
类似地,如图7所示,作为一种可选的方式,步骤S604中所述的根据列存储文件对行存储文件进行恢复操作的步骤可以包括:
S704:按照列存储文件中第二报错信息所指示的出错列数据块的存储格式从行存储文件中获取与出错列数据块对应的正常列数据形成的数据块,并在列存储文件中将出错列数据块替换为获取到的正常列数据形成的数据块。
更具体地,在本发明实施例中,存储数据在两种存储格式之间的转换,既可以先从备份数据中形成一整个数据块或一整张数据表,然后再进行数据表到某一种存储结构的转换,也可以根据预设的转换逻辑逐个或批量地对数据记录进行处理,并实现数据恢复,本发明对此不作限定。
在另一方面,可选地,如图8所示,上述数据查询方法还可以包括:
S802:在接收到第一报错信息时,若判断出存在行存储文件的备份文件,则从行存储文件的备份文件中获取与行存储文件中第一报错信息所指示的出错行数据块对应的正常行数据块,并在行存储文件中将出错行数据块替换为获取到的正常行数据块;
S804:在接收到第二报错信息时,若判断出存在列存储文件的备份文件,则从列存储文件的备份文件中获取与列存储文件中第二报错信息所指示的出错列数据块对应的正常列数据形成的数据块,并在列存储文件中将出错列数据块替换为获取到的正常列数据形成的数据块。
在以上描述的基础上,与上述各实施例中的查询过程相对地,作为一种可选的实施方式,如图9所示,上述数据查询方法还可以包括:
S902:接收向数据表中导入数据记录的导入指令;
S904:根据按行存储格式将数据记录导入用于存储数据表的行存储文件,并根据按列存储格式或按列组存储格式将数据记录导入用于存储数据表的列存储文件。
通过步骤S902和S904可以达到向数据表导入的一份数据同时记录在行存储文件和列存储文件的目的,从而可以根据本发明实施例提供的数据查询方法对数据进行查询。进一步可选地,对于本发明技术方案在分布式文件***中的应用,在步骤S902或S904之后,还可以将导入的数据记录的存储结构信息,例如所在的数据块以及数据块所在的数据节点的信息记录在前述预存映射表中,以服务于向底层数据结构的投影操作。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的数据查询方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
根据本发明实施例,还提供了一种用于实施上述数据查询方法的数据查询装置,如图10所示,该装置可以包括:
1)获取单元1002,用于获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令;
2)判断单元1004,用于根据预设查询条件在行存储文件和列存储文件中判断出查询成本较低的一个作为查询对象,其中,在行存储文件中数据表中的数据记录按行保存,在列存储文件中数据表中的数据记录按列或列组保存;
3)查询单元1006,用于在判断出的查询对象中查询目标数据记录,并将查询出的目标数据记录进行返回。
应当明确的是,本发明所要解决的技术问题之一是提供一种装置,对查询指令进行响应,具体地,可以利用该装置在数据表中查询满足查询指令所携带的预设查询条件的目标数据记录,并返回查询到的该目标数据记录。从而,根据本发明实施例提供的数据查询装置,通过获取单元1002,可以获取携带有上述预设查询条件的查询指令,并可以通过查询单元1006将查询到的目标数据记录进行返回。
在本发明实施例中,一般而言,上述查询指令可以表现为SQL命令,例如SELECT命令等。然而这并不意味着对本发明构成了限定,例如,在本发明的一些实施例中,该查询指令也可以通过关系数据库的其他操作语言、非关系型数据库的操作语言或者其他可行的计算机语言或信息传输格式来实现,比如该查询指令也可以表现为http请求,例如应用GET方法的数据请求等。
在另一方面,查询指令中携带的查询条件也可以有多种具体表现形式,且根据查询指令的不同,其表现形式也各有不同。例如,一条最基本的SQL查询命令可以表现为“SELECT ID,Name FROM Student WHERE ID=5”,用于在数据表Student中查询ID为5的学生的编号和姓名信息,从而该查询指令中的查询条件可以包括两部分,其中一部分为在SELECT标识符之后出现的“ID”和“Name”,用于表示查询出的数据记录的属性,另一部分为WHERE标识符之后出现的“ID=5”,用于表示这些数据记录所要满足的条件。
从以上描述可以看出,在本申请实施例中,查询命令中所携带的查询条件可以不仅包括一个,且该查询条件也可以不仅限于数值化的关系式,而查询出的数据记录应满足该查询指令中的所有查询条件。
当然,以上只是一种示例,本发明对于查询条件的具体形式不作任何限定,例如,在本发明的一些实施例中,也可以根据行地址和/或列地址对目标数据记录进行定位,从而该查询指令对应的查询条件即可以为行地址和/或列地址的相关信息。
值得注意的是,在本发明实施例中,通过获取单元1002获取的查询指令可以表示服务器接收的客户端发送的消息,也可以来自于在服务器本地运行的进程,特别地,还可以表示对接收到的消息进行解析所得到的查询指令,等。上述情形并不影响本发明技术方案的实施,本发明对此也不作任何限定。
在另一方面,通过上述实施例所给出的对于查询指令的响应方式,在现有技术中也还有多种可行的实施方式,本发明在此不作累述。通过上述方式,可以实现对查询指令的准确响应,而在实现这一效果的基础上,本发明所要进一步达到的目的是提高响应于查询指令所进行的数据查询的查询效率,例如,其可以体现为缩短查询时间或者降低处理成本等。
为达到这一目的,区别与现有技术,在根据本发明实施例提供的数据查询装置中,可以在通过获取单元1002获取查询指令之后、通过查询单元1006返回目标数据记录之前,对在哪一种数据存储结构的文件中对目标数据记录进行查询进行判断,并进一步地面向判断出的查询对象执行查询任务。
具体地,根据本发明实施例提供的数据查询装置,在判断单元1004中,可以根据获取的查询指令对应的预设查询条件来判断后续执行的查询任务的查询对象。其中,作为可选的查询对象,可以包括行存储文件和列存储文件。
在本发明实施例中,提出了行存储文件和列存储文件的概念。一般而言,行存储文件可以视为按行存储结构保存的数据表,而列存储文件可以视为按列存储结构保存的数据表,其中,行存储结构和列存储结构可以适用于同一张数据表,也即,上述行存储文件和列存储文件所记录的数据记录的总和可以是一致的,而仅仅表现出存储结构的不同。
下面将结合在实施例1中提供的表1对行存储结构和列存储结构进行详细阐述。其中,表1用于表示包含M个属性和N行数据的一张数据表T。
如表1所示,数据表T可以包括M个属性,或者说M个列:F1,F2,……,FM,以及N行数据:R1,R2,……,RN,其中,第i行的第j个属性,或者说第i行第j列的数据记录为V(i,j),其中,1<=i<=N,1<=j<=M。
在本发明实施例中,在行存储结构下,数据记录可以按数据表中的行进行存储,从而数据表中的一行数据记录将被视为在同一存储空间内,例如,可以将数据保存在一个连续的空间中,并且在这个空间里,同一行的数据可以连续保存。
例如,对于如表1所示的数据表T而言,在行存储结构下,可以先保存第一行数据R1的M个属性,然后保存第二行数据R2的M个属性,以此类推,最后保存第N行数据RN的M个属性,从而形成N行数据首尾相接的数据结构:R1|R2|……|RN,或者说按行保存的数据结构。
在上述场景下,由于行存储结构中的一整行的数据记录保存在连续的存储空间中,因而一行数据记录的所有属性可以存储在同一数据节点上,从而在对整行数据记录进行查询,例如根据行地址或该行数据记录对应的主键执行查询操作,或者对一行数据记录的多个属性进行查询时,可以一次性地提取出这一行数据,然后直接进行返回、或者进一步提取出该行数据的多个属性,从而达到在仅对一个数据节点进行访问的同时执行较少次数的查询操作即可以完成查询任务的效果,进而实现较高的查询效率。
从以上描述可以看出,行存储结构的优势在于对快速数据加载和动态负载的较高适应能力,且行存储可以确保一行数据记录的所有属性均位于同一个数据节点上。然而,行存储结构也存在相应的缺点,例如,行存储结构难以支持快速的查询处理,比如上述对一行数据的多个属性进行查询时,只能先查询出一行数据,然后再逐个属性地查询,从而,当查询任务的目标针对数据表中的几个属性,或者说少数几列时,行存储结构下的查询操作不能跳过不必要的列而直接读取出所需的几列数据。
在另一方面,由于行存储结构中连续存储的一行数据记录中的多个属性的数值和数据类型通常存在差异,因此造成连续存储空间中的数据的多样化,从而难以获得一个较好的压缩比,导致存储空间利用率的降低。
与行存储结构相对的,在本发明实施例中,在列存储结构下,数据记录可以按数据表中的列或者列组进行存储,其中,数据表中的一列或多列形成的列组中的数据记录将被视为存储在同一存储空间内。
例如,对于如表1所示的数据表T而言,在列存储结构下,可以先保存第一属性F1的N行数据记录,或者说第一列数据记录,然后保存第二属性F2对应的第二列数据,以此类推,最后保存第M属性FM对应的第M列数据,从而形成N列数据首尾相接的数据结构:F1|F2|……|FM,也即按列保存的数据结构。
在另一方面,数据表T的列存储结构还可以表现为按列组进行储存,在这一场景下,可以先对列组进行划分,然后在每一列组内按行或按列保存数据记录。
例如,对于如表1所示的数据表T,在列存储结构下,可以划分为多个列组:G1,G2,……,GP。进而可选地,例如列组G1可以包括F1对应的第一列和F2对应的第二列,也即可以在列组G1中顺序保存所有行的F1和F2属性,进而G1可以采用如下方式对这些数据记录进行保存:
V(1,1),V(1,2),V(2,1),V(2,2),……,V(N,1),V(N,2)。
在另一方面,可选地,例如列组G2可以包括FM对应的第M列,也即列组G2中保存的是所有行的FM属性,进而G2可以采用如下方式对这些数据记录进行保存:
V(1,M),V(2,M),……,V(N,M)。
在上述场景下,由于列存储结构中的数据表按列或列组划分,因而在查询任务针对列或列组,例如在查询数据表中的几个属性对应的数据记录时,可以避免读取其他不必要的列。此外,由于列存储结构中连续存储的一列或几列数据记录中的数值和数值类型通常较为相似,因此在列存储结构下,通过压缩相似数据记录可以达到一个较高的压缩比,从而提升了存储空间的利用率。
从以上描述可以看出,列存储结构的优势在于对部分查询任务、尤其是批量查询的快速处理,以及相对较高的存储空间利用率。然而,列存储结构也存在相应的缺点,例如,由于列存储结构中的一行数据记录的所有属性并非连续存储,因而在一些场景下,例如分布式文件***中,列存储结构难以保证同一记录的所有属性都存储在同一数据节点,从而数据表的重构将导致集群节点网络中的数据节点之间的大量的数据传输。此外,对于高度动态的负载模式,列存储结构并不具备很好的适应性。
通过上述示例本发明对两种存储结构及其对应的存储文件进行了描述,然而这并不意味着对本发明构成了任何不必要的限定,例如,上述数据表T中基于“属性”的描述可以仅适用于关系型数据库,而对于其他类型的数据库,依然可以适用于“行”与“列”的直观定义。
在以上描述的基础上,为综合以上两种实施方式的优点,在本发明实施例中,可以通过判断单元1004来判断在同一张数据表对应的行存储文件还是列存储文件中执行查询任务能够获得更高的查询效率,并据此选择合适的查询对象,进而可以通过查询单元1006在判断出的查询对象中查询目标数据记录,而非固定地在行存储文件或者固定地在列存储文件中执行查询任务,从而在一定程度上规避了行存储结构和列存储结构各自的缺点,达到了提高查询效率的技术效果,进而解决了现有的数据查询装置的查询效率较低的技术问题。
在本发明实施例中,在行存储文件和列存储文件之间进行判断的具体实施方式有多种,例如,最基本地,判断条件之一可以设置为:若预设查询条件中仅包括行的相关信息,则可以判断出查询对象为行存储文件;若预设查询条件中仅包括属性查询条件,则可以判断出查询对象为列存储文件。
例如,对于如表1所示的数据表T,若接收的查询指令针对行R1,R2,……,RN中的一行或多行,或者说在判断单元1004中判断出查询条件为行属性,例如“WHEREF1=V(1,1)”,则在适用行存储结构的行存储文件中进行查询的查询效率更高,从而可以进一步在判断单元1004判断出查询对象为数据表T的行存储文件,反之,若接收到的查询指令针对列F1,F2,……,FM中的一列或多列,或者说在判断单元1004中判断出查询条件为列属性,例如“SELECT F1,F2”,则在适用于列存储结构的列存储文件中进行查询的查询效率更高,从而可以进一步在判断单元1004中判断出查询对象为数据表T的列存储文件。通过上述方式,可以在查询条件分别为行属性和列属性时判断出不同的查询对象,进而可以通过查询单元1006,在判断出的查询对象中查询目标数据记录,以达到更高的查询效率。
当然,以上只是一种示例,在本发明实施例中,还可以有其他可选的实施方式来对查询对象进行判断,例如,可选地,如图11所示,在本发明实施例中,判断单元1004可以包括:
1)第二判断模块1102,用于在预设查询条件中包括的数据表中的属性的个数大于第一阈值时,判断出查询对象为行存储文件;在预设查询条件中包括的数据表中的属性的个数小于第二阈值时,判断出查询对象为列存储文件。
其中,数据表中的属性即可以表示数据表中的列标签,从而,在第二判断模块1102中,通过对于预设查询条件中所包含的属性的个数,即可以判断出与该预设查询条件对应的查询指令所要查询的列的数量。
具体地,在第二判断模块1102中,在判断出预设查询条件中的属性个数超过第一阈值时,可以视为所需查询的数据记录主要集中在一行数据记录中,从而在行存储文件中查询目标数据记录的查询成本可以判断为低于在列存储文件中查询目标数据记录的查询成本,进而可以判断出查询对象为行存储文件。在另一方面,在第二判断模块1102中,在判断出预设查询条件中的属性个数不超过第二阈值时,可以视为所需查询的数据记录并非广泛分布在一行数据记录中,且查询过程中所需调用的列数相对较少,因此在行存储文件中查询目标数据记录的查询成本可以判断为高于在列存储文件中查询目标数据记录的查询成本,进而可以判断出查询对象为列存储文件。通过这种方式,即可以实现对查询对象的合理判断,从而实现更高的查询效率。更具体地,第一阈值和第二阈值的具体数值可以根据数据表的规模而设置,然而本发明对此不作限定。
除上述实施方式之外,一般而言,在本发明实施例中,也可以通过如下方式对查询对象进行更为准确地判断,其中,如图12所示,判断单元1004可以包括:
1)获取模块1202,用于根据预设查询条件获取行查询任务的查询成本和列查询任务的查询成本,其中,行查询任务的查询成本表示在行存储文件中查找目标数据记录的时间成本和/或执行成本,列查询任务的查询成本表示在列存储文件中查找目标数据记录的时间成本和/或执行成本;
2)第一判断模块1204,用于在获取的行查询任务的查询成本和列查询任务的查询成本之间进行比较,若行查询任务的查询成本低于列查询任务的查询成本,则判断出查询对象为行存储文件,若行查询任务的查询成本高于列查询任务的查询成本,则判断出查询对象为列存储文件。
其中,在获取模块1202中,可以先根据查询指令中携带的预设查询条件对分别在行存储文件和列存储文件中实际执行的针对目标数据记录的查询任务的查询成本进行预估,进而可以在第一判断模块1204中在行查询任务的查询成本和列查询任务的查询成本之间进行比较,并根据比较的结果,将查询成本较小的查询任务对应的存储文件作为实际的查询对象,从而达到较高的查询效率。
更具体地,对于获取模块1202,查询成本的衡量标准至少可以包括两种:时间成本和执行成本,其中,时间成本可以表示***响应于查询指令到查询出目标数据记录的时间开销,执行成本可以表示***响应于查询指令到查询出目标数据记录的***开销,例如可以体现为处理器的占用率和占用时间的结合等。从而通过第一判断模块1204,在根据上述时间成本和/或执行成本判断出的查询对象中查询目标数据记录的过程,可以实现更短的查询时间和/或更低的处理量,从而达到缩短查询时间或降低处理压力的技术效果。
具体地,在本发明实施例中,对行查询任务的查询成本和列查询任务的查询成本的量化可以采用如下标准,其中,如图13(a)所示,获取模块1202可以包括:
1)第一获取子模块1302,用于根据行查询任务中所需执行的所有操作中属于每一操作类型的操作的个数以及每一操作类型对应的预置时间开销获取行查询任务的时间成本,并将行查询任务的时间成本作为行查询任务的查询成本;
2)第二获取子模块1304,用于根据列查询任务中所需执行的所有操作中属于每一操作类型的操作的个数以及每一操作类型对应的预置时间开销获取列查询任务的时间成本,并将列查询任务的时间成本作为列查询任务的查询成本。
在本发明实施例中,可以预先对查询任务所需执行的操作进行分类,其中,该操作可以表示在查询过程中所需执行的数据处理动作,例如,提取一行数据记录可以记为一种操作,而在一行数据记录中提取一个或多个属性可以记为另一种操作,此外,对数据节点进行访问的应答过程也可以视为一种操作,其中,每一种操作的执行时间各有不同,而由于同一类操作的执行时间通常是相近的,因此,可以对每一类型的操作设置一个预置时间开销来表示该类操作的时间开销,其中,该预置时间开销可以为常数,也可以为变量,例如,与不同数据节点的数据交互的时长可以根据与数据节点之间的数据链路的长短而变化。
在以上描述的基础上,在第一获取子模块1302中,可以获取行查询任务中的属于每一预设操作类型中的操作的个数,从而该行查询任务的时间成本可以根据下式获取:
其中,R_CT表示行查询任务的时间成本,R_nk表示行查询任务所需执行的操作中属于第k类操作的操作个数,R_t(k)表示第k类操作对应的预置时间开销,A表示所有操作类型的总数。
类似地,在第二获取子模块1304中,可以获取列查询任务中的属于每一预设操作类型中的操作的个数,从而该列查询任务的时间成本可以根据下式获取:
其中,C_CT表示列查询任务的时间成本,C_nk表示列查询任务所需执行的操作中属于第k类操作的操作个数,C_t(k)表示第k类操作对应的预置时间开销,A表示所有操作类型的总数。
在另一方面,在本发明实施例中,对行查询任务的查询成本和列查询任务的查询成本的量化还可以采用如下标准,其中,如图13(b)所示,获取模块1202可以包括:
1)第三获取子模块1306,用于根据行查询任务中所需调用的所有线程中属于每一线程类型的线程的个数以及每一线程类型对应的预置***开销获取行查询任务的执行成本,并将行查询任务的执行成本作为列查询任务的查询成本;
2)第四获取子模块1308,用于根据列查询任务中所需调用的所有线程中属于每一线程类型的线程的个数以及每一线程类型对应的预置***开销获取列查询任务的执行成本,并将列查询任务的执行成本作为列查询任务的查询成本。
其中,在本发明实施例中,还可以预先对查询任务所需调用的线程进行分类,例如,读取一行数据记录可以记为一种线程,根据预设查询条件中的参数进行判断可以为另一种线程,此外,向数据节点请求数据这一动作本也可以划分为线程中的一类,其中,每一类线程的调用和执行造成的***开销各有不同,而对于同一类线程,其***开销通常是相近的,因此,可以对每一类型的线程设置一个预置***开销来表示该类线程的时间开销,其中,该预置***开销可以为常数,也可以为变量,例如,针对一个数据记录规模较为庞大的数据表读数据的线程的运行通常对应较高的***开销,从而与这一类型的线程对应的预置***开销的相关参数可以为数据表的行数和列数。
在以上描述的基础上,在第三获取子模块1306中,还可以获取行查询任务中的属于每一预设线程类型中的线程的个数,从而该行查询任务的执行成本可以根据下式获取:
其中,R_CS表示行查询任务的执行成本,R_ml表示行查询任务所需调用的线程中属于第l类线程的线程个数,R_s(k)表示第l类线程对应的预置***开销,B表示所有线程类型的总数。
类似地,在第四获取子模块1308中,还可以获取列查询任务中的属于每一预设操作类型中的操作的个数,从而该列查询任务的执行成本可以根据下式获取:
其中,C_CS表示列查询任务的执行成本,C_ml表示列查询任务所需调用的线程中属于第l类线程的线程个数,C_s(k)表示第l类线程对应的预置***开销,B表示所有线程类型的总数。
通过上述实施例所提供的查询成本的量化标准,可以较为准确地对行查询任务的查询成本和列查询任务的查询成本进行预测,并可以进一步根据预测结果判断出更合适的查询对象,以进一步提升查询效率。当然,在本发明实施例中,还可以通过其他可行的方式来对查询成本进行权衡以判断出更优的查询对象,本发明在此不作累述。
进一步地,在本发明实施例中,还可以将上述数据查询装置应用到分布式文件***,例如HDFS中,从而形成一种面向分布式数据仓库的数据查询装置。其中,与本发明技术方案对应的,在该分布式数据仓库中,同一张数据表将同时存储于行存储文件和列存储文件中,且该行存储文件和/或列存储文件将被划分为多个数据块(或者说数据带区)分别存储于不同的数据节点上,从而导致分块后的行存储文件和列存储文件的底层存储形式与前述的连续存储方式有所不同,例如,在应用于分布式文件***的列存储结构下,从数据仓库服务器识别到的列或列组可以进一步被划分为多个数据块并分别存储于不同的数据节点,其中,每一数据块也可以仅包括该列或列组中的几行数据记录。然而,应当理解,此类对本发明技术方案的明显变型仍应视为在本发明的保护范围之内,并且在这一情形下,对于服务器层,本发明实施例中所述的行存储文件和列存储文件的保存方式仍然符合分别按行和按列或列组进行保存的这一限定。
例如对于如图19所示的HDFS,其可以包括:一个数据仓库服务器、一个名称节点(Name Node)以及多个数据节点服务器(Data Node)。其中,数据仓库服务器可以表现为DSS和联机分析应用数据源的结构化数据环境,其上建立的数据仓库的通常可以用于为前端查询和分析提供查询和分析基础,名称节点服务器可以用于对平台中存储信息的元数据进行管理,以确保上述数据仓库中的数据完整性,其中,该元数据可以用于数据仓库和底层存储结构之间的解析,而数据节点服务器可以用于实际数据信息的存储,并直接与客户端程序进行交互以及数据传输。
一般而言,在这一环境下,通常可以将一张数据表按照行存储格式进行存储,而这种存储结构将由数据仓库服务器记录,从而在该数据仓库服务器对数据表进行访问时,面向的存储文件即可以为行存储文件。在另一方面,在底层的存储结构中,该行存储文件或者说数据表还可以被划分为多个数据块,如图19中所示的数据块1、2、3、4,且这些数据块可以互为冗余地存储在不同的数据节点上。在上述场景下,客户端在对数据表进行访问时,可以将请求数据的消息发送给数据仓库服务器,进而通过名称节点找到实际存储有与请求对应的数据记录的数据节点,并从该数据节点向上述客户端返回该数据记录。
在本发明实施例中,同一张数据表可以分别按照行存储结构和列存储结构进行保存,并且这种存储结构可以由数据仓库服务器记录,从而在该数据仓库服务器对数据表进行访问时,面向的存储文件可以至少为一个行存储文件和一个列存储文件。在此基础上,在底层的存储结构中,该行存储文件和列存储文件还可以分别被划分为多个数据块,且这些数据块可以互为冗余地存储在不同的数据节点上。在上述场景下,客户端在对数据表进行访问时,在数据仓库服务器接收到客户端发送的请求数据的消息后,可以根据本发明实施例提供的数据查询方法,在行存储文件和列存储文件中判断出查询成本较低的一个存储文件作为查询对象,进而通过名称节点找到实际存储有与上述请求对应的数据记录的数据节点,并从该数据节点向上述客户端返回该数据记录。
下面将结合实施1提供的表2以及图20和图21对本发明技术方案在分布式文件***中的具体实施方式进行更为详细的阐述。其中,表2表示一个用于记录用户信息的数据表。
如表2所示,数据表中的每一行数据记录可以对应一个用户,而该用户的多项信息,例如年龄、性别和省份等,可以作为一行数据记录的不同属性存储在数据表中的不同的列中,其中,ID属性既可以表示该用户的ID,也可以作为一行数据记录的键值。
一般而言,这样一张数据表可以记录有大量***用户的大量信息,因此数据表会包括很多条数据记录,且每条数据记录会包括大量字段,也即数据表在行、列方向上的规模都将较大。因此,尽管可以将数据表整体视为存储于一份行存储文件或者列存储文件,然而在分布式文件***的底层存储结构中,通常还需要对这样一张数据表进行分块,再分别作存储和备份处理。
在如图20所示的行存储结构下,同一行的数据将被连续保存,也即,同一个用户ID的所有数据保持在连续的空间中。在另一方面,在底层存储***上会将会保存行存储文件划分成的数据块的多个副本。
相应地,用户信息表使用行存储结构的相关信息会记录在数据仓库服务器的元数据中。但数据对应的文件相关的信息,如文件的数据块信息,则保存在存储***中,如图20所示。
在如图21所示的列存储结构下,由于用户的年龄和性别一般很少变化,而且被多种分析任务使用,所以年龄和性别这两个属性对应的第一列和第二列可以形成一个列组,并保存在子存储文件1中。用户所属的省份变化相对比较频繁,它被单独保存在一个列组中,用户信息表中的其它字段列组,分别保存在各自的文件中。
相应地,上述的这些列组信息,会保存在数据仓库的元数据中。
在本发明实施例中,上述用户信息表的行存储文件和列存储文件将同时存在,从而一方面可以用于实施本发明技术方案,另一方面行存储文件和列存储文件或者二者之中的数据块可以互为备份,从而实现了冗余设计,提高了存储结构的可靠性。
在上述场景下,如图14所示,查询单元1006可以包括:
1)查找模块1402,用于在预存映射表中查找满足预设查询条件的数据块以及满足预存查询条件的数据块所在的数据节点;
2)访问模块1404,用于访问查找出的数据节点,并在查找出的数据块中查询目标数据记录。
其中,预存映射表可以表示上述名称节点中存储数据块和数据节点信息,进而可以通过查找模块1402在预存映射表中找到待访问的数据节点和数据块,并通过访问模块1404查询目标数据记录,进而达成查询任务在底层数据结构中的实现。
通过上述实施例,对根据本发明实施例的数据查询装置进行了描述。下面将结合图15至18对本发明技术方案中对错误数据文件或数据块进行恢复的冗余设计以及向同时对应行存储文件和列存储文件数据表中的导入数据的方式进行描述。
可选地,如图15所示,在本发明实施例中,上述数据查询装置还可以包括:
1)第一恢复单元1502,用于在接收到行存储文件的第一报错信息时,判断是否存在行存储文件的备份文件,若不存在,则根据列存储文件对行存储文件进行恢复操作;和/或,
2)第二恢复单元1504,用于在接收到列存储文件的第二报错信息时,判断是否存在列存储文件的备份文件,若不存在,则根据行存储文件对列存储文件进行恢复操作。
在本发明实施例中,在本发明技术方案所实施的计算机网络环境下,在硬件设备或软件运行出现故障时,***通常会根据检测到的故障生成报错信息,进而根据本发明实施例提供的数据查询装置,可以在第一恢复单元1502或第二恢复单元1504中对上述报错信息进行接收和识别,其中,若接收到表示行存储文件出错的第一报错信息或者表示列存储文件出错的第二报错信息时,可以分别对行存储文件和列存储文件进行恢复,以确保存储***的正常运行,并保证在冗余设计中的一份文件出现故障时可以维持数据副本的总数。
区别与现有技术,在本申请实施例中,在接收到第一报错信息之后,若判断出不存在剩余的行存储文件的副本时,可以根据列存储文件对行存储文件进行恢复,类似地,在接收到第二报错信息之后,若判断出不存在剩余的列存储文件的副本时,可以根据行存储文件对列存储文件进行恢复。
具体地,如图16所示,作为一种可选的方式,第一恢复单元1502可以包括:
1)第一恢复模块1602,用于按照行存储文件中第一报错信息所指示的出错行数据块的存储格式从列存储文件中获取与出错行数据块对应的正常行数据块,并在行存储文件中将出错行数据块替换为获取到的正常行数据块;
类似地,如图16所示,作为一种可选的方式,第二恢复单元1504可以包括:
1)第二恢复模块1604,用于按照列存储文件中第二报错信息所指示的出错列数据块的存储格式从行存储文件中获取与出错列数据块对应的正常列数据形成的数据块,并在列存储文件中将出错列数据块替换为获取到的正常列数据形成的数据块。
更具体地,在本发明实施例中,存储数据在两种存储格式之间的转换,既可以先从备份数据中形成一整个数据块或一整张数据表,然后再进行数据表到某一种存储结构的转换,也可以根据预设的转换逻辑逐个或批量地对数据记录进行处理,并实现数据恢复,本发明对此不作限定。
在另一方面,可选地,如图17所示,第一恢复单元1502也可以包括:
1)第三恢复模块1702,用于在接收到第一报错信息时,若判断出存在行存储文件的备份文件,则从行存储文件的备份文件中获取与行存储文件中第一报错信息所指示的出错行数据块对应的正常行数据块,并在行存储文件中将出错行数据块替换为获取到的正常行数据块;
类似地,如图17所示,在本发明实施例中,第二恢复单元1504也可以包括:
1)第四恢复模块1704,用于在接收到第二报错信息时,若判断出存在列存储文件的备份文件,则从列存储文件的备份文件中获取与列存储文件中第二报错信息所指示的出错列数据块对应的正常列数据形成的数据块,并在列存储文件中将出错列数据块替换为获取到的正常列数据形成的数据块。
在以上描述的基础上,与上述各实施例中的查询过程相对地,作为一种可选的实施方式,如图18所示,上述数据查询装置还可以包括:
1)接收单元1802,用于在获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令之前,接收向数据表中导入数据记录的导入指令;
2)导入单元1804,用于根据按行存储格式将数据记录导入用于存储数据表的行存储文件,并根据按列存储格式或按列组存储格式将数据记录导入用于存储数据表的列存储文件。
通过接收单元1802和导入单元1804可以达到向数据表导入的一份数据同时记录在行存储文件和列存储文件的目的,从而可以根据本发明实施例提供的数据查询装置对数据进行查询。进一步可选地,对于本发明技术方案在分布式文件***中的应用,与接收单元1802或导入单元1804耦合地,还可以将导入的数据记录的存储结构信息,例如所在的数据块以及数据块所在的数据节点的信息记录在前述预存映射表中,以服务于向底层数据结构的投影操作。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的数据查询装置,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (20)
1.一种数据查询方法,其特征在于,包括:
获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令;
根据所述预设查询条件在行存储文件和列存储文件中判断出行查询任务和列查询任务中查询成本较低的一个作为查询对象,其中,在所述行存储文件中所述数据表中的数据记录按行保存,在所述列存储文件中所述数据表中的数据记录按列或列组保存;
其中,所述查询成本至少包括:时间成本和执行成本,其中,所述时间成本表示***响应于查询指令到查询出目标数据记录的时间开销,所述执行成本表示***响应于查询指令到查询出目标数据记录的***开销;
在判断出的所述查询对象中查询所述目标数据记录,并将查询出的所述目标数据记录进行返回。
2.根据权利要求1所述的方法,其特征在于,所述根据所述预设查询条件在行存储文件和列存储文件中判断出行查询任务和列查询任务中查询成本较低的一个作为查询对象包括:
根据所述预设查询条件获取行查询任务的查询成本和列查询任务的查询成本,其中,所述行查询任务表示在所述行存储文件中查找所述目标数据记录的查询任务,所述列查询任务表示在所述列存储文件中查找所述目标数据记录的查询任务;
在获取的所述行查询任务的查询成本和所述列查询任务的查询成本之间进行比较,若所述行查询任务的查询成本低于所述列查询任务的查询成本,则判断出所述查询对象为所述行存储文件,若所述行查询任务的查询成本高于所述列查询任务的查询成本,则判断出所述查询对象为所述列存储文件。
3.根据权利要求2所述的方法,其特征在于,所述根据所述预设查询条件获取行查询任务的查询成本和列查询任务的查询成本包括:
根据行查询任务中所需执行的所有操作中属于每一操作类型的操作的个数以及所述每一操作类型对应的预置时间开销获取所述行查询任务的时间成本,并将所述行查询任务的时间成本作为所述行查询任务的查询成本;
根据列查询任务中所需执行的所有操作中属于每一操作类型的操作的个数以及所述每一操作类型对应的预置时间开销获取所述列查询任务的时间成本,并将所述列查询任务的时间成本作为所述列查询任务的查询成本。
4.根据权利要求2所述的方法,其特征在于,所述根据所述预设查询条件获取行查询任务的查询成本和列查询任务的查询成本包括:
根据所述行查询任务中所需调用的所有线程中属于每一线程类型的线程的个数以及所述每一线程类型对应的预置***开销获取所述行查询任务的执行成本,并将所述行查询任务的执行成本作为所述行查询任务的查询成本;
根据所述列查询任务中所需调用的所有线程中属于每一线程类型的线程的个数以及所述每一线程类型对应的预置***开销获取所述列查询任务的执行成本,并将所述列查询任务的执行成本作为所述列查询任务的查询成本。
5.根据权利要求1所述的方法,其特征在于,所述根据所述预设查询条件在行存储文件和列存储文件中判断出行查询任务和列查询任务中查询成本较低的一个作为查询对象包括:
若所述预设查询条件中包括的所述数据表中的属性的个数大于第一阈值,则判断出所述查询对象为所述行存储文件;
若所述预设查询条件中包括的所述数据表中的属性的个数小于第二阈值,则判断出所述查询对象为所述列存储文件。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述行存储文件和/或所述列存储文件被划分为多个数据块,其中,所述多个数据块存储在不同的数据节点上,所述数据节点中的每一个存有一个或多个所述数据块,其中,所述在判断出的所述查询对象中查询所述目标数据记录包括:
在预存映射表中查找满足所述预设查询条件的数据块以及满足所述预设查询条件的数据块所在的数据节点;
访问查找出的所述数据节点,并在查找出的所述数据块中查询所述目标数据记录。
7.根据权利要求1至5中任一项所述的方法,其特征在于,还包括:
在接收到所述行存储文件的第一报错信息时,判断是否存在所述行存储文件的备份文件,若不存在,则根据所述列存储文件对所述行存储文件进行恢复操作;和/或,
在接收到所述列存储文件的第二报错信息时,判断是否存在所述列存储文件的备份文件,若不存在,则根据所述行存储文件对所述列存储文件进行恢复操作。
8.根据权利要求7所述的方法,其特征在于,
所述根据所述列存储文件对所述行存储文件进行恢复操作包括:按照所述行存储文件中所述第一报错信息所指示的出错行数据块的存储格式从所述列存储文件中获取与所述出错行数据块对应的正常行数据块,并在所述行存储文件中将所述出错行数据块替换为获取到的所述正常行数据块;
所述根据所述行存储文件对所述列存储文件进行恢复操作包括:按照所述列存储文件中所述第二报错信息所指示的出错列数据块的存储格式从所述行存储文件中获取与所述出错列数据块对应的正常列数据形成的数据块,并在所述列存储文件中将所述出错列数据块替换为获取到的所述正常列数据形成的数据块。
9.根据权利要求7所述的方法,其特征在于,
在接收到所述第一报错信息时,若判断出存在所述行存储文件的备份文件,则从所述行存储文件的备份文件中获取与所述行存储文件中所述第一报错信息所指示的出错行数据块对应的正常行数据块,并在所述行存储文件中将所述出错行数据块替换为获取到的所述正常行数据块;
在接收到所述第二报错信息时,若判断出存在所述列存储文件的备份文件,则从所述列存储文件的备份文件中获取与所述列存储文件中所述第二报错信息所指示的出错列数据块对应的正常列数据形成的数据块,并在所述列存储文件中将所述出错列数据块替换为获取到的所述正常列数据形成的数据块。
10.根据权利要求1至5中任一项所述的方法,其特征在于,在所述获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令之前,还包括:
接收向所述数据表中导入所述数据记录的导入指令;
根据按行存储格式将所述数据记录导入用于存储所述数据表的所述行存储文件,并根据按列存储格式或按列组存储格式将所述数据记录导入用于存储所述数据表的所述列存储文件。
11.一种数据查询装置,其特征在于,包括:
获取单元,用于获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令;
判断单元,用于根据所述预设查询条件在行存储文件和列存储文件中判断出行查询任务和列查询任务中查询成本较低的一个作为查询对象,其中,在所述行存储文件中所述数据表中的数据记录按行保存,在所述列存储文件中所述数据表中的数据记录按列或列组保存;
其中,所述查询成本至少包括:时间成本和执行成本,其中,所述时间成本表示***响应于查询指令到查询出目标数据记录的时间开销,所述执行成本表示***响应于查询指令到查询出目标数据记录的***开销;
查询单元,用于在判断出的所述查询对象中查询所述目标数据记录,并将查询出的所述目标数据记录进行返回。
12.根据权利要求11所述的装置,其特征在于,所述判断单元包括:
获取模块,用于根据所述预设查询条件获取行查询任务的查询成本和列查询任务的查询成本,其中,所述行查询任务表示在所述行存储文件中查找所述目标数据记录的查询任务,所述列查询任务表示在所述列存储文件中查找所述目标数据记录的查询任务;
第一判断模块,用于在获取的所述行查询任务的查询成本和所述列查询任务的查询成本之间进行比较,若所述行查询任务的查询成本低于所述列查询任务的查询成本,则判断出所述查询对象为所述行存储文件,若所述行查询任务的查询成本高于所述列查询任务的查询成本,则判断出所述查询对象为所述列存储文件。
13.根据权利要求12所述的装置,其特征在于,所述获取模块包括:
第一获取子模块,用于根据行查询任务中所需执行的所有操作中属于每一操作类型的操作的个数以及所述每一操作类型对应的预置时间开销获取所述行查询任务的时间成本,并将所述行查询任务的时间成本作为所述行查询任务的查询成本;
第二获取子模块,用于根据列查询任务中所需执行的所有操作中属于每一操作类型的操作的个数以及所述每一操作类型对应的预置时间开销获取所述列查询任务的时间成本,并将所述列查询任务的时间成本作为所述列查询任务的查询成本。
14.根据权利要求12所述的装置,其特征在于,所述获取模块包括:
第三获取子模块,用于根据所述行查询任务中所需调用的所有线程中属于每一线程类型的线程的个数以及所述每一线程类型对应的预置***开销获取所述行查询任务的执行成本,并将所述行查询任务的执行成本作为所述行查询任务的查询成本;
第四获取子模块,用于根据所述列查询任务中所需调用的所有线程中属于每一线程类型的线程的个数以及所述每一线程类型对应的预置***开销获取所述列查询任务的执行成本,并将所述列查询任务的执行成本作为所述列查询任务的查询成本。
15.根据权利要求11所述的装置,其特征在于,所述判断单元包括:
第二判断模块,用于在所述预设查询条件中包括的所述数据表中的属性的个数大于第一阈值时,判断出所述查询对象为所述行存储文件;在所述预设查询条件中包括的所述数据表中的属性的个数小于第二阈值时,判断出所述查询对象为所述列存储文件。
16.根据权利要求11至15中任一项所述的装置,其特征在于,所述行存储文件和/或所述列存储文件被划分为多个数据块,其中,所述多个数据块存储在不同的数据节点上,所述数据节点中的每一个存有一个或多个所述数据块,其中,所述查询单元包括:
查找模块,用于在预存映射表中查找满足所述预设查询条件的数据块以及满足所述预设查询条件的数据块所在的数据节点;
访问模块,用于访问查找出的所述数据节点,并在查找出的所述数据块中查询所述目标数据记录。
17.根据权利要求11至15中任一项所述的装置,其特征在于,还包括:
第一恢复单元,用于在接收到所述行存储文件的第一报错信息时,判断是否存在所述行存储文件的备份文件,若不存在,则根据所述列存储文件对所述行存储文件进行恢复操作;和/或,
第二恢复单元,用于在接收到所述列存储文件的第二报错信息时,判断是否存在所述列存储文件的备份文件,若不存在,则根据所述行存储文件对所述列存储文件进行恢复操作。
18.根据权利要求17所述的装置,其特征在于,
所述第一恢复单元包括:第一恢复模块,用于按照所述行存储文件中所述第一报错信息所指示的出错行数据块的存储格式从所述列存储文件中获取与所述出错行数据块对应的正常行数据块,并在所述行存储文件中将所述出错行数据块替换为获取到的所述正常行数据块;
所述第二恢复单元包括:第二恢复模块,用于按照所述列存储文件中所述第二报错信息所指示的出错列数据块的存储格式从所述行存储文件中获取与所述出错列数据块对应的正常列数据形成的数据块,并在所述列存储文件中将所述出错列数据块替换为获取到的所述正常列数据形成的数据块。
19.根据权利要求17所述的装置,其特征在于,
所述第一恢复单元包括:第三恢复模块,用于在接收到所述第一报错信息时,若判断出存在所述行存储文件的备份文件,则从所述行存储文件的备份文件中获取与所述行存储文件中所述第一报错信息所指示的出错行数据块对应的正常行数据块,并在所述行存储文件中将所述出错行数据块替换为获取到的所述正常行数据块;
所述第二恢复单元包括:第四恢复模块,用于在接收到所述第二报错信息时,若判断出存在所述列存储文件的备份文件,则从所述列存储文件的备份文件中获取与所述列存储文件中所述第二报错信息所指示的出错列数据块对应的正常列数据形成的数据块,并在所述列存储文件中将所述出错列数据块替换为获取到的所述正常列数据形成的数据块。
20.根据权利要求11至15中任一项所述的装置,其特征在于,还包括:
接收单元,用于在所述获取用于在数据表中查询满足预设查询条件的目标数据记录的查询指令之前,接收向所述数据表中导入所述数据记录的导入指令;
导入单元,用于根据按行存储格式将所述数据记录导入用于存储所述数据表的所述行存储文件,并根据按列存储格式或按列组存储格式将所述数据记录导入用于存储所述数据表的所述列存储文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310389717.5A CN104424287B (zh) | 2013-08-30 | 2013-08-30 | 数据查询方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310389717.5A CN104424287B (zh) | 2013-08-30 | 2013-08-30 | 数据查询方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104424287A CN104424287A (zh) | 2015-03-18 |
CN104424287B true CN104424287B (zh) | 2019-06-07 |
Family
ID=52973267
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310389717.5A Active CN104424287B (zh) | 2013-08-30 | 2013-08-30 | 数据查询方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104424287B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106383826A (zh) * | 2015-07-29 | 2017-02-08 | 阿里巴巴集团控股有限公司 | 数据库查询方法和装置 |
CN106528280B (zh) * | 2015-09-15 | 2019-10-29 | 阿里巴巴集团控股有限公司 | 一种任务分配方法和*** |
CN107391506A (zh) * | 2016-05-16 | 2017-11-24 | 华为软件技术有限公司 | 用于查询数据的方法和装置 |
CN107092624B (zh) * | 2016-12-28 | 2022-08-30 | 北京星选科技有限公司 | 数据存储方法、装置及*** |
CN106844541B (zh) * | 2016-12-30 | 2020-05-29 | 晶赞广告(上海)有限公司 | 一种联机分析处理方法及装置 |
CN110196847A (zh) * | 2018-08-16 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 数据处理方法和装置、存储介质及电子装置 |
CN111400427A (zh) * | 2019-01-02 | 2020-07-10 | 阿里巴巴集团控股有限公司 | 数据存储、查询方法、装置和计算设备 |
CN111177700A (zh) * | 2019-12-31 | 2020-05-19 | 北京明略软件***有限公司 | 行级权限的控制方法及装置 |
CN111625696B (zh) * | 2020-07-28 | 2021-01-29 | 北京升鑫网络科技有限公司 | 多源数据分析引擎的分布式调度方法、计算节点及*** |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495905A (zh) * | 2011-12-23 | 2012-06-13 | 天津神舟通用数据技术有限公司 | 一种基于行存数据库引擎的列存方法 |
CN102682108A (zh) * | 2012-05-08 | 2012-09-19 | 同方光盘股份有限公司 | 一种行列混合的数据库存储方法 |
CN102737132A (zh) * | 2012-06-25 | 2012-10-17 | 天津神舟通用数据技术有限公司 | 基于数据库行列混合存储的多规则复合压缩方法 |
CN103177058A (zh) * | 2011-12-22 | 2013-06-26 | Sap股份公司 | 存储为行存储和列存储二者的混合数据库表 |
CN103177056A (zh) * | 2011-12-22 | 2013-06-26 | Sap股份公司 | 存储为行存储和列存储二者的混合数据库表 |
CN103177055A (zh) * | 2011-12-22 | 2013-06-26 | Sap股份公司 | 存储为行存储和列存储二者的混合数据库表 |
-
2013
- 2013-08-30 CN CN201310389717.5A patent/CN104424287B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103177058A (zh) * | 2011-12-22 | 2013-06-26 | Sap股份公司 | 存储为行存储和列存储二者的混合数据库表 |
CN103177056A (zh) * | 2011-12-22 | 2013-06-26 | Sap股份公司 | 存储为行存储和列存储二者的混合数据库表 |
CN103177055A (zh) * | 2011-12-22 | 2013-06-26 | Sap股份公司 | 存储为行存储和列存储二者的混合数据库表 |
CN102495905A (zh) * | 2011-12-23 | 2012-06-13 | 天津神舟通用数据技术有限公司 | 一种基于行存数据库引擎的列存方法 |
CN102682108A (zh) * | 2012-05-08 | 2012-09-19 | 同方光盘股份有限公司 | 一种行列混合的数据库存储方法 |
CN102737132A (zh) * | 2012-06-25 | 2012-10-17 | 天津神舟通用数据技术有限公司 | 基于数据库行列混合存储的多规则复合压缩方法 |
Non-Patent Citations (1)
Title |
---|
行列混合存储数据库***的研究;孙林超,陈群,肖玉泽,白松;《计算机应用研究》;20130228(第2013年第2期);全文 |
Also Published As
Publication number | Publication date |
---|---|
CN104424287A (zh) | 2015-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104424287B (zh) | 数据查询方法和装置 | |
US11288282B2 (en) | Distributed database systems and methods with pluggable storage engines | |
US9489233B1 (en) | Parallel modeling and execution framework for distributed computation and file system access | |
US9256665B2 (en) | Creation of inverted index system, and data processing method and apparatus | |
CN102708165B (zh) | 分布式文件***中的文件处理方法及装置 | |
CN106446168B (zh) | 一种面向分布式数据仓库的加载客户端实现方法 | |
CN104035836A (zh) | 集群检索平台中的自动容灾恢复方法及*** | |
CN110188307A (zh) | 一种多租户数据隔离方法、服务器及*** | |
CN110427364A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN108616581B (zh) | 基于olap/oltp混合应用的数据存储***及方法 | |
CN110647512A (zh) | 一种数据存储和分析方法、装置、设备和可读介质 | |
CN105869057A (zh) | 评论存储设备、评论读取、评论写入方法及装置 | |
CN112100160B (zh) | 一种基于Elastic Search的双活实时数据仓库建设方法 | |
US20150120697A1 (en) | System and method for analysis of a database proxy | |
CN109271545A (zh) | 一种特征检索方法及装置、存储介质和计算机设备 | |
CN104426968B (zh) | 数据管理方法和装置 | |
CN111026709B (zh) | 基于集群访问的数据处理方法及装置 | |
CN114490527A (zh) | 元数据检索方法、***、终端及存储介质 | |
CN113568895A (zh) | 数据库的数据处理方法、装置、电子设备 | |
CN107491463A (zh) | 数据查询的优化方法和*** | |
CN110119396A (zh) | 数据管理方法及相关产品 | |
CN107180034A (zh) | MySQL数据库的集群*** | |
CN108804502A (zh) | 大数据查询***、方法、计算机设备及存储介质 | |
CN103389986B (zh) | 存储、查找会话Session信息的方法、装置及*** | |
CN112181994B (zh) | 运维大数据的分布式内存数据库的刷新方法、装置、介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |