CN103678303A - 用于数据库分组集查询的方法和系统 - Google Patents
用于数据库分组集查询的方法和系统 Download PDFInfo
- Publication number
- CN103678303A CN103678303A CN201210317328.7A CN201210317328A CN103678303A CN 103678303 A CN103678303 A CN 103678303A CN 201210317328 A CN201210317328 A CN 201210317328A CN 103678303 A CN103678303 A CN 103678303A
- Authority
- CN
- China
- Prior art keywords
- grouping
- parallel subtasks
- packets
- subtasks
- subtask
- 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.)
- Pending
Links
Images
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/248—Presentation of query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库技术领域。更具体地,本发明涉及通过逻辑关系分配分组来执行数据库分组集查询的方法和系统。更具体地,本发明涉及一种用于数据库分组集查询的方法,包括:接收分组集查询请求以及用于处理所述分组集查询请求的多个并行子任务的数目,所述分组集包括分组;根据所述分组间的逻辑关系以及所述多个并行子任务的数目,为所述多个并行子任务中的至少一个分配所述分组中的一个或多个;以及执行所述并行子任务以生成分组集查询结果。根据本发明所提供的方法或系统,可以最大程度地利用各个分组间的逻辑关系来分配各个并行子任务所执行的分组,从而减少对各个并行子任务的合并操作。
Description
技术领域
本发明涉及数据库技术领域。更具体地,本发明涉及通过逻辑关系分配分组来执行数据库分组集查询的方法和系统。
背景技术
目前,在数据库技术领域中,SQL(结构化查询语言)的分组集查询语句(Grouping Set),以及由其派生的立方体分组查询(cube),上卷分组查询(roll up)将传统的分组查询(Group By)拓展到多个维度的分组查询,广泛地应用于OLAP数据仓库系统。分组集查询(GroupingSet)语句是对Group By语句的进一步扩展。可以使用分组集查询在同一个查询中定义多个分组。一个简单的分组集查询语句例如GroupingSets((C1,C2),(C1,C3)),其中(C1,C2)和(C1,C3)分别是两个分组(Group),进一步其中的C1,C2,C3均为数据库表中数据列的名称。分组集查询由于涉及多个分组,进而涉及多个数据列的各种可能取值的组合,因此通常会耗费更多的执行时间。同时,并行化处理(Parallelism)也广泛地应用于SQL语句的处理,以提升执行效率。例如,现在可以将一条SQL语句分解为多个子任务(Child Task),每个子任务同时执行这条SQL语句的一部分工作任务,最终再把所有子任务的执行结果进行合并,以生成最终的结果。因此,可以利用分解子任务的方式来并行地处理一条分组集查询语句。但是其中存在的问题是,如何进行子任务的划分以高效、快速地执行分组集查询语句?
现有技术中存在一种解决方案:按照数据来划分多个子任务,以并行地执行分组集查询语句。也就是说,以上段中提到的分组集查询语句为例Grouping Sets((C1,C2),(C1,C3)),假设执行这个分组集查询语句涉及到100万条数据行,并且假设现在确定要分成4个子任务并行处理,那么按照数据总量将100万条数据4等分,每个子任务处理25万条数据行。但是,每个子任务虽然只处理25万条数据行,每个子任务需要针对这25万条数据行处理整条分组集查询语句。显然,这样会导致需要将每个子任务的执行结果进行合并运算(Merge),才能获得针对全部100万条数据行的执行整条分组集查询语句的最终结果。这样的合并操作运算量极其巨大,因为其中涉及到大量的数据去重(可能取值的组合存在大量重复)、重新排序等复杂操作。
发明内容
考虑到上述存在的问题,本发明的目的之一在于提供一种在并行化处理分组集查询语句的情况下,减少并行子任务的合并操作的方法和系统。本发明的又一目的在于提供一种利用分组集中的各个分组之间的逻辑关系来分配并行子任务,而非按照数据来分配子任务的方法和系统。上述各目的明显具有独立存在之意义,即使可能或已经发生,本发明并非试图同时解决所有上述目的。
根据本发明的一个方面,提供了一种用于数据库分组集查询的方法,包括:接收分组集查询请求以及用于处理所述分组集查询请求的多个并行子任务的数目,所述分组集包括分组;根据所述分组间的逻辑关系以及所述多个并行子任务的数目,为所述多个并行子任务中的至少一个分配所述分组中的一个或多个;以及执行所述并行子任务以生成分组集查询结果。
根据本发明的另一方面,提供了一种用于数据库分组集查询的系统,包括:接收装置,被配置为接收分组集查询请求以及用于处理所述分组集查询请求的多个并行子任务的数目,所述分组集包括分组;分配装置,被配置为根据所述分组间的逻辑关系以及所述多个并行子任务的数目,为所述多个并行子任务中的至少一个分配所述分组中的一个或多个;以及执行装置,被配置为执行所述并行子任务以生成分组集查询结果。。
根据本发明所提供的方法或系统,可以最大程度地利用各个分组间的逻辑关系来分配各个并行子任务所执行的分组,从而减少对各个并行子任务的合并操作。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图;
图2示出了根据本发明一实施例的用于数据库分组集查询的方法的流程图;
图3示出了根据本发明另一实施例的用于数据库分组集查询的方法的流程图;
图4示出了根据本发明又一实施例的用于数据库分组集查询的方法的流程图;
图5示出了根据本发明再一实施例的用于数据库分组集查询的方法的流程图;
图6示出了根据本发明一实施例的用于数据库分组集查询的系统的框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品(manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
下面参看图1。图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器1 2也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
图2示出了根据本发明一实施例的用于数据库分组集查询的方法的流程图。图2所示的方法从步骤201开始。在步骤201中,接收分组集查询请求以及用于处理所述分组集查询请求的多个并行子任务的数目。关于分组集查询请求(Grouping Set)的含义和示例在上文中已有介绍。简单地理解,一个分组集查询请求中包含多个分组查询,其中每个分组查询均可表示为类似(A,B)或者Group By(A,B)的形式,其中A和B表示数据列,分组查询Group By(A,B)的执行结果就是按照数据列A和B的不同的可能取值组合查询数据,并将查询结果以数据列A和B为基准进行排序。以表1(学生信息表)为例,假设分组查询语句为GroupBy(Gender,Age),由于Gender和Age这两个数据列有两种不同的可能取值组合,因此查询结果为表2所示。
No. | Gender | Age | Telephone |
1 | F | 21 | 1234 |
2 | M | 22 | 5678 |
3 | M | 22 | 5678 |
表1(学生信息表)
Gender | Age |
F | 21 |
M | 22 |
表2(分组查询结果表)
上面给出了一个简单的分组查询(Group By)的例子,分组集查询即为包含多个分组查询的查询请求。例如针对表1的一个分组集查询Grouping Set((Gender,Age),(No.,Gender,Age),(Age,Telephone)),其中包含了三个分组查询请求。具体的查询结果在此不再赘述。根据本发明的一个实施例,分组集查询请求是SQL(结构化查询语言)语句。
在并行化处理SQL查询语句的过程中,存在多个并行化的子任务(Child Task),或者也可称作并行子线程。并行子任务的数目是指定好的,例如可以通过SQL语句SET CURRENT DEGREE来指定。再例如,也可以通过基于Core Workload的动态分配的技术来指定并行子任务的数目。但是步骤201中接收已经确定好的并行子任务的数目,无论采用何种手段确定或指定并行子任务的数目,与本发明没有关系。
接下来,图2所示的方法进行至步骤202。在步骤202中,根据所述分组间的逻辑关系以及所述多个并行子任务的数目,为所述多个并行子任务中的一个或多个分配所述分组中的一个或多个。这里,逻辑关系指的是一个分组集查询请求中包含的多个分组间彼此的逻辑关系。进一步地,逻辑关系指的是可以用于加快并行化分组集查询的速度或者均衡并行化子任务负载的关系。无论是加快并行化分组集查询的速度还是均衡并行化子任务的负载,均可以达到提升分组集查询的效率的目的。之所以按照分组间的逻辑关系为并行子任务分配分组,而不是按照数据量为并行子任务分配分组,是因为在按照分组间的逻辑关系进行分配的情况下,每个并行子任务均针对全部的数据记录执行所分配的分组,因此可以避免每个子任执行完毕后还需要执行极其耗时的合并操作(包括数据去重等)。例如,针对上文中提到的例子,假设并行子任务的数目为2,那么按照传统现有技术中的做法,将表1中的三条数据记录的前两条分配给子任务1,将表1中的第三条数据记录分配给子任务2,执行的过程中,子任务1和子任务2针对其所分配的数据记录执行整条分组集查询语句。子任务1的执行结果是{(F,21);(M,22)},而子任务2的执行结果是{(M,22)},可见在合并子任务1的结果和子任务2的结果时需要将{(M,22)}去重。然而,如果按照本发明的构思,以分组为单位进行子任务的分配的话,那么显然无需进行上述去重操作。本领域技术人员理解,上面只给出简单的表1中的例子(只有一个分组),只是为了简洁地说明本发明的构思。如果在分组集查询请求中包含大量分组的情况下,按照本发明构思以分组为单位进行子任务分配的技术效果将更加突出和明显。
根据本发明的一个实施例,分组间的逻辑关系包括分组间的父子关系。如果某分组中的部分或全部数据列为另一分组中的数据列的子集,则认为这两个分组间具有父子关系。例如,分组(Gender,Age)为分组(No.,Gender,Age)的子集,所以分组(Gender,Age)与分组(No.,Gender,Age)具有父子关系,可以认为分组(Gender,Age)是子分组,而分组(No.,Gender,Age)是父分组。根据本发明的一个实施例,如果一个分组中的数据列是另一个分组中的数据列的全子集,则认为这两个分组间具有父子关系。之所以按照父子关系将分组集查询请求中的分组分配至并行子任务,是因为并行子任务可以借助子分组的执行结果快速执行父分组。例如,假设将分组(Gender,Age)与分组(No.,Gender,Age)分配至子任务1,那么一旦子任务1对分组(Gender,Age)执行完毕,子任务1在执行分组(No.,Gender,Age)时就可以直接利用对分组(Gender,Age)执行的结果,而无需重新扫描所有数据记录,可以提升数据查询的效率。
根据本发明的另一实施例,所述分组间的逻辑关系指分组的可能的取值组合的数量关系。根据本发明一个实施例,其中可能的取值组合的数量为基于历史数据统计而得到的特定分组中所包含的不同数据列值的可能取值的组合数。可能的取值组合数也被称作基数(Cardinality)。以表1为例,分组(Gender,Age)的可能取值的组合数为2,而分组(No.,Gender,Age)的可能取值的组合数为3。需要指出的是,由于数据库中的数据会不断更新,因此基于历史数据统计而得到的可能取值组合的数目可能不是完全准确的。之所以按照分组的可能取值的组合的数量关系将分组集查询请求中的分组分配至并行子任务,是因为如果各个并行子任务的工作负载比较均衡的话,有利于提高分组集查询的整体效率,而避免出现多个子任务已经执行完毕在闲置状态下,等待其它未执行完毕的子任务执行结果的情况。
需要强调的是,分组的可能的取值组合的数量关系与现有技术中根据数据进行子任务分配是完全不同的。现有技术中根据数据进行子任务分配是指将数据总量进行分配,例如数据库中存储了100万条数据,有4个并行子任务,那么现有技术将100万条数据总量分为4份,每个并行子任务处理25万条数据。现有技术无论对于何种具体的分组集查询请求均采用此等按照数据总量进行分配的方式,分配后的每个并行子任务仍然处理所有分组,但是只处理部分数据量。而本发明中的分组的可能的取值组合的数量关系则是针对每个分组而言的,与数据总量没有关系,因此本发明中按照分组的可能的取值组合的数量关系进行分配是以分组为单位进行分配(分组并非是对数据总量的分组),分配后的每个子任务处理所有的数据量,但是可能只处理(或者优先处理)部分分组。
根据本发明的又一实施例,分组间的逻辑关系包括分组间的父子关系以及分组的可能取值组合的数量关系。根据此实施例,可以同时采用两种关系作为分配子任务所依据的逻辑关系。根据本发明的一个实施例,优先根据父子关系将分组分配至子任务,然后对剩余的分组依据可能取值组合的数量关系进行分配。根据本发明的另一实施例,优先根据可能取值组合的数量关系进行分配,然后对剩余的分组依据父子关系进行分配。
本领域技术人员应当理解,虽然上面给出了一些关于分组间的逻辑关系的具体实施例,但是这并非对“逻辑关系”的具体限制。任何存在于各个分组之间的各种关系,只要能够明确地用于以分组为单位,对分组集查询请求的并行子任务进行分配,均落入本发明的构思,并可实现本发明的发明目的。例如,可以简单地将一个分组集查询语句中的每个分组分配至一个子任务中(假设并行子任务的数目与分组的数量刚好相等),在此实施例下,“逻辑关系”即为简单的分组关系。
最后,在步骤203中,执行并行子任务以生成分组集查询结果。根据本发明的一个实施例,如果各个子任务中被分配的分组没有重复(一个分组只在一个子任务中出现),则直接将各个子任务的执行结果组合成分组集查询的最终结果。所述组合不涉及合并操作。根据本发明的另一实施例,如果各个子任务中被分配的分组有重复,则将重复被分配到多个子任务中的分组在各个子任务中的执行结果进行合并操作,然后将各个子任务的执行结果组合成分组集查询的最终结果。
根据本发明的一个实施例,执行各个子任务时按照指定的优先顺序执行分组,当应被优先执行的分组被执行完毕时,才执行各个子任务中所分配的其它分组。根据本发明的另一实施例,各个子任务中没有应当被优先执行的分组。关于子任务中被分配的分组的优先执行顺序的内容,将在下文中结合图3-5进一步描述。
图3示出了根据本发明另一实施例的用于数据库分组集查询的方法的流程图。步骤301对应于步骤201,不再赘述。在步骤302中,识别分组间的父子关系。关于父子关系的定义和示例已在上文进行详细描述。本领域技术人员应当理解,基于SQL语句识别分组集查询语句中间包含的分组间的父子关系可以利用现有技术实现。
接下来,图3所示的方法进行至步骤303,根据并行子任务的数目,将彼此间具有特定父子关系的分组分配至同一并行子任务中。仍以表1为例,假设在步骤301中接收到分组集查询语句Grouping Set{(Gender,Age),(No.,Gender,Age),(No.,Telephone)},并且假设在步骤301中接收到并行子任务的数目为2,那么如上所述将具有父子关系的分组(Gender,Age)与分组(No.,Gender,Age)分配至子任务1,而将分组(No.,Telephone)分配至子任务2。这里分组(Gender,Age)与分组(No.,Gender,Age)即为具有特定父子关系的分组,将它们均分配至同一并行子任务——子任务1中。
需要指出的是,虽然步骤302和303提供了关于根据父子关系进行子任务分配的一种实施例,但是本领域技术人员应当理解,根据父子关系以及所述多个并行子任务的数目,为所述多个并行子任务中的至少一个分配所述分组中的一个或多个的具体实施方式并不限于此,无论采用何种具体方式,只要在分配子任务时考虑了分组间的父子关系即落入本发明构思。
接下来,在步骤3 04中,将未被根据分组间的逻辑关系分配至某特定并行子任务的分组分配至该特定并行子任务中,使得每个并行子任务中均包含所述分组集中的全部分组。为了更好地理解步骤304,继续引用上面的例子。根据步骤303中的分配结果,分组(Gender,Age)与分组(No.,Gender,Age)被分配至子任务1中,分组(No.,Telephone)被分配至子任务2中。由于存在这样的可能:子任务1很快执行完毕,然后一直等待子任务2的执行结束,这样导致子任务1的线程存在一定程度的闲置时间。为了更好地利用所有的处理资源,使得子任务1在执行完被分配的具有父子关系的分组后,如果还有能力,就继续帮助子任务2执行一部分任务。也就是说,把分组(No.,Telephone)——未被根据分组间的逻辑关系分配至特定并行子任务1中的分组——也分配至特定的子任务1中,使得子任务1中包含分组集中的全部分组。需要强调的是,虽然子任务1中包含全部分组,但是其优先执行分组(Gender,Age)与分组(No.,Gender,Age),只有当这两个具有父子关系的分组执行完毕后,子任务1才执行分组(No.,Telephone)。同理,也可以将分组(Gender,Age)与分组(No.,Gender,Age)分配至子任务2中,只有当子任务2优先执行完毕分组(No.,Telephone)后,才执行分组(Gender,Age)与分组(No.,Gender,Age)。需要指出的是,本领域技术人员应当理解,设定优先执行的分组可以通过为每个子任务添加状态标记来实现。例如,子任务1对应于分组(Gender,Age)与(No.,Gender,Age)的初始状态标记设置为“1”,对应于分组(No.,Telephone)的状态标记设置为“0”。“1”表示有任务,“0”表示无任务。一旦子任务1执行完毕分组(Gender,Age)与(No.,Gender,Age),则子任务1对应于分组(Gender,Age)与(No.,Gender,Age)的初始状态标记设置为“1”被更新为“0”,而对应于分组(No.,Telephone)的状态标记设置为“1”,从而子任务1可以继续执行分组(No.,Telephone)。本领域技术人员应当理解,如何设定优先级的状态标识或参数依赖于不同的数据库产品,但它们都是容易实现的,因为现有的数据库产品均允许设定多种不同的参数来控制查询结果的输出。
需要强调的是,步骤304显然不是实现本发明的目的所必需的步骤。即使子任务1中只包含分组(Gender,Age)与分组(No.,Gender,Age),子任务2中只包含分组(No.,Telephone),虽然可能出现子任务1或者子任务2的线程资源没有得到充分利用的情况,仍然可以实现本发明的发明目的,解决本发明所要解决的技术问题。如果在步骤303完成后不进行步骤304的操作,那么每个子任务中就不存在优先执行的问题。只有在进行了步骤304的操作的情况下,才需要设置各个子任务优先执行依据分组间的逻辑关系而分配的分组。
接下来,图3所示的方法进行至步骤305。可以理解,步骤305-307对应于图2中的步骤203。在步骤305中,执行各个子任务中所分配的应被优先执行的分组。在步骤306中,响应于应被优先执行的分组被执行完毕,执行各个子任务中所分配的其它分组。在步骤307中,组合执行各个子任务所产生的结果,以生成分组集查询结果。应当理解,如果不执行步骤304的话,那么在步骤305中只需执行各个子任务(无需考虑优先执行的分组问题),从而可以跳过步骤306,直接进行至步骤307组合执行各个子任务所产生的结果,以生成分组集查询结果。如在步骤203的文字描述中所指出的,根据本发明的另一实施例,如果各个子任务中被分配的分组有重复(执行了步骤304的情况),则将重复被分配到多个子任务中的分组在各个子任务中的执行结果进行合并操作,然后将各个子任务的执行结果组合成分组集查询的最终结果。本领域技术人员应当理解,虽然在执行步骤304的前提下,最后在步骤203或307中仍然需要进行一些合并操作,但是合并操作的运算量已经远远小于传统现有技术按照数据进行子任务分割时所需的合并操作的运算量。
图4示出了根据本发明又一实施例的用于数据库分组集查询的方法的流程图。与图3的不同之处在于,图4示出的实施例中,同时采用了两种逻辑关系——父子关系、分组的可能取值组合的数量关系。步骤401对应于图2中的步骤201或图3中的步骤301,步骤402对应于图3中的步骤302-303,不再赘述。
在步骤403中,获取分组的可能取值的组合数。根据本发明的一个实施例,可能的取值组合的数量为基于历史数据统计而得到的特定分组中所包含的不同数据列值的可能取值的组合数。需要指出的是,由于数据可能不断更新,因此基于历史信息而获取的可能取值的组合数可能不是完全准确(历史统计信息的更新滞后于实际数据的更新),但是仍然不影响整体上本发明目的的实现。
接下来在步骤404中,根据所述分组的可能取值的组合数以及用于处理所述分组集查询请求的并行子任务的数目,均衡地将所述分组中的一个或多个分配至相应的并行子任务中,使得各个并行子任务中被分配的分组的可能取值的总数平衡。仍以表1为例,假设在步骤401中接收到的分组集查询语句为Grouping Set{(Gender,Age),(No.,Gender,Age),(No.,Telephone),(Gender,Telephone),(Age,Telephone)},并且假设在步骤401中接收到并行子任务的数目为2。首先,识别出分组(Gender,Age)和(No.,Gender,Age)具有父子关系,分配至子任务1中。然后从历史统计信息中获取分组(No.,Telephone)的可能取值的组合数是3,分组(Gender,Telephone)的可能取值的组合数是2,分组(Age,Telephone)的可能取值的组合数也是2。那么在步骤404中,将分组(No.,Telephone)分配至子任务1中,将分组(Gender,Telephone)和(Age,Telephone)分配至子任务2中,使得两个并行子任务中被分配的分组的可能取值的总数平衡。可以看出,如果将分组(No.,Telephone)和(Age,Telephone)均分配至子任务1中,则子任务1既要处理按照父子关系分配的两个分组,还要处理另外两个其它分组,而子任务2只要处理分组(Gender,Telephone),从而导致子任务2执行完毕后可能需要等待子任务1继续执行很久才能进行最终结果的组合。
根据本发明的一个实施例,在步骤404中,还可以结合考虑步骤402中已经按父子关系分配的结果。例如,如果已经将具有父子关系两个分组分配至子任务1,那么也可以在步骤404中仅将(Age,Telephone)分配至子任务1,而将分组(Gender,Telephone)和(No.,Telephone)均分配至子任务2中。本领域技术人员应当理解,可以设定不同的规则进行具体的分配,只要在分配过程中考虑到分组的可能取值组合的数量关系,即落入本发明的构思。
根据本发明的一个实施例,可以将依据父子关系进行分配的分组设定为应当被优先执行的分组,也可以将依据父子关系进行分配的分组和依据可能取值组合的数量关系进行分配的分组均设定为应当被优先执行的分组,还可以将依据父子关系进行分配的分组和依据可能取值组合的数量关系进行分配的分组设定为优先执行级别不同的分组。
接下来图4所示的方法进行至步骤405,将未被根据分组间的逻辑关系分配至某特定并行子任务的分组分配至该特定并行子任务中,使得每个并行子任务中均包含所述分组集中的全部分组。步骤405可以理解为对应于图3中的步骤304,不再具体描述。步骤405同样不是必需的。需要强调的一点是,步骤405中“未被根据分组间的逻辑关系”中逻辑关系既包括步骤402中所依据的父子关系,也包括步骤403-404中所依据的分组的可能取值的组合数的数量关系。
接下来图4所示的方法进行至步骤406,可以理解步骤406-408对应于图3中的步骤305-307,也对应于图2中的步骤203。同样地,如果步骤405没有执行的话,那么步骤406中可能只需要也简单执行各个子任务即可,不存在优先执行的问题,也可能仍然需要按照优先级顺序执行各个分组,这是因为可能根据上述提及的实施例为步骤402中分配的分组和步骤404中分配的分组设定了不同的优先级别,因此在执行步骤406中也需要按照优先级别的高低依次执行子任务中的分组。
需要指出的是,在图4示出的实施例中,给出的所依据的逻辑关系的例子为“父子关系”和“可能取值的组合数的数量关系”。本领域技术人员应当理解,完全可以依据其它各种逻辑关系进行多层次或单层次的对分组进行的分配,例如,按照分组中所包含的数据列数目的关系进行分配。
图5示出了根据本发明再一实施例的用于数据库分组集查询的方法的流程图。图5示出的实施例与图3和图4的不同之处在于,图5的实施例中仅考虑了分组的可能取值的组合数这一分组间的逻辑关系。步骤501对应于图4中的步骤401、图3中的步骤301以及图2中的步骤201,步骤502-507可以理解为分别对应于图4中的步骤402-408,具体内容不再赘述,唯一的区别在于图4中的步骤402-408是在先依据父子关系这一种逻辑关系进行分配之后才进行的,而步骤502-507是在接收到分组集查询请求和并行子任务的数目后直接进行的。
需要指出的是,在图2、3、4、5提供的本发明构思下的各个实施例中,无论基于何种(一种或多种)逻辑关系对分组集查询请求中的分组进行了分配,在各个并行子任务内部,仍然可以依据分组间的父子关系来提高处理效率。例如,即使在将分组分配至各个子任务的过程中,不采用父子关系这种逻辑关系进行分配,而仅采用分组的可能取值组合的数量关系进行分配,但是也正好将分组(Gender,Age)与分组(No.,Gender,Age)分配至子任务1,那么一旦子任务1对分组(Gender,Age)执行完毕,仍然可以在执行分组(No.,Gender,Age)直接利用对分组(Gender,Age)执行的结果,而无需重新扫描所有数据记录,可以提升数据查询的效率。
图6示出了根据本发明一实施例的用于数据库分组集查询的系统的框图。图6所示的系统在整体上由系统600表示,具体地,系统600包括接收装置601,被配置为收分组集查询请求以及用于处理所述分组集查询请求的并行子任务的数目,所述分组集包括分组;分配装置602,被配置为根据所述分组间的逻辑关系以及所述并行子任务的数目,为所述并行子任务分配所述分组中的一个或多个;以及执行装置603,被配置为执行所述并行子任务以生成分组集查询结果。可以理解,系统600中的装置601-603分别对应于图2所示的方法中的201-203,在此不再赘述。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (20)
1.一种用于数据库分组集查询的方法,包括:
接收分组集查询请求以及用于处理所述分组集查询请求的多个并行子任务的数目,所述分组集包括分组;
根据所述分组间的逻辑关系以及所述多个并行子任务的数目,为所述多个并行子任务中的至少一个分配所述分组中的一个或多个;以及
执行所述并行子任务以生成分组集查询结果。
2.如权利要求1所述的方法,所述分组间的逻辑关系包括所述分组间的父子关系。
3.如权利要求1所述的方法,所述分组间的逻辑关系包括所述分组的可能的取值组合的数量关系。
4.如权利要求1所述的方法,所述分组间的逻辑关系包括所述分组间的父子关系以及所述分组的可能取值组合的数量关系。
5.如权利要求2或4所述的方法,其中根据所述分组间的逻辑关系以及所述并行子任务的数目,为所述并行子任务分配所述分组中的一个或多个包括:
识别所述分组间的父子关系;以及
根据所述并行子任务的数目,将彼此间具有特定父子关系的分组分配至同一并行子任务中,其中所分配的彼此间具有特定父子关系的分组由所述同一并行子任务优先执行。
6.如权利要求3或4所述的方法,其中根据所述分组间的逻辑关系以及所述并行子任务的数目,为所述并行子任务分配所述分组中的一个或多个包括:
获取所述分组的可能取值的组合数;以及
根据所述分组的可能取值的组合数以及用于处理所述分组集查询请求的并行子任务的数目,均衡地将所述分组中的一个或多个分配至相应的并行子任务中,使得各个并行子任务中被分配的分组的可能取值的总数平衡,其中所分配的分组由被分配至的相应的并行子任务优先执行。
7.如权利要求2所述的方法,其中根据所述分组间的逻辑关系以及所述并行子任务的数目,为所述并行子任务分配所述分组中的一个或多个进一步包括:
获取分组集中除了所述彼此间具有特定父子关系的分组之外的其它分组的可能取值的组合数;以及
根据所述其它分组的可能取值的组合数以及用于处理所述分组集查询请求的并行子任务的数目,均衡地将所述其它分组中的一个或多个分配至相应的并行子任务中,使得各个并行子任务中被分配的其它分组的可能取值的总数平衡。
8.如权利要求5至7任一所述的方法,其中根据所述分组间的逻辑关系以及所述并行子任务的数目,为所述并行子任务分配所述分组中的一个或多个进一步包括:
将未被根据分组间的逻辑关系分配至某特定并行子任务的分组分配至该特定并行子任务中,使得每个并行子任务中均包含所述分组集中的全部分组。
9.如权利要求8所述的方法,其中执行所述并行子任务以生成分组集查询结果包括:
执行各个子任务中所分配的应被优先执行的分组;
响应于应被优先执行的分组被执行完毕,执行各个子任务中所分配的其它分组;以及
组合执行各个子任务所产生的子结果,以生成分组集查询结果。
10.如权利要求1至4任一所述的方法,其中执行所述并行子任务以生成分组集查询结果包括:
识别并行子任务中所分配的分组间的父子关系;
利用具有父子关系的分组中的子分组的执行结果,执行该子分组所对应的父分组。
11.一种用于数据库分组集查询的系统,包括:
接收装置,被配置为接收分组集查询请求以及用于处理所述分组集查询请求的多个并行子任务的数目,所述分组集包括分组;
分配装置,被配置为根据所述分组间的逻辑关系以及所述多个并行子任务的数目,为所述多个并行子任务中的至少一个分配所述分组中的一个或多个;以及
执行装置,被配置为执行所述并行子任务以生成分组集查询结果。
12.如权利要求11所述的系统,所述分组间的逻辑关系包括所述分组间的父子关系。
13.如权利要求11所述的系统,所述分组间的逻辑关系包括所述分组的可能的取值组合的数量关系。
14.如权利要求11所述的系统,所述分组间的逻辑关系包括所述分组间的父子关系以及所述分组的可能取值组合的数量关系。
15.如权利要求12或14所述的系统,其中分配装置被配置为:
识别所述分组间的父子关系;以及
根据所述并行子任务的数目,将彼此间具有特定父子关系的分组分配至同一并行子任务中,其中所分配的彼此间具有特定父子关系的分组由所述同一并行子任务优先执行。
16.如权利要求13或14所述的方法,其中分配装置被配置为:
获取所述分组的可能取值的组合数;以及
根据所述分组的可能取值的组合数以及用于处理所述分组集查询请求的并行子任务的数目,均衡地将所述分组中的一个或多个分配至相应的并行子任务中,使得各个并行子任务中被分配的分组的可能取值的总数平衡,其中所分配的分组由被分配至的相应的并行子任务优先执行。
17.如权利要求12所述的系统,其中分配装置被进一步配置为:
获取分组集中除了所述彼此间具有特定父子关系的分组之外的其它分组的可能取值的组合数;以及
根据所述其它分组的可能取值的组合数以及用于处理所述分组集查询请求的并行子任务的数目,均衡地将所述其它分组中的一个或多个分配至相应的并行子任务中,使得各个并行子任务中被分配的其它分组的可能取值的总数平衡。
18.如权利要求15至17任一所述的系统,其中分配装置被进一步配置为:
将未被根据分组间的逻辑关系分配至某特定并行子任务的分组分配至该特定并行子任务中,使得每个并行子任务中均包含所述分组集中的全部分组。
19.如权利要求18所述的系统,其中执行装置被配置为:
执行各个子任务中所分配的应被优先执行的分组;
响应于应被优先执行的分组被执行完毕,执行各个子任务中所分配的其它分组;以及
组合执行各个子任务所产生的子结果,以生成分组集查询结果。
20.如权利要求11至14任一所述的系统,其中执行装置被配置为:
识别并行子任务中所分配的分组间的父子关系;
利用具有父子关系的分组中的子分组的执行结果,执行该子分组所对应的父分组。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210317328.7A CN103678303A (zh) | 2012-08-31 | 2012-08-31 | 用于数据库分组集查询的方法和系统 |
US13/956,629 US10496659B2 (en) | 2012-08-31 | 2013-08-01 | Database grouping set query |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210317328.7A CN103678303A (zh) | 2012-08-31 | 2012-08-31 | 用于数据库分组集查询的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103678303A true CN103678303A (zh) | 2014-03-26 |
Family
ID=50188895
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210317328.7A Pending CN103678303A (zh) | 2012-08-31 | 2012-08-31 | 用于数据库分组集查询的方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10496659B2 (zh) |
CN (1) | CN103678303A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108172268A (zh) * | 2017-12-27 | 2018-06-15 | 苏州麦迪斯顿医疗科技股份有限公司 | 一种批量数据处理方法、装置、终端和存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105392028B (zh) * | 2015-10-12 | 2019-05-24 | 天脉聚源(北京)传媒科技有限公司 | 一种数据的传输方法及装置 |
US20180302368A1 (en) * | 2017-04-13 | 2018-10-18 | Microsoft Technology Licensing, Llc | Telephone number provisioning using location-based partition keys |
CN111221883B (zh) * | 2018-11-27 | 2024-04-26 | 浙江宇视科技有限公司 | 数据统计方法及系统 |
CN112748993A (zh) * | 2019-10-31 | 2021-05-04 | 北京国双科技有限公司 | 任务执行方法、装置、存储介质及电子设备 |
CN111913986B (zh) * | 2020-08-03 | 2024-04-16 | 支付宝(杭州)信息技术有限公司 | 一种查询优化方法及装置 |
US11775543B1 (en) * | 2022-04-19 | 2023-10-03 | Sap Se | Heapsort in a parallel processing framework |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020198872A1 (en) * | 2001-06-21 | 2002-12-26 | Sybase, Inc. | Database system providing optimization of group by operator over a union all |
US20050027690A1 (en) * | 2003-07-29 | 2005-02-03 | International Business Machines Corporation | Dynamic selection of optimal grouping sequence at runtime for grouping sets, rollup and cube operations in SQL query processing |
US20070022100A1 (en) * | 2005-07-22 | 2007-01-25 | Masaru Kitsuregawa | Database management system and method |
US20090319487A1 (en) * | 2008-06-24 | 2009-12-24 | Microsoft Corporation | Scalar representation for a logical group of columns in relational databases |
CN101620600A (zh) * | 2008-06-30 | 2010-01-06 | 上海全成通信技术有限公司 | 一种海量数据的处理方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6820262B1 (en) | 1999-07-22 | 2004-11-16 | Oracle International Corporation | Method for computing the degree of parallelism in a multi-user environment |
US6594651B2 (en) | 1999-12-22 | 2003-07-15 | Ncr Corporation | Method and apparatus for parallel execution of SQL-from within user defined functions |
US6775662B1 (en) | 2001-05-21 | 2004-08-10 | Oracle International Corporation | Group pruning from cube, rollup, and grouping sets |
US7340452B2 (en) * | 2003-12-16 | 2008-03-04 | Oracle International Corporation | Parallel single cursor model on multiple-server configurations |
US8201171B2 (en) * | 2007-06-27 | 2012-06-12 | Microsoft Corporation | Adjacent data parallel and streaming operator fusion |
US20110145220A1 (en) | 2009-12-10 | 2011-06-16 | Ramakumar Kosuru | System and method for executing a query |
-
2012
- 2012-08-31 CN CN201210317328.7A patent/CN103678303A/zh active Pending
-
2013
- 2013-08-01 US US13/956,629 patent/US10496659B2/en not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020198872A1 (en) * | 2001-06-21 | 2002-12-26 | Sybase, Inc. | Database system providing optimization of group by operator over a union all |
US20050027690A1 (en) * | 2003-07-29 | 2005-02-03 | International Business Machines Corporation | Dynamic selection of optimal grouping sequence at runtime for grouping sets, rollup and cube operations in SQL query processing |
US20070022100A1 (en) * | 2005-07-22 | 2007-01-25 | Masaru Kitsuregawa | Database management system and method |
US20090319487A1 (en) * | 2008-06-24 | 2009-12-24 | Microsoft Corporation | Scalar representation for a logical group of columns in relational databases |
CN101620600A (zh) * | 2008-06-30 | 2010-01-06 | 上海全成通信技术有限公司 | 一种海量数据的处理方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108172268A (zh) * | 2017-12-27 | 2018-06-15 | 苏州麦迪斯顿医疗科技股份有限公司 | 一种批量数据处理方法、装置、终端和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US10496659B2 (en) | 2019-12-03 |
US20140067794A1 (en) | 2014-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103678303A (zh) | 用于数据库分组集查询的方法和系统 | |
CN102819589B (zh) | 一种基于etl的数据优化方法及设备 | |
CN104252472B (zh) | 用于并行化数据处理的方法和装置 | |
US8595732B2 (en) | Reducing the response time of flexible highly data parallel task by assigning task sets using dynamic combined longest processing time scheme | |
US10565022B2 (en) | Systems for parallel processing of datasets with dynamic skew compensation | |
CN106897322A (zh) | 一种数据库和文件系统的访问方法和装置 | |
CN103970604A (zh) | 基于MapReduce架构实现图处理的方法和装置 | |
CN103324765B (zh) | 一种基于列存储的多核并行数据查询优化方法 | |
CN107122243A (zh) | 用于cfd仿真计算的异构集群系统及cfd计算方法 | |
CN104375824A (zh) | 数据处理方法 | |
CN103970520A (zh) | MapReduce架构中的资源管理方法、装置和架构系统 | |
US20130227244A1 (en) | Workload-aware distributed data processing apparatus and method for processing large data based on hardware acceleration | |
CN101916280A (zh) | 并行计算系统及按查询内容进行负载均衡的方法 | |
CN102346690B (zh) | 资源分配方法和装置 | |
CN103780646A (zh) | 一种云资源的调度方法及系统 | |
CN104572587A (zh) | 数据矩阵相乘的加速运算方法和装置 | |
CN103440246A (zh) | 用于MapReduce的中间结果数据排序方法及系统 | |
CN103019855A (zh) | MapReduce作业执行时间预测方法 | |
CN113177062B (zh) | 一种数据查询方法及装置 | |
CN109710406A (zh) | 数据分配及其模型训练方法、装置、及计算集群 | |
Kim et al. | K-mer clustering algorithm using a MapReduce framework: application to the parallelization of the Inchworm module of Trinity | |
CN103064955A (zh) | 查询规划方法及装置 | |
CN105701215A (zh) | 基于Hadoop MapReduce的数据连接方法及装置 | |
CN110737727B (zh) | 一种数据处理的方法及系统 | |
CN112363914B (zh) | 一种并行测试资源配置寻优的方法、计算设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140326 |
|
WD01 | Invention patent application deemed withdrawn after publication |