用于优化数据存储上的查询执行的方法_3

文档序号:9872440阅读:来源:国知局
询中的每个查询的一个或多个子查询划分到一个或多个分组列表。在为划分到一个或多个分组列表中的子查询的每个子查询检索结果后,返回主查询的结果。这种处理查询的方式减少了处理包括一个或多个子查询的一个或多个查询的延迟。分组列表(506a、506b和506c)的每个分组列表由各个执彳丁模块508a、508b和508 c执行。例如,执行模块508a执行分组列表506a,执行模块508b执行分组列表506b,执行模块508c执行分组列表506c。在实施例中,所有分组列表(506a、506b和506c)分别由执行模块508a、508b和508 c并彳丁执彳丁。将一个或多个查询划分到一个或多个分组列表(506a、506b和506 c)的目的是减少执行模块508a、508b和508c为要求同一部分数据的一个或多个查询分别进行执行的次数,该同一部分数据从一个或多个查询定义的一个或多个元数据确定。
[0042]图8所示为根据本发明的实施例的描述通过执行模块508在数据存储406上执行一个或多个查询的示例性方框图。执行模块508在数据存储406上执行包括多个查询的一个或多个查询的一个或多个分组列表(506a、506b和506c)(参考图7)的每个分组列表,以检索响应于划分到一个或多个分组列表(506a、506b和506c)中的多个查询的一个或多个查询的结果。一个或多个分组列表(506a、506b和506c)的每个分组列表的执行涉及为划分到一个或多个分组列表(506a、506b和506c)的每个分组列表中的一个或多个查询仅扫描数据存储406一次。为一个或多个分组列表(506a、506b和506c)的每个分组列表仅执行一次扫描,因为划分到特定分组列表中的一个或多个查询要求提取同一部分数据。例如,具有查询I和查询3的分组列表506a定义了待从数据存储406中提取的同一部分数据。具体而言,避免分别为查询I和查询3单独扫描数据存储406,因为查询I和查询3都要求同一部分数据。因此,仅为分组列表506a扫描数据存储406—次以检索与查询I和查询3都有关的结果。同样为其他分组列表(506b和506c)执行相同的扫描过程,从而避免数据存储406上的多次扫描,这样减少了为一个或多个查询检索结果的延迟。执行模块508包括扫描范围标识符模块802、扫描模块804、记录发布者806、一个或多个查询计算器808和配置在一个或多个查询计算器808的每个查询计算器中的数据聚合器808a,为划分到一个或多个分组列表(506a、506b和
506c)的每个分组列表中的一个或多个查询(查询1、查询2......查询η)在数据存储406上进行的扫描中涉及一个或多个查询计算器808。
[0043]扫描范围标识符模块802用于基于划分到一个或多个分组列表(506a、506b和506c)的每个分组列表中的一个或多个查询包括的一个或多个元数据为一个或多个分组列表(506a、506b和506c)的每个分组列表确定扫描范围,包括扫描的开始和结束键。例如,就包含查询I和查询3的分组列表506a而言。确定查询I和查询3之间的扫描范围以在数据存储406上执行扫描。扫描范围通常定义要为查询(例如划分到分组列表506a中的查询I和查询3)扫描的数据存储406(即数据存储406中的数据块)的范围。例如,查询I定义元数据为
“2003”年,查询3定义元数据为2003、2004......2006年。因此,这种情况下,分组列表506a
的扫描范围是2003、2004......2006年。
[0044]扫描模块804用于基于确定的扫描范围读数据存储406以检索记录。也就是说,例如,扫描模块804读包含2003、2004......2006年的学生的记录的数据存储406,从而相应地提取分别与查询I和查询3有关的结果。接着,当检索出的记录在确定的扫描范围内时,扫描模块804将检索出的记录转发给记录发布者806。例如,为划分到分组列表506a中的查询I和查询3确定的扫描范围是2003、2004......2006年。因此,2003、2004......2006年的学生的记录从数据存储406中检索出并转发给记录发布者806。在实施例中,接收到对应于开始键的记录之后,记录发布者806提示扫描模块804发送后续记录,S卩,直到结束键。例如,开始键是2003年,结束键是2006年,假设提取2003、2004......2006年的记录。当扫描模块检索并转发2003年学生的记录以符合查询I,随后记录发布者806提示扫描模块804转发有关2004年的记录。类似地,当检索出2004年的记录,记录发布者806提示发送2005年的记录,等等,直到2006年。
[0045]查询计算器808从记录发布者806接收检索出的记录。在实施例中,查询计算器808的数量对应接收模块504接收的多个查询。例如,当接收模块504接收查询I,为接收的查询I生成查询计算器I。查询计算器808验证检索出的记录是否与接收模块504接收的多个查询的一个或多个查询中的每个查询中包括的一个或多个元数据相匹配。例如,通过查询计算器808,查询I符合包括2003年的学生的记录,查询3符合分别包括2003、2004......2006年的学生的记录。当验证检索出的记录时,查询计算器808的数据聚合器808a聚合查询计算器808接收的检索出的记录。因此,查询计算器808将聚合的记录作为与多个查询的一个或多个查询的每个查询相对应的查询结果发送给一个或多个客户机402。在实施例中,在数据存储406上并行执行包括多个查询的一个或多个查询的一个或多个分组列表(506a、506b和506c)。例如,并行执行分组列表506a、分组列表506b、和分组列表506c以减少执行时间。
[0046]图9所示为根据本发明的实施例的描述优化数据存储406上的查询执行的方法的示例性流程图。在步骤902,接收模块504从一个或多个客户机402接收包括一个或多个元数据的多个查询(查询1、查询2......查询η) ο在步骤904,分组模块506基于多个查询的每个查询中包括的一个或多个元数据将从接收模块504接收的多个查询的一个或多个查询划分到一个或多个分组列表(506a、506b和506c)。在步骤906,执行模块508执行一个或多个分组列表(506a、506b和506c)的每个分组列表以检索响应于划分到一个或多个分组列表(506a、506b和506c)中的多个查询的一个或多个查询的结果。在实施例中,一个或多个分组列表(506a、506b和506c)的每个分组列表的执行包括为划分到一个或多个分组列表(506a、506b和506c)的每个分组列表中的一个或多个查询仅扫描数据存储406—次。
[0047]图10所不为根据本发明的实施例的描述通过分组模块506为分为一组的一个或多个查询扫描数据存储406的示例性流程图。在步骤1002,配置在执行模块508中的扫描范围标识符模块802为一个或多个分组列表(506a、506b和506c)中的每个分组列表确定扫描范围,扫描范围包括扫描的开始和结束键。扫描范围的确定基于划分到一个或多个分组列表(506a、506b和506c)的每个分组列表中的一个或多个查询中包括的一个或多个元数据。在步骤1004,扫描模块804从确定的扫描范围中读数据存储406以检索记录,并且当检索出的记录在确定的扫描范围内时,将检索出的记录转发给记录发布者806。在实施例中,当检索出的记录不在确定的扫描范围内,记录发布者806指示与接收模块504接收的多个查询的一个或多个查询的每个查询相对应的所有查询计算器808,以向一个或多个客户机402提供结果。在实施例中,接收到对应于开始键的记录之后,记录发布者806提示扫描模块804发送后续记录,即,直到结束键。并且,在实施例中,记录发布者806向扫描模块804指示下一个扫描的理想键。更准确地说,记录发布者806基于存在于分组列表506中的一个或多个查询中包括的元数据向扫描模块804提供下一个待读取记录的提示。例如,假设已完成筛选值为2003
的查询I的扫描。现在要为筛选值为2003、2004......2006的查询2进行扫描。接着,在完成查询I的记录的发布后,记录发布者806指示扫描模块804待扫描的记录2004。在步骤1006,与接收模块504接收的多个查询的一个或多个查询的每个查询相对应的查询计算器808从记录发布者806接收检索出的记录。在步骤1008,查询计算器808验证检索出的记录是否与接收模块504接收的多个查询的一个或多个查询的每个查询中包括的一个或多个元数据相匹配。如步骤1010所示,当验证检索出的记录时(在步骤1008执行),查询计算器808的数据聚合器808a聚合查询计算器808(在步骤1006)接收的检索出的记录。因此,在步骤1012,查询计算器808将聚合的记录作为与多个查询的一个或多个查询的每个查询相对应的查询结果发送给一个或多个客户机402。
[0048]图11所示为根据本发明的实施例描述对一个或多个查询进行排序和分组的示例图。在示例中仅示出了单个客户机402,然而所述领域技术人员应了解,用户可使用任意数量的客户机402。用户发布了四个查询,即查询1、查询2、查询3和查询4。查询I分为两个子查询,即查询IA和查询1B。查询IA是指定从市场(Market)随后从特定地区(Territory)中待提取的记录的查询I的子查询,查询IB是指定地区EMEA的按特定时间(Time)和年份(Year)待提取的记录的查询I的子查询。具体而言,查询I以如下给定的MDX形式指定其要求:
[0049]查询1A:
[0050]Select NON EMPTY{[Measures].[Quantity]}ON COLUMNS,
[0051][Market].[Territory]0N ROWS
[0052]查询IA要求来自特定地区的市场中涉及的记录。这里,筛选维度或筛选值(即元数据)是NULL。
[0053]查询IB:
[0054]Select NON EMPTY{[Measures].[Quantity]}ON COLUMNS,
[0055][Time].[Year]ON ROWS
[0056]Where[Market].[Territory].1n{EMEA}
[0057]查询IB要求地区EMEA的按特定时间和年份的记录。这里,筛选维度或筛选值(即元数据)是市场(Market)。
[0058]类似地,查询2指定其要求为:
[0059]查询2:
[0060]Select NON EMPTY{[Measures].[Quantity
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1