CN107818129B - 查询可重新开始性 - Google Patents

查询可重新开始性 Download PDF

Info

Publication number
CN107818129B
CN107818129B CN201710827669.1A CN201710827669A CN107818129B CN 107818129 B CN107818129 B CN 107818129B CN 201710827669 A CN201710827669 A CN 201710827669A CN 107818129 B CN107818129 B CN 107818129B
Authority
CN
China
Prior art keywords
computer
query
results
data
token
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
Application number
CN201710827669.1A
Other languages
English (en)
Other versions
CN107818129A (zh
Inventor
叶夫根尼娅·科根
拉杰什·拉奥
谢尔盖·梅尔尼克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Priority to CN202111137364.0A priority Critical patent/CN113886430A/zh
Publication of CN107818129A publication Critical patent/CN107818129A/zh
Application granted granted Critical
Publication of CN107818129B publication Critical patent/CN107818129B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2425Iterative querying; Query formulation based on the results of a preceding query
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24535Query rewriting; Transformation of sub-queries or views
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Fuzzy Systems (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

本申请涉及查询可重新开始性。用于使用令牌重新开始查询的方法、系统和装置,包括编码在计算机存储介质上的计算机程序。方法之一包括由计算机从请求设备接收查询;使用数据存储系统确定对查询作出响应的当前结果;使用所述当前结果生成重新开始令牌,其表示被执行以确定包括当前结果的对查询作出响应的多个结果的操作,并且其可以用来确定未包括在对所述查询作出响应的所述多个结果中的对查询作出响应的新结果;以及向所述请求设备提供消息,该消息包括a)用于重新开始令牌的第一数据,所述重新开始令牌表示被执行以确定对查询作出响应的所述多个结果的操作,和b)用于对查询作出响应的当前结果的第二数据。

Description

查询可重新开始性
背景技术
系统可以从例如客户端设备的设备接收查询。系统可以将进行查询或一部分查询的工作委托给特定计算机,例如在系统中包括的服务器。当系统允许并行处理时,系统可以提供消息给多个计算机,其中每条消息表示进行查询的任务,并且从计算机接收响应。系统可以将来自响应的数据进行合并以确定发送到设备的数据。
例如,每个计算机可以被指派用于数据库的特定部分数据来管理。数据库的这些各个部分可以被称为“表”(tablets)或“分片”(shards),并且可以包括来自分布式数据库中的一个或多个表的数据的一部分。当设备请求对于分布式数据库中特定数据的操作(例如,读取特定数据或写入特定数据)时,包含特定数据的分片(或在一些情况下是多个分片)被识别,且被指派了该分片的计算机被指示执行所请求的对该分片中数据的操作。
有时系统可以生成多个响应,每个响应包括对查询作出响应的部分结果。系统可以将多个响应流传输到系统接收查询的那个设备。
发明内容
在一些实施方式中,处理查询的系统可以针对对查询作出响应的结果生成重新开始令牌,例如在结果不包括对查询作出响应的系统中所有数据时。结果可以包括一批结果或单个结果项,例如用于来自数据库中各个行的数据。系统可以创建消息,该消息包括重新开始令牌和结果二者。消息可以包括依附于结果的重新开始令牌或者可以包括依附于一批结果中最后一项的重新开始令牌。系统可以提供消息到客户端设备,系统从该客户端设备接收查询。
如果系统和客户端设备之间的连接丢失,例如由于网络故障、计算机重新开始、计算机崩溃、或者数据从系统中的第一计算机移动到第二计算机,则客户端设备提供查询和重新开始令牌到系统以使得系统中的计算机继续处理查询。类似地,当系统中两个计算机之间的连接丢失时,主计算机可以向辅助计算机提供查询和重新开始令牌以使得辅助计算机继续处理查询。辅助计算机可以是之前处理查询的相同计算机、不同计算机、或二者。
重新开始令牌允许系统或辅助计算机重新开始查询的处理并确定对该查询作出响应的下一结果的数据而无需确定之前提供到请求设备例如客户端设备的任何中间结果。例如,当系统接收重新开始令牌和查询时,系统能够确定包括发送到请求设备且由此创建重新开始令牌的最近结果的哪些结果,已经被发送到请求设备以及要发送到请求设备的下一结果。当响应数据被键表示时,重新开始令牌可以包括发送到请求设备的最后数据的键或者应该发送到请求设备的下一数据的键。
在一些示例中,重新开始令牌可以是查询参数,其通过忽略请求设备之前接收到的结果而更改由请求设备接收的结果。例如,请求设备可以从系统中的计算机请求对特定查询作出响应的前五个结果。在请求设备接收到前五个结果之后,请求设备可以处理这五个结果,例如,将数据从结果输入到用户界面以便呈现。请求设备随后可以创建包括表示前五个结果的重新开始令牌的针对特定查询的新请求,使得计算机不包括前五个结果作为由请求设备响应于该新请求接收的任何附加结果。识别重新开始令牌的参数可以包括在新请求的报头、新请求的主体、或者新请求的其他适当部分中。
一般地,本说明书中所述的主题的一个创新方面可以体现为方法,其包括以下动作:由计算机从请求设备接收特定查询;使用数.据存储系统确定对特定查询作出响应的当前结果;使用当前结果生成重新开始令牌,所述重新开始令牌表示被执行以确定对特定查询作出响应的包括当前结果的多个结果的操作,并且其可以用来确定未包括在所述多个结果中的对特定查询作出响应的新结果;以及向所述请求设备提供消息,该消息包括a)用于表示被执行以确定对所述特定查询作出想响应的多个结果的重新开始令牌的第一数据和b)对所述特定查询作出响应的用于当前结果的第二数据。该方面的其他实施例包括对应的计算机系统、装置和记录在一个或多个计算机存储设备上的计算程序,每个都被配置为执行方法的动作。一个或多个计算机的系统可以被配置为通过将软件、固件、硬件或它们的组合安装在系统上而执行特定操作或动作,它们在操作中使得系统执行动作。一个或多个计算机程序可以被配置为通过包括指令而执行特定操作或动作,这些指令当被数据处理装置执行时,使得装置执行动作。
一般地,本说明书中所述的主题的一个创新方面可以被体现为方法,所述方法包括如下动作:发送特定查询到计算机;从计算机接收消息,该消息包括a)用于对特定查询作出响应的当前结果的第一数据和b)用于表示被执行以确定当前由系统接收的多个结果的操作并且能够用于确定未包括在对特定查询作出响应的多个结果中的对特定查询作出响应的新结果的重新开始令牌的第二数据。该方面的其他实施例包括对应的计算机系统、装置和记录在一个或多个计算机存储设备上的计算程序,每个都被配置为执行方法的动作。一个或多个计算机的系统可以被配置为通过将软件、固件、硬件或它们的组合安装在系统上而执行特定操作或动作,它们在操作中使得系统执行动作。一个或多个计算机程序可以被配置为通过包括指令而执行特定操作或动作,这些指令当被数据处理装置执行时,使得装置执行动作。
前述和其他实施例每个都可以可选地单独或组合地包括下面特征中的一个或多个。使用对特定查询作出响应的当前结果生成重新开始令牌,其表示被执行以确定包括对特定查询作出响应的当前结果的对特定查询作出响应的多个结果的操作,可以包括使用对特定查询作出响应的当前结果生成重新开始令牌,所述重新开始令牌表示被执行以确定对特定查询作出响应的多个结果的操作,所述多个结果包括i)对特定查询作出响应的当前结果和ii)之前提供给所述请求设备的对特定查询作出响应的一个或多个在先结果。使用数据存储系统确定对特定查询作出响应的当前结果可以包括使用数据存储系统确定对特定查询作出响应的一个或多个当前行。生成重新开始令牌可以包括:确定存储在数据存储系统中的对查询作出响应的一个或多个当前行是通过键来排序的;以及响应于确定存储在数据存储系统中的对查询作出响应的一个或多个当前行是通过键来排序的而确定对特定查询作出响应的所述一个或多个当前行的索引。向请求设备提供消息,所述消息包括a)用于表示被执行以确定对特定查询作出响应的多个结果的操作的重新开始令牌的第一数据和b)用于对特定查询作出响应的当前结果的第二数据,可以包括向所述请求设备提供消息,所述消息包括a)用于对特定查询作出响应的所述一个或多个当前行的索引的第一数据和b)识别对特定查询作出响应的所述一个或多个当前行的内容的第二数据。确定对特定查询作出响应的所述一个或多个当前行的索引可以包括确定对特定查询作出响应的所述一个或多个当前行中的最后一行的索引。
在一些实施方式中,使用数据存储系统确定对特定查询作出响应的当前结果可以包括使用数据存储系统确定对特定查询作出响应的一个或多个当前行。生成重新开始令牌包括:确定存储在数据存储系统中的对查询作出响应的一个或多个行不由特定键排序;以及响应于确定存储在数据存储系统中的对查询作出响应的一个或多个行不由特定键排序而识别为确定对特定查询作出响应的所述一个或多个当前行而做出的多个确定性决定。所述多个确定性决定可以允许系统确定包括对特定查询作出响应的所述当前结果的对查询作出响应的所述多个结果。向请求设备提供消息,所述消息包括a)用于表示被执行以确定对特定查询作出响应的多个结果的操作的重新开始令牌的第一数据和b)用于对特定查询作出响应的当前结果的第二数据,可以包括向所述请求设备提供消息,所述消息包括a)识别为确定对特定查询作出响应的所述一个或多个当前行而做出的多个确定性决定中每个确定性决定的第一数据和b)识别对特定查询作出响应的所述一个或多个当前行的内容的第二数据。所述方法可以包括:由所述计算机确定用于针对所述特定查询生成结果的两个或更多特定操作可以并行执行;为所述两个或更多特定操作中至少两个生成相应的子查询;以及为每个所述子查询指派相应的子查询给迭代器,所述迭代器将执行相应特定操作以使得两个或更多的所述迭代器并行处理相应的子查询。确定存储在数据存储系统中的对查询作出响应的所述一个或多个行不由特定键排序可以包括确定所述两个或更多的所述迭代器正在并行处理相应的子查询。
在一些实施方式中,生成重新开始令牌可以包括生成所述重新开始令牌而不在永久存储中存储所述重新开始令牌。生成重新开始令牌可以包括在易失性存储器中存储所述重新开始令牌而不在非易失性存储器中存储所述重新开始令牌。所述方法可以包括:在向所述请求设备提供所述消息之后从所述请求设备接收所述特定查询和所述重新开始令牌,所述重新开始令牌表示被执行以确定对特定查询作出响应的包括当前结果的多个结果的操作,并且其可以用来确定未包括在对特定查询作出响应的所述多个结果中的对所述特定查询作出响应的新结果;使用第二数据存储系统和所述重新开始令牌来确定未包括在所述多个结果中的对所述特定查询作出响应的第二结果;确定第二重新开始令牌,其表示被执行以确定对特定查询作出响应的所述第二结果和对所述特定查询作出响应的所述多个结果的操作;以及向所述请求设备提供第二消息,所述第二消息包括a)用于表示执行以确定对特定查询作出响应的第二结果和对特定查询作出响应的所述多个结果的操作的所述第二重新开始令牌的第三数据和b)用于对特定查询作出响应的所述第二结果的第四数据。
在一些实施方式中,从计算机接收消息,该消息包括a)用于对特定查询作出响应的当前结果的第一数据和b)用于表示被执行以确定包括当前结果的当前由系统接收的多个结果的操作的重新开始令牌的第二数据,可以包括从所述计算机接收消息,所述消息包括a)用于对特定查询作出响应的当前结果的第一数据和b)识别所述计算机的特定状态以确定当前由所述系统接收的所述多个结果的第二数据。所述第二数据可以包括识别当前由所述系统接收的所述多个结果的索引。所述第二数据可以包括识别由所述计算机执行以确定当前由所述系统接收的所述多个结果的一个或多个确定性步骤的第二数据。
在一些实施方式中,发送特定查询到计算机可以包括跨连接将所述特定查询发送到所述计算机。所述方法可以包括:在接收用于对特定查询作出响应的所述多个结果中每个的消息之后,确定从所述计算机接收到的最近的重新开始令牌,所述重新开始令牌能够用于确定未包括在对特定查询作出响应的多个结果中的对特定查询作出响应的新结果;提供所述特定查询和最近的重新开始令牌到第二计算机;以及从所述第二计算机接收消息,所述消息包括用于未包括在对特定查询作出响应的所述多个结果中的对所述特定查询作出响应的第二结果的第三数据以及用于表示被执行以确定对特定查询作出响应的所述第二结果和所述多个结果的操作的第二重新开始令牌的第四数据。所述方法可以包括:在接收到用于对特定查询作出响应的所述多个结果中每个结果的消息之后,确定与所述计算机的连接不再存在。确定从所述计算机接收到的最近的重新开始令牌可以响应于确定与所述计算机的连接不再存在。所述方法可以包括:在接收用于对特定查询作出响应的所述多个结果中每个结果的消息之后,确定从所述计算机请求用于所述特定查询的附加结果。确定从所述计算机接收到的最近的重新开始令牌可以响应于确定请求用于所述特定查询的附加结果。
在一些实施方式中,所述方法可以包括:在发送所述特定查询到所述计算机之前从请求设备接收所述特定查询。发送所述特定查询到所述计算机可以包括:响应于从所述请求设备接收到所述特定查询,向所述计算机发送表示用于所述特定查询的操作的第一部分的第一子查询;向第二计算机发送表示用于所述特定查询的操作的第二部分的第二子查询;对于对所述特定查询作出响应的第二多个结果中的每个第二当前结果:从所述第二计算机接收第二消息,所述第二消息包括用于对特定查询作出响应的第二当前结果的第三数据和用于表示使用所述第二子查询执行以确定当前由所述系统接收的包括第二当前结果的所述第二多个结果的操作的第二重新开始令牌的第四数据;确定最近的当前结果和最近的第二当前结果;以及向所述请求设备发送响应,所述响应识别i)最近的当前结果和对应的重新开始令牌和ii)最近的第二当前结果和对应的第二重新开始令牌。所述方法可以包括:确定向所述第二计算机指派表示用于特定查询的操作的第二部分的所述第二子查询;以及在向所述第二计算机发送表示用于特定查询的操作的第二部分的所述第二子查询之前:确定尚未从所述第二计算机接收到第二当前结果;确定已经从所述计算机接收到当前结果和对应的重新开始令牌;以及向所述请求设备发送识别所述当前结果和所述对应的重新开始令牌的第一响应。向所述第二计算机发送表示用于特定查询的操作的第二部分的所述第二子查询可以发生在向所述请求设备发送识别当前结果和对应的重新开始令牌的所述第一响应之后。在一些实施方式中,系统可以包括计算机。所述系统可以包括第二计算机。
本说明书中所述的主题可以以特定实施例来实现且可以导致一个或多个以下优点。在一些实施方式中,系统可以在重新开始令牌中包括被采用以减少或消除日志中状态信息的存储、以保持较小的重新开始状态、或二者的用于查询的状态信息。在一些实施方式中,使用重新开始令牌的系统可以是可缩放的,例如,不要求存储空间存储重新开始信息。例如,系统可以使用重新开始令牌而不在永久存储中存储重新开始信息。在一些实施方式中,使用重新开始令牌的系统可以最小化在丢失连接之后重做的工作量、减少或消除复制信息到请求系统的递送、或二者。在一些实施方式中,下面所述的系统和方法减少了查询重新开始的延迟、可以使得能够对递送低延迟的系统进行查询重新开始、可以允许在更长时间段运行的查询、允许请求系统而不用寻呼系统来重新开始查询且不用接收复制结果、减少由于瞬时错误而中止的交易数量、或者以上两个或更多的组合。例如,查询重新开始令牌,例如低延迟查询重新开始令牌,可以帮助最小化例如由于需要返回失败查询而引起的尾延迟,可以通过移除诸如客户端代码的代码中的重试循环的需要而简化编程模型,或者二者。简化的编程模型可以用于不进行锁定的只读交易,诸如使用快照隔离的交易。在一些示例中,查询重新开始令牌可以使得能够在故障而不用重新开始的可能性较高时,例如故障可能性超过阈值可能性、接近百分之一百、或二者时,使得能够针对系统上的查询而进行处理。在一些实施方式中,使用查询重新开始令牌的系统或方法可以能够处理单个长运行查询,例如,不要求使用每个都用于对单个查询作出响应的大量结果的多个查询、不用分析对多个查询中的每个查询作出响应的数据的一致性、或二者。
在附图以及下面的描述中阐述本说明书中所述的主题的一个或多个实施方式的细节。通过描述、附图和权利要求,主题的其他特征、方面和优点将变得显然。
附图说明
图1是其中计算机包括具有查询结果批次的重新开始令牌的环境的示例。
图2是用于对查询作出响应和重新开始令牌而生成包括结果批次的消息的过程的流程图。
图3是能够结合本文中所述的计算机实现的方法使用的计算系统的框图。
各个附图中的相似附图标记和指示表示类似的元素。
具体实施方式
1.0概览
在一些实施方式中,下面所述的系统和方法在重新开始令牌中存储表示对查询的工作进展的数据并且流传输具有对查询的每个结果的查询重新开始令牌。该结果是多个结果之一,多个结果中每个结果都对查询作出响应且包括在到请求设备的单独消息中。结果可以包括在一批部分结果中,每个部分结果都对查询作出响应,例如在一批两个或更多的结果中,或者作为单个结果,该单个结果是提供给请求设备的结果流的一部分。下面所述的示例通常指的是一批结果。相同系统和方法可以用于作为对于查询的部分结果的单个结果。系统可以包括对于每个消息的一个重新开始令牌,其包括至少一个结果,例如单个结果或一批结果。
系统可以为每批结果生成重新开始状态并且在具有表示该批结果的数据的消息中提供重新开始状态作为重新开始令牌。当系统经历故障并且丢失用于查询的状态信息时,系统使用重新开始状态来在故障之后继续流传输结果,例如从请求设备接收的最近的一批结果,。
例如,系统可以添加重新开始令牌到发送至请求设备的每批结果中。当针对查询的搜索操作被分为各个部分且搜索操作的每个部分都作为独立子查询工作时,批次结果可以用于部分查询。系统可以基于包括对查询作出响应的数据的分片将搜索操作分为部分,使得每个子查询用于特定分片。系统为每批结果提供对应的重新开始令牌,所述对应的重新开始令牌具有针对到系统从其接收查询的请求设备的相应批次的结果的数据,所述数据例如,该查询是原始查询还是子查询。
当系统不再接收对查询作出响应的数据且需要附加响应数据时,系统使用来自一批结果的查询重新开始令牌来继续对查询的工作。系统可以不再接收对查询作出响应的数据,因为系统仅仅请求特定数量的结果或者因为系统经历了例如系统和请求设备之间或者包括在系统中的多个计算机之间的中断连接。例如,当系统中第一计算机和请求设备之间的连接中断,系统中第二计算机从请求设备接收对于查询的请求,所述请求包括来自一批结果的重新开始令牌,该批结果是系统之前提供给请求设备的(例如最近的一批结果)以使得系统继续对查询的工作。当系统中包括的两个计算机之间的连接中断时,例如,当两个计算机中第一个是主计算机,其委托工作给辅助计算机,辅助计算机检索对于查询的部分结果,主计算机可以使用从辅助计算机接收的重新开始令牌以及一批结果来使得辅助计算机或系统中另一计算机继续生成对于查询的结果。连接的中断可能由网络故障、计算机重启、计算机崩溃、数据从一个计算机移动到另一个计算机的移动、或者这些中的两个或更多的组合导致。
在一些示例中,正在处理查询的计算机可以停止处理查询,因为对查询作出响应的数据已经移动到另一计算机、数据被污染或者计算机过载。在对查询作出响应的数据在多个计算机之间复制时,计算机可以能够停止处理查询。例如,计算机可能最初托管包括对查询作出响应的数据的分片副本。当计算机确定分片副本被移动到不同计算机且该计算机不再能够访问分片副本时,计算机停止处理查询。计算机可以向请求设备提供消息,该消息指示计算机不再处理查询。在一些实施方式中,计算机不向请求设备提供指示计算机不再处理查询的消息。
当例如单个计算机或多个计算机的系统,确定对查询作出响应的批次的结果时,系统可以通过在系统产生了结果批次中的最后一行之后捕捉执行查询的例如状态性运行时结构的运行时结构的状态来生成重新开始令牌。系统的运行时结构,例如运行时状态,可以包括多个迭代器的状态,多个迭代器被组织为一个迭代器树,例如具有任意尺寸或深度或二者。
迭代器树可以表示用于处理查询的运行时查询计划。迭代器树中每个节点可以表示处理用于查询的一部分操作(例如查询的子查询)的单个迭代器。计算机可以执行在迭代器树中的迭代器所表示的用于查询的一部分操作。迭代器可以具有零、一个、或多个输入值。每个输入值可以是元组(tuple)。迭代器可以具有一个输出,例如输出元组。输出元组可以表示对查询的结果,例如,作为一批结果的一部分或单个结果。
在一些示例中,系统可以在查询编译期间将查询请求转换为迭代器树并且使用迭代器树的状态来生成重新开始令牌。迭代器树的形状和正在被处理的特定数据可以控制系统向迭代器树中的迭代器提供控制的次序。
系统可以使用迭代器树来生成重新开始令牌。例如,系统可以使用参与产生特定结果批次中最后一行的所有迭代器的状态来生成特定结果批次的重新开始令牌。系统可以使用迭代器树的深度优先遍历以确定用于重新开始令牌的数据。例如,系统可以确定包括状态信息的每个分支中的第一迭代器节点并且使用所确定的状态信息来生成重新开始令牌。
在一些实施方式中,系统可以使用迭代器执行操作的次序来生成重新开始令牌。例如,对于特定结果批次,系统可以使迭代器以与迭代器针对该特定结果批次产生数据相同的次序产生状态信息。当生成重新开始令牌时,系统以迭代器产生状态信息的次序将状态信息组合,例如,使得重新开始令牌在稍后用于重现被执行以生成特定结果批次的步骤将以相同次序来执行。
当系统使用重新开始令牌来重新开始对于查询的工作时,例如,最初生成对于查询的结果的相同计算机或者系统中的不同计算机,系统生成迭代器树并且向迭代器树中的迭代器提供来自重新开始令牌的它们的重新开始状态。只有当迭代器能够控制生成数据时,系统可以向迭代器提供它们的重新开始状态。例如,系统向请求设备提供对特定查询作出响应的一批结果以及特定重新开始令牌。系统停止处理查询,例如系统经历了驱动故障和崩溃或以其他方式停止处理查询。例如不同计算机或相同计算机的系统从请求设备接收特定查询和特定重新开始令牌并且生成用于特定查询的迭代器树。系统使用来自特定重新开始令牌的数据来更新迭代器树中的迭代器的状态信息。
在当前迭代器使用来自其重新开始状态的数据时,系统可以使得迭代器设置与重新开始之前相同的值,例如,当创建用于生成附加结果批次的行时。例如,重新开始令牌可以使得当前迭代器看到当前迭代器在重新开始之前看到的相同输入值。
在一些示例中,系统可以从用于特定结果批次中最后一行的每个当前迭代器接收描述对应迭代器的状态的变量。变量可以不包括来自结果批次的数据。
每个当前迭代器的状态可以小于几个字节。例如,所有的当前迭代器的状态可以是几十个字节,以便允许系统创建几十个字节的重新开始令牌,例如小于一百字节。
在一些实施方式中,系统所访问的数据是确定性数据。如本描述中所使用的,确定性数据是系统以给定特定查询的特定次序确定的数据,使得系统将在系统接收到特定查询的任何时间以特定次序确定相同确定性数据。例如,给定特定查询,系统确定对特定查询作出响应的确定性数据通过特定键来排序。在一些示例中,数据可以通过行号、数据标识符或者另外的适当值来排序。在这些实施方式中,重新开始令牌可以包括用于包括在结果批次中的最后数据的特定键。重新开始令牌可以包括用于包括在新结果批次中的下一数据的特定键。
在一些实施方式中,系统可以通过总是执行相同操作序列来识别对特定查询作出响应的数据而确定确定性数据,例如,当没有其他操作可用来确定确定性数据时。在一些实施方式中,系统可以通过以确定确定性数据的顺序来执行操作序列而确定确定性数据。
在一些示例中,系统可以例如基于添加到数据库的新数据来确定对特定查询作出响应的确定性数据,相比之前识别的,所述确定性数据包括对特定查询作出响应的更多数据。之前识别的确定性数据的子集将处于与之前识别的相同的次序,且将在之前未被识别的确定性数据的不同子集之前被系统识别,例如,新数据将具有在顺序上在用于旧数据的标识符之后的标识符。
在一些实施方式中,系统所访问的数据是非确定性数据。如本描述中所使用的,非确定性数据是系统可以以给定特定查询的多个不同次序之一确定的数据,所述多个不同次序取决于当确定非确定性数据时系统所执行的操作(例如非确定性步骤)的顺序。在一些示例中,当并行执行一个或多个操作以确定非确定性数据时,系统可以确定非确定性数据。例如,当系统将对于特定查询的搜索操作分为几个部分(例如子查询)、指派每个子查询给计算机群组中的特定计算机、以及使得来自计算机群组的多个计算机执行针对它们对应子查询的操作时,系统可以生成非确定性数据。
当系统执行非确定性步骤以确定对查询作出响应的结果时,例如当结果不由特定键来排序时,系统可以在重新开始令牌中包括历史数据。历史数据可以包括表示被采取以识别对查询作出响应的结果的确定性步骤的数据。系统可以在重新开始时使用历史数据来确定被采取以识别之前提供给请求设备的数据的步骤,例如以确保只有之前未发送到请求设备的数据在重新开始时被提供给请求设备。
2.0示例操作环境
图1是查询系统103包括具有查询结果批次的重新开始令牌的环境100的示例。例如,环境100中的客户端设备102,例如作为请求设备,可以在时间段TA期间发送查询到查询系统103中的计算机104以请求数据。作为响应,客户端设备102在时间段TE期间从计算机104接收包括对查询作出响应的部分结果和重新开始令牌的响应。客户端设备102可以稍后使用重新开始令牌来请求对查询作出响应的附加结果,例如如果客户端设备102变为与计算机104中断连接或者以其他方式不从计算机104接收附加结果。
例如,计算机104可以在时间段TA期间接收查询。当计算机在不从其他计算机接收数据的情况下确定对查询作出响应的批次的结果时,计算机确定第一结果批次和针对第一结果批次的对应的第一重新开始令牌。第一重新开始令牌可以表示用于确定第一结果批次的计算机104的状态,例如计算机104上的一个或多个迭代器的状态。
在时间段TE期间,计算机104提供第一结果批次和第一重新开始令牌到客户端设备102。计算机104可以在消息中包括第一结果批次连同第一重新开始令牌。计算机104可以发送多个数据分组到客户端设备102,所述多个数据分组表示具有第一结果批次和第一重新开始令牌的消息。计算机104可以发送单个数据分组到客户端设备102,所述单个数据分组表示具有第一结果批次和第一重新开始令牌的消息。
计算机104可以包括数据库,例如数据存储系统或诸如分片的数据库的一部分,具有对查询作出响应的多个结果。计算机104可以使用任何适当技术来实现数据库。计算机104查询数据库以确定响应于从客户端设备102接收到的查询的批次的结果。例如,计算机104可以使用第一查询来确定第一批次的结果,使用第二查询来确定第二批次的结果等。计算机104可以生成第一查询和第二查询作为对从客户端设备102接收到的查询的子查询。
计算机104可以提供多个批次的结果给客户端设备102,使得客户端设备102可以随着结果被确定而开始处理包括在每个结果批次中的数据。例如,计算机104可以是提供对查询作出响应的搜索结果的搜索系统的一部分。计算机104可以提供例如特定于特定查询的批次的结果至客户端设备102,以使得例如在可能用从另一系统获得的数据充实搜索结果之后,客户端设备102在所搜结果用户界面中呈现一些搜索结果。随着客户端设备102从计算机104接收到批次的结果,客户端设备102可以构建第一搜索结果页面。当客户端设备102接收到另一批次的结果时,例如在不需要向计算机104发送多个请求的情况下,客户端设备102可以向第一搜索结果页面添加内容、缓冲来自另一批次的结果的结果以用于生成第二搜索结果页面、或二者。例如,因为结果响应于相同的查询,客户端设备102可以缓冲用于第二搜索结果页面的结果,而无需确定怎样使得第二搜索结果页面中的数据与第一搜索结果页面一致。
当计算机104是指派子查询给多个辅助计算机106a-b的主计算机时,计算机104,例如作为请求设备,可以在时间段TB期间指派子查询给辅助计算机106a-b中的每个。例如,计算机104可以确定包括对查询作出响应的数据的多个数据分片。计算机104可以确定辅助计算机106a-b中的每个存储所确定的分片之一。计算机104确定对相应分片中每个分片的子查询并且例如在消息中发送子查询到对应的辅助计算机106a-b。
辅助计算机106a-b每个执行一个或多个操作,同时处理相应子查询以确定对查询作出响应的一批次数据。辅助计算机106a-b每个确定用于生成该批次数据中的数据的相应辅助计算机的对应状态并且将用于该状态的数据包括在相应重新开始令牌中。例如,第一辅助计算机106a可以使用迭代器来确定对查询作出响应的第一批次数据。第一辅助计算机106a可以使用迭代器的状态作为重新开始令牌或者重新开始令牌的一部分。第一辅助计算机106a可以使用任何适当数量迭代器的状态信息以确定重新开始令牌。
在时间段TC期间,计算机104从辅助计算机106a-b接收批次的结果和对应重新开始令牌。例如,计算机104可以从辅助计算机106a-b中的每个接收在一个或多个分组中发送的消息,对于特定辅助计算机106a-b,所述消息包括用于该批次的结果的数据以及用于对应重新开始令牌的数据。
计算机104,在时间段TD期间,组合批次的结果和重新开始令牌。例如,计算机104可以将来自辅助计算机106a-b的表示每个批次的结果的数据连接到一起。计算机104可以在存储器中存储全局迭代器树,其表示用于辅助计算机106a-b的重新开始令牌。全局树中的每个局部迭代器节点可以存储用于辅助计算机106a-b之一的重新开始令牌。计算机104可以使用全局树来为当前存储在计算机104上且还没发送到客户端设备102的批次的结果(例如从辅助计算机106a-b接收到的组合的相应批次的结果)生成全局重新开始令牌。
计算机104在时间段TE期间,向客户端设备102提供组合的批次的结果和组合的重新开始令牌。例如,计算机104发送消息到客户端设备102,该消息包括表示经连接的批次的结果的数据和用于全局重新开始令牌的数据。
在一些示例中,计算机104可以生成全局重新开始令牌,其包括用于之前发送到客户端设备102的一个或多个批次的结果的状态信息且为此在时间段TE期间数据将不被发送到客户端设备102。例如,计算机104可以指派子查询到三个辅助计算机(未示出)。计算机104可以从三个辅助计算机中每个接收对应的第一结果批次和第一重新开始令牌。计算机104在例如时间段T0期间,向客户端设备102提供表示来自三个辅助计算机的第一结果批次的第一全局结果批次、表示第一重新开始令牌的第一全局重新开始令牌。计算机104在例如时间段T0之后的时间段T1期间从第一辅助计算机和第二辅助计算机接收第二结果批次以及对应的重新开始令牌。计算机不从第三辅助计算机接收第二结果批次,例如,第三辅助计算机被重新开始而不再针对之前指派给第三辅助计算机的子查询工作。
计算机104确定第三辅助计算机将不提供第二结果批次并且使用来自第一和第二辅助计算机的两个第二结果批次生成第二全局结果批次。计算机104使用从第一和第二辅助计算机接收到的第二重新开始令牌和从第三辅助计算机接收到的第一重新开始令牌生成第二全局重新开始令牌。计算机104在例如在时间段T1之后的时间段TE期间,例如在消息中提供第二全局结果批次和第二全局重新开始令牌给客户端设备102。计算机104可以确定与第三辅助计算机的连接丢失,例如第三辅助计算机崩溃或者被重新引导启动。计算机104可以向第三辅助计算机或另一计算机提供之前指派给第三辅助计算机的第三子查询以及从第三辅助计算机接收的第一重新开始令牌。
计算机104继续提供结果批次和对应的重新开始令牌给客户端设备102,直到没有对查询作出响应的附加数据被确定。计算机104可以在发送到客户端设备102的最终结果批次中包括指示该最终结果批次没有与重新开始令牌包括在一起的数据,例如指示对于该查询,没有附加数据将被客户端设备102接收的数据。
在一些示例中,计算机104可以提供结果批次和对应的重新开始令牌给客户端设备102,直到计算机104从客户端设备102接收停止请求,所述停止请求指示计算机104应该不再提供结果批次给客户端设备102。在一些实施方式中,计算机104可以提供结果批次和对应重新开始令牌给客户端设备102,直到接收到查询之后预先确定的时间段、直到预先确定数量的结果批次已被提供给客户端设备102、或者直到另一适当停止条件被满足。
当客户端设备102不再从计算机104接收结果批次时,例如基于停止条件或者当客户端设备102和计算机104之间的连接变为断开连接时,客户端设备102可以使用最近接收的重新开始令牌和原始查询以从计算机104请求附加结果批次,例如,使得客户端设备102不从计算机104接收客户端设备102之前接收的任何结果批次。
时间段TA,TB,TC,TD和TE可以是任何适当长度。在一些示例中,时间段TA,TB,TC,TD和TE中的一个或多个可以重叠。例如,计算机104可以在例如时间段TD和TE期间将重新开始令牌组合并且提供全局结果批次和对应全局重新开始令牌,同时在例如时间段TC期间继续从辅助计算机106a-b接收结果批次和对应重新开始令牌。
在一些实施方式中,特定全局结果批次可以包括来自单个辅助计算机106a-b的多个结果批次。例如,计算机104可以创建具有来自第一辅助计算机106a的两个结果批次和来自第二辅助计算机106b的一个结果批次的全局结果批次。
客户端设备102可以是任何适当设备。例如,客户端设备102可以包括个人电脑、移动通信设备或者可以通过网络108发送和接收数据的另一设备。网络108,诸如局域网(LAN)、广域网(WAN)、互联网或其组合,连接客户端设备102和查询系统103中的计算机。网络108,或另一网络,可以连接计算机104和查询系统103中的辅助计算机106a-b。尽管描述了单个计算机104,在环境100的一些实施方式中可以使用单个计算机104或互相结合而操作的多个计算机104,包括例如被部署为云计算服务的远程计算机的集合。
计算机104和辅助计算机106a-b中每个可以是物理计算机或在物理计算机上执行的虚拟计算机。例如,计算机104可以是在物理计算机上执行的第一虚拟机,第一辅助计算机106a可以是在物理计算机上执行的第二虚拟机,第二辅助计算机106b可以是在物理计算机上执行的第三虚拟机。一个或多个虚拟机可以在相同物理计算机上执行。计算机104和106a-b可以是物理计算机以及在物理计算机上执行的软件的任何适当组合。
在一些实施方式中,计算机104和106a-b中的一个或多个可以是在操作系统上执行的容器。例如,第一辅助计算机106a可以是存取在底层物理硬件的存储器中存储的数据的第一分片的第一容器,第二辅助计算机106b可以是存取在底层物理硬件的存储器中存储的数据的第二分片的第二容器。第一容器和第二容器可以在相同操作系统实例上、在相同物理计算机上、或二者上执行。在一些示例中,第一容器和第二容器可以在例如相同操作系统类型或不同操作系统类型的不同操作系统实例上、在不同物理计算机上、或二者上执行。
3.0示例处理流
图2是用于生成包括对查询作出响应的结果批次和重新开始令牌的消息的过程200的流程图。例如,过程200可以由来自环境100的计算机104或者辅助计算机106a-b之一使用。
计算机接收特定查询(202)。例如,计算机可以从请求设备接收特定查询。当计算机是辅助计算机、客户端设备或另一适当设备时,请求设备可以是主计算机。特定查询可以是例如从客户端设备接收的初始查询,或者例如从另一计算机接收的子查询。
计算机使用数据存储系统确定对特定查询作出响应的当前批次的结果(204)。计算机可以使用来自包括在计算机上的分片的数据(例如由计算机拥有的分片)来确定对特定查询作出响应的结果。例如,计算机可以包括数据库来存储数据,所述数据包括对特定查询作出响应的数据。计算机可以访问数据库以确定当前批次的结果。
计算机确定对查询作出响应的当前批次的结果是否包括确定性数据(206)。计算机可以确定特定键是否用于对数据排序、例如当每个子查询用于分片时多个计算机是否同时处理识别用于查询的搜索算子的子查询、多个非确定性步骤是否要被执行以对数据排序、或者这些两个或多个的组合。当计算机确定特定键用于对数据排序时,计算机可以确定当前批次的结果包括确定性数据。当计算机确定特定键不用于对数据排序时,计算机可以确定当前批次的结果不包括确定性数据。
响应于确定对查询作出响应的当前批次的结果不包括确定性数据,计算机生成重新开始令牌,所述重新开始令牌表示被执行以确定包括当前批次的结果的对特定查询作出响应的多个批次的结果的操作(208)。例如,计算机确定表示由计算机执行以生成当前批次的结果的步骤的状态信息。状态信息允许计算机或者另一计算机重复过程,例如执行的操作序列,用于生成当前批次的结果,例如,使得当前批次的结果中没有结果在另一批次的结果中被提供给请求设备。例如,如果计算机没有接收到状态信息,则计算机可能提供来自当前批次的结果的结果给请求设备,例如请求设备可以多次接收一些结果。假定数据是非确定性的且可以以取决于被执行以确定数据的操作序列的不同次序来确定,则计算机可以使用状态信息来确保操作序列以相同次序执行。在一些示例中,例如除了状态信息之外,计算机还可以使用当前批次的结果生成重新开始令牌。
计算机可以不在状态信息中包括结果,例如以确保重新开始令牌的大小小于最大阈值大小。计算机可以不在例如永久存储器中存储状态信息,以例如当计算机将必须存储用于多个查询的状态信息时减小存储器需求,使得请求设备可以例如使用重新开始令牌以另一计算机或二者来重新开始查询。
响应于确定对查询作出响应的当前批次的结果包括确定性数据,计算机生成表示当前批次的结果的状态的重新开始令牌(210)。该状态可以是确定当前批次的结果之后的计算机的状态。计算机或另一计算机可以使用该状态来确定哪些结果已经被提供给请求设备、哪些结果应该接下来被发送到请求设备、或二者。
计算机提供包括用于重新开始令牌的第一数据和用于当前批次的结果的第二数据的消息(212)。计算机可以生成包括用于重新开始令牌的第一数据和用于当前批次的结果的第二数据的消息。计算机使用网络来提供消息给请求设备,计算机从该请求设备接收到查询。计算机可以使用任何适当方法来提供消息,例如作为一个或多个分组。
计算机接收特定查询和表示被执行以确定多个批次的结果的操作的重新开始令牌(214)。例如,当计算机与请求设备的连接断开时,请求设备可以确定连接丢失且尚未从计算机接收到附加结果批次。作为响应,计算机从请求设备接收特定查询和重新开始令牌。
计算机使用特定查询和重新开始令牌来确定多个批次的结果(216)。例如,不管结果批次包括确定性数据还是非确定性数据,计算机使用特定查询和重新开始令牌来在计算机提供最后批次的结果给请求设备时重新创建计算机的状态,例如使得计算机不提供请求设备已经接收到的任何结果给请求设备。
计算机使用数据存储系统来确定对特定查询作出响应的不包括来自多个批次的结果的任何结果的新批次的结果(218)。例如,计算机访问数据库以确定新批次的结果。新批次的结果中的结果不包括之前由请求设备针对特定查询而接收的任何结果。
在一些示例中,数据库可以具有与之前存储在计算机上的不同的数据。例如,当计算机包括数据分片且该分片稍后例如在计算机与请求设备断开连接期间拆分(split)时,计算机确定包括在对特定查询作出响应的分片的剩余部分中的数据。计算机作为一批结果发送确定的数据,以及对应重新开始令牌到请求设备。
在一些实施方式中,当分片拆分发生时计算机可以使用特定查询和重新开始令牌来确定对特定查询作出响应并且存储在计算机上的所有数据已经被发送到请求设备。计算机可以生成消息,该消息指示所有响应数据已经提供给请求设备。该消息可以包括对存储在计算机上的数据的指示。该消息可以包括发生分片拆分的指示。
计算机确定新重新开始令牌,其表示被执行以确定新批次的结果和多个批次的结果的操作(220)。例如,计算机可以确定数据是否被确定性地确定,例如执行步骤206。作为响应,计算机在新重新开始令牌中包括适当数据。计算机可以使用新批次的结果以确定新重新开始令牌。
计算机提供第二消息,其包括用于新重新开始令牌的第三数据和用于新批次的结果的第四数据(222)。计算机可以使用新重新开始令牌和新批次的结果来生成第二消息。计算机提供第二消息到请求设备。
上述过程200中的步骤的次序只是说明性的,生成包括对查询作出响应的结果批次和重新开始令牌的消息可以以不同次序来执行。例如,计算机可以确定结果是确定性还是非确定性确定的,然后确定当前批次的结果。在一些示例中,计算机可以确定结果是确定性还是非确定性确定的并且同时确定当前批次的结果。
在一些实施方式中,过程200可以包括附加步骤、更少步骤、或者一些步骤可以被分为多个步骤。例如,计算机可以执行步骤202到212而不执行步骤214到222中的一个或多个。在一些示例中,计算机可以执行步骤202到204以及步骤210到212。
4.0可选实施方式细节
在一些实施方式中,系统可以生成重新开始令牌,其不具有对网络成本、处理器成本或二者的显著影响。系统可以生成任何适当大小的重新开始令牌。系统可以生成具有几千字节大小(例如小于一万字节),优选几百字节(例如小于一千字节),更优选几十字节(例如小于一百字节)。例如,当系统从每个当前迭代器接收小于几个字节的状态信息时,重新开始令牌的总大小可以小于三百字节,优选小于一兆字节。
系统可以控制重新开始令牌的大小。例如,重新开始令牌的大小可以基于查询复杂度、用于处理查询的并行的程度(例如此时并行运行的每个子查询可能需要独立重新开始状态)、或二者。系统可以调节查询复杂度、并行的程度、或二者以调节重新开始令牌的大小,例如,以保持重新开始令牌的大小低于阈值大小。例如,系统可以使用表示运行时查询计划的迭代器树的大小、例如表示用于处理查询的并行的程度的迭代器树的形状、或二者,来确定重新开始令牌的大小。系统可以调节迭代器树的大小、迭代器树的形状、或二者,来调节对应重新开始令牌的大小。在一些示例中,系统可以包括由迭代器树表示的用于运行时查询计划的数据,作为重新开始令牌的一部分,例如当响应数据被非确定性地确定时。在一些示例中,系统不包括由迭代树表示的用于运行时查询计划的数据作为重新开始令牌的一部分,例如当响应数据被确定性地确定时。
在一些实施方式中,当生成结果的次序不重要时,系统可以允许并行处理。例如,当提供查询给系统的请求设备指示提供结果给请求设备的次序不重要或者系统以其他方式确定该次序不重要时,系统可以确定为用于生成查询结果的不同操作生成子查询。系统可以向不同迭代器指派用于不同操作的子查询。每个迭代器并行生成对应子查询的结果。
当多个计算机执行操作来确定对查询作出响应的结果批次时,主计算机,例如计算机104,可以生成包括来自多个计算机中每个计算机的状态信息的全局迭代器树,例如运行时查询计划。例如,主计算机可以向作为全局迭代器树的节点的多个计算机中的每个计算机指派分布式查询的一部分,该计算机将针对分布式查询的该部分执行工作,例如节点处理来自输入数据一个分片的数据。主计算机可以使用特定局部迭代器来远程调用计算机例如节点之一上的查询的子查询。主计算机可以从计算机之一接收包括对应重新开始令牌的子查询结果,并且提供结果给局部迭代器。局部迭代器可以是存储在主计算机上的全局迭代器树的一部分,在全局迭代器树中每个局部迭代器对应于被指派一部分分布式查询的计算机中的一个计算机。主计算机使用局部迭代器来利用结果和所包括的重新开始令牌来更新全局树。
主计算机可以使用全局迭代器树来生成全局重新开始令牌。例如,主计算机接收多个子查询结果批次,每个子查询结果批次来自正在处理子查询并且表示全局迭代器树中迭代器节点之一的计算机之一。每个子查询结果批次包括对应重新开始令牌。主计算机可以提供重新开始令牌给全局迭代器树中的对应局部迭代器以使得局部迭代器更新全局迭代器树。主计算机使用尚未提供给请求设备的子查询结果来生成当前结果批次,主计算机从该请求设备接收原始查询。主计算机使用用于包括在当前结果批次中的子查询结果的局部迭代器来生成当前重新开始令牌。主计算机发送当前结果批次和当前重新开始令牌到请求设备。
在一些示例中,主计算机可以使用输入数据的分片的数量来动态调节包括在全局迭代器树中的局部迭代器的数量,以及执行用于查询的操作的辅助计算机的对应数量。例如,主计算机可以使用正在执行针对分布式查询的工作的计算机的数量来调节局部迭代器的数量,例如其中每个计算机包括输入数据的一个分片。当存储用于查询的数据的分片变化时,例如被合并或拆分时,主计算机更新局部迭代器以表示分片的改变。主计算机可以生成重新开始令牌,该重新开始令牌包括用于每个分片的状态信息,例如在用于特定结果批次的重新开始令牌中分片集合的相关部分可以是往返的,使得在重新开始时,迭代器接收迭代器在重新开始前看到的完全相同的数据。
在查询处理期间,当系统动态改变数据分区如何被分组到多个计算机上的分片中时,系统可以使用多个阶段来生成重新开始令牌。例如,系统可以在计算机得到对处理查询的控制时固定(fix)分片集合。当系统确定在系统指派了子查询给之前托管分片的特定计算机之后该分片已经被拆分时,系统确保特定计算机处理分片的剩余部分中的数据,以便使得特定计算机生成仅特定于分片的剩余部分的重新开始状态,而不是之前包括在拆分之前的分片中的数据。
例如,主计算机可以通过在主计算机得到对查询的控制时忽略动态分片和固定分片集合而开始。主计算机可以通过创建用于分片的全局迭代器树来设置分片,例如其中,全局迭代器树中的一个迭代器节点对应于分片中的每个分片。对于全局迭代器树中的每个迭代器节点,主计算机指派对应操作给辅助计算机。随着系统中的辅助计算机处理对应子查询,例如主计算机的系统,可以动态改变对于系统中不同辅助计算机的分片指派,例如因为随着查询处理的进展,分片集合可能变得陈旧。
当包括在分片集合中的逻辑分片在主计算机指派子查询给托管逻辑分片的辅助计算机之后被拆分时,例如当执行用于子查询的操作时系统可以限制辅助计算机通过底层输入数据的逻辑划分来依次迭代,所以辅助计算机上物理数据的读取从不在数据记录之间来回跳,数据记录可以在不同分片、例如节点的计算机、或二者之间拆分。
当主计算机检测到与计算机的连接断开时,主计算机可以使用用于计算机的当前重新开始令牌来使得计算机,或托管相同分片的其他计算机,继续对之前指派给计算机的子查询工作。当请求设备检测到与主计算机的连接断开时,请求设备可以使用当前全局重新开始令牌来使得主计算机、或不同主计算机,继续针对查询而工作。
在一些实施方式中,主计算机可以将分片分组成适当数量的分片组并且允许分片组之间的子查询处理以并行运行。例如,主计算机可以从每个分片组接收表示为对应分片组中的分片而生成的对应状态信息。主计算机将来自分片组的状态信息组合以创建全局重新开始令牌。主计算机可以基于最大重新开始令牌大小来选择分片组的数量。在一些示例中,主计算机可以创建三个到二十个分片组。在一些示例中,主计算机可以创建五个到十二个分片组。主计算机可以使用任何适当数量作为分片组的总数量。主计算机可以使用最大重新开始令牌大小、最大消息大小或二者,来确定分片组的数量。
系统可以使得托管分片组中分片的计算机顺序地处理子查询结果。例如,主计算机可以只指派分片给一起形成连续数据集的分片组。主计算机可以选择托管分片组中第一分片的第一计算机并且向第一计算机发送第一子查询,例如用于第一分片。当第一计算机处理第一子查询时,主计算机从第一计算机接收结果批次以及每个结果批次的对应重新开始令牌。主计算机还从其他计算机接收用于其他分片分组的数据。
当主计算机确定第一计算机完成处理第一子查询时,主计算机选择托管分片组中第二分片的第二计算机。第二分片顺序上在第一分片之后且没有任何中间分片。主计算机发送第二子查询到第二计算机,作为响应,从第二计算机接收批次的结果以及对应的重新开始令牌。
主计算机使用分片组中当前分片的重新开始令牌作为分片组的重新开始令牌。例如,当第一计算机处理第一子查询时,主计算机使用来自第一计算机的第一重新开始令牌作为用于第一计算机所属于的分片组的重新开始令牌。当第二计算机处理第二子查询时,在第一计算机完成处理第一子查询之后,主计算机使用来自第二计算机的第二重新开始令牌作为用于第一计算机和第二计算机所属于的分片组的重新开始令牌。
在一些实施方式中,当系统以迭代器执行操作的次序生成重新开始状态时,系统可以使用最小迭代器集合来产生重新开始状态。在一些实施方式中,当系统使得迭代器以迭代器产生用于特定结果批次的数据的相同次序生成状态信息时,系统可以不传播生成重新开始状态的呼叫到不参与用于特定结果批次的最后一行中的值的计算的迭代器树的子树。在一些实施方式中,主计算机可能不从处理子查询的计算机请求迭代器状态信息,而是可以使用从该计算机接收到的当前重新开始令牌以及最后一批结果。
在一些实施方式中,当系统使得辅助计算机在之前在辅助计算机上托管的分片的拆分之后按次序迭代通过数据的逻辑划分时,系统中所包括的主计算机可以能够将逻辑划分键与主计算机从辅助计算机接收的每个行相关联。主计算机可以在全局重新开始令牌中存储逻辑划分键以便稍后在重新开始期间使用。在分片边界自重新开始令牌生成以来已经改变之后,系统可以使用逻辑划分键来允许重新开始。
在一些实施方式中,计算机可以接收包括停止条件的特定查询。例如,停止条件可以指定计算机应该发送特定数量的结果、特定数量批次的结果或者用于特定时间段的批次的结果给请求设备。计算机发送批次的结果给请求设备,直到停止条件满足。
计算机可以稍后接收特定查询以及用于发送到请求设备的最后批次的结果的重新开始令牌。作为响应,计算机提供附加批次的结果给请求设备,例如直到第二停止条件被满足或者不存在附加结果要发送到请求设备。
在一些实施方式中,系统可以使用多个不同类型的重新开始令牌。例如,当系统没有开始处理输入时,系统可以例如保持重新开始令牌为空,并且在存储器中分配用于重新开始令牌的空间。系统可以在易失性存储器中分配用于重新开始令牌的空间,例如不分配或使用非易失性存储器中的空间用于重新开始令牌。当系统正在处理批次的结果且仍旧具有更多结果要发送到请求设备时,系统可以使用表示查询的处理的状态的数据作为重新开始令牌。系统在易失性存储器中的所分配的空间中存储状态,作为用于重新开始令牌的数据。当系统已经完成处理输入并确定对查询作出响应的最终批次的结果时,系统可以使用变量,例如其表示无穷大或无穷大的紧凑表示,作为重新开始令牌。
请求设备可以使用重新开始令牌以确定查询的状态。例如,请求设备可以分析重新开始令牌以确定是否存在请求设备将接收的附加结果或批次的结果。当请求设备使用重新开始令牌确定不存在附加结果或批次的结果时,请求设备可以使用从计算机接收到的批次的结果、停止等待附加批次的结果、或二者。
当请求设备使用重新开始令牌确定存在附加批次的结果时,请求设备可以使用当前接收的批次的结果、确定在预先确定的时间段内是否还没有接收到批次的结果、或二者。例如,请求设备可以使得呈现包括在一些批次的结果中的数据。
如果请求设备确定在预先确定的时间段内尚未从计算机接收到批次的结果,则请求设备可以确定与计算机的连接是否已经丢失。响应于确定与计算机的连接已经丢失,请求设备可以创建与计算机的第二连接或者与另一计算机的第二连接。请求设备使用第二连接来提供查询和最近重新开始令牌作为对对查询作出响应的结果的请求的一部分。请求设备可以提供查询和最近的重新开始令牌给计算机或另一计算机。
在一些示例中,例如除了处理对应查询的系统的状态之外,重新开始令牌可以指示跳过以确定当前批次的结果的当前输入的行的数量。在一些示例中,重新开始令牌可以指示输入数量,所述输入数量识别来自产生最近批次的结果中包括的最后条目作为处理对应查询的系统的状态的迭代器树的迭代器。当计算机接收重新开始令牌时,其可以根据重新开始令牌来更新其状态。计算机可以使用重新开始令牌来从当前输入请求数据,并且跳过由重新开始令牌识别的给定数量的行。
在一些实施方式中,系统可以使用深度优先遍历,例如条件深度优先遍历,生成重新开始令牌用于迭代器树。例如,系统可以导航迭代器树中的节点,例如每个节点表示用于处理查询的迭代器还确定包括状态信息的迭代器树中的最顶部节点。系统使用用于最顶部节点的状态信息生成重新开始令牌。系统可以为迭代器树的每个分支确定最顶部节点,例如当不同分支包括不同水平的状态信息时。
在一些示例中,系统可以基于子节点是否具有非空重新开始状态而确定是否前往迭代器树的更深层。系统可以使用非空重新开始状态来为迭代器树的对应分支创建重新开始令牌。系统可以为迭代器树的每个分支创建重新开始令牌并且组合每个分支的重新开始令牌来为整个迭代器树创建重新开始令牌。
系统可以以相同方式遍历迭代器树,其中在查询执行期间通过由迭代器树表示的迭代器来传递控制。例如,系统可以使用迭代器树确定用于特定查询的哪部分操作要发送到对应迭代器,例如计算机。随着系统遍历迭代器树以确定操作,系统可以为迭代器生成相应重新开始令牌,例如以便用于为整个迭代器树生成重新开始令牌。
在一些实施方式中,系统可以包括具有重新开始令牌的历史数据。例如,历史数据可以表示被采取以生成结果批次的确定性步骤。历史数据可以描述具有非确定性输出的系统能够怎样执行特定步骤,例如确定性步骤,来排序用于确定批次的结果的数据。例如,历史数据可以指示系统能够怎样以给定次序重现一些数量的行,使得在重新开始时系统或另一系统将只跳过之前包括在发送给请求设备的结果批次中的那些行而不跳过附加行。
当系统接收到重新开始令牌和历史数据时,系统可以使用重放模式来重放在历史数据中识别的所有步骤。重放模式可以是例如顺序模式或并行模式的模式,其中,系统按照输入数据在历史数据中被识别的次序抽出由历史数据识别的输入数据。一旦系统完成历史数据的重放,系统切换到其检索数据并创建结果批次的正常模式。在一些示例中,当系统以重放模式顺序地执行步骤时,系统可以以正常模式并行执行步骤,例如,当系统开始生成结果以向请求设备提供。
当迭代器行为取决于输入值或常数以及在迭代器之外或迭代器树中的后代迭代器产生的变量值二者时,系统可以生成历史数据。例如,系统,例如关系查询处理器,可以包括产生相关变量值的诸如“交叉应用”或“外部应用”的迭代器。当系统为产生相关变量值的迭代器生成重新开始令牌时,系统可以例如通过迭代器在重新开始发生之前生成重新开始令牌和允许由系统产生的值的重放的历史数据二者,例如替代指出迭代器在重新开始之前的查询的处理中是否停止。
当历史数据包括识别迭代器被呼叫、迭代器彼此呼叫、或二者的次序的数据以产生最后结果项时,系统可以确定重新开始令牌、历史数据、或二者是否包括用于迭代器树中特定迭代器的数据。例如,当使用重新开始令牌和历史数据来重新开始查询时,系统提供历史数据给将继续之前针对该查询所执行的工作的迭代器。系统可能不提供历史数据给将不继续之前针对该查询所执行的工作的任何迭代器。例如,对于不具有任何历史数据、不需要基于历史数据以可重复次序递送结果、或二者的特定迭代器,系统将不向特定迭代器提供重新开始令牌或历史数据。系统可以向特定迭代器只提供识别用于该特定迭代器的搜索操作的子查询。
在一些示例中,当特定迭代器将从开头开始其子迭代器,例如没有历史数据或重新开始令牌时,该特定迭代器在生成重新开始令牌时可以不从其子迭代器请求重新开始状态信息。重新开始令牌可以指示尚未执行任何工作。在一些实施方式中,当特定迭代器不取决于输入的可重复次序时,特定迭代器可以不从其子迭代器请求重新开始令牌。特定迭代器可以使用该特定迭代器已经从其子迭代器接收到的结果来生成重新开始令牌或重新开始令牌和历史数据。
在一些实施方式中,重新开始令牌可以包括指示重新开始令牌是否包括历史数据的标识符。例如,重新开始令牌可以包括历史标识符。历史标识符可以是布尔值,指示重新开始令牌是否包括历史数据。
在一些实施方式中,系统可以包括历史令牌,其包括与重新开始令牌分立的历史数据。通常,包括历史数据和具有一批结果的重新开始状态信息二者的任何系统可以被描述为包括具有历史数据的重新开始令牌而不管历史数据和重新开始状态信息是否在消息的顺序部分中或者被例如报头、响应数据或其他数据的其他数据所分开。
在一些实施方式中,重新开始令牌可以包括用以确定对应批次的结果的数据的标识符。例如,系统可以在重新开始令牌中包括用于数据库、分片、一部分表、一部分存储器、迭代器、或这些中两个或更多个的组合的标识符。系统可以使用标识符来确定哪些步骤对应于哪些数据、哪些批次的结果或哪些子查询。
在一些实施方式中,系统可以生成历史数据,所述历史数据包括向其应用历史数据的数据的标识符。例如,系统可以在历史数据中包括多个键,使得每个键指示向其应用例如步骤的对应历史数据的数据。当系统在历史数据中包括键时,系统可以在拆分之后使用所述键来重放历史。例如,当拆分减小了分片的边界时,系统可以使用键来确定历史中哪些步骤应用于特定新分片并在重放期间只执行那些步骤。
在一些实施方式中,系统可以包括多个层级的辅助计算机。例如,主计算机可以指派子查询给第一层级的辅助计算机。第一层级的辅助计算机中的每个计算机可以指派进一步子查询给第二层级的辅助计算机,使得每个第一层级辅助计算机与特定第二层级辅助计算机相关联。
迭代器树可以表示处理用于查询的操作的计算机的数量。例如,迭代器树中每个迭代器可以表示处理用于查询的操作的计算机。在一些示例中,单个计算机可以执行用于迭代器树中多个迭代器的操作,例如当单个计算机执行用于来自迭代器树的两个迭代器中每个迭代器的虚拟机时。迭代器树中的叶子节点可以表示生成结果并提供结果给由迭代器树中非叶子节点所表示的计算机的特定计算机。迭代器树中非叶子节点所表示的计算机可以从多个其他计算机(例如由叶子结点或非叶子节点表示的计算机)接收结果,并且组合接收到的结果。迭代器树中非叶子节点所表示的计算机可以与它们的子迭代器通信以生成重新开始令牌或重新开始令牌和历史数据二者。
在一些实施方式中,当系统包括两个或更多层级的辅助计算机时,并且例如不是在单个计算机处理查询或主计算机和一个层级的辅助计算机处理用于查询的操作时,系统可以使用历史数据。在一些实施方式中,当系统包括两个或更多个辅助计算机的并行处理,例如不管辅助计算机的层级时,系统可以使用历史数据。在一些实施方式中,当系统包括两个或更多个层级的辅助计算机且使用至少一些辅助计算机的并行处理时,系统可以使用历史数据。
在一些实施方式中,当系统并行生成结果批次并且为这些结果批次创建历史数据时,系统可以确定历史数据的大小是否满足阈值大小。例如,阈值大小可以是最大大小且系统可以确定历史数据的大小是否大于或几乎大于最大大小。
当历史数据的大小满足阈值大小时,系统可以停止并行生成结果并且开始顺序地生成结果。例如,系统可以确定该历史数据太大且不满足保持重新开始令牌的大小低于阈值大小的要求。系统可以继续包括历史数据作为重新开始令牌的一部分,同时更新重新开始令牌内的确定性值,且例如不增加历史数据的大小。系统可以在重新开始令牌中包括指示系统从并行处理切换为顺序处理的处理类型标识符,例如标志。系统可以包括指示系统何时从并行处理切换到顺序处理的数据。
在一些实施方式中,系统可以生成识别被采取以产生发送到请求设备的结果批次的步骤的历史数据,包括当前批次的结果,例如当前历史数据。在一些示例中,系统可以生成识别被采取或将要采取以产生应该发送给请求设备的结果批次的步骤的历史数据,例如下一历史数据。
在一些实施方式中,系统可以生成不同类型的历史数据,例如,系统可以确定是否使用当前历史数据、下一历史数据、或二者。系统可以使用所选类型的历史数据来创建重新开始令牌。当系统接收到重新开始令牌时,系统可以确定包括在重新开始令牌中的历史数据的类型。系统可以重放在历史数据中识别的步骤并随后基于历史数据的类型确定接下来要执行的步骤。当历史数据识别用于发送到请求设备的批次的结果的当前历史数据时,系统可以确定发送到请求设备的新结果批次,例如系统可以执行附加步骤来确定新结果批次。当历史数据识别用于还没有发送到请求设备的批次的结果的下一历史数据时,系统例如通过选择通过执行在下一历史数据中指示的操作所表示的结果,来生成新批次的结果。
当系统接收到使用并行和顺序处理二者以及查询所生成的重新开始令牌时,系统可以初始化开始于并行处理的系统的状态。在初始化期间,当系统识别用于指示从并行处理到顺序处理的切换的处理类型标识符的值时,系统从查询的并行处理切换到查询的顺序处理。
当顺序地处理可以并行处理的查询时,系统可以确定是否继续使用顺序处理来处理查询或者历史数据的大小是否将小到足以开始并行处理数据。例如,系统可以具有包括历史数据的当前重新开始令牌。随着系统确定附加批次的结果,系统可以通过移除确定系统的当前状态和确定历史数据是否小到足以再次允许并行处理不再需要的一些历史数据来更新历史数据。
系统可以包括迭代器接口。迭代器接口可以包括流程控制方法。流程控制方法可以包括转变迭代器通过各种阶段的方法,以指示对查询作出响应的数据以准备好,以指示没有对查询作出响应的附加数据,或者这些中两个或更多的组合。例如,迭代器接口可以包括信令机制,其允许迭代器指示其已经产生所有输出元组且迭代器没有更多要输出的了。
迭代器接口可以包括数据交换方法。数据交换方法可以包括识别输入值、输出值或二者的位置的方法。系统可以在确定最终元组或中间元组之后使用迭代器树中迭代器的内部状态以及使用可以通过数据交换方法访问的例如输出值的值来确定查询执行的状态。
在一些实施方式中,系统可以使用指示分立的重新开始令牌的迭代器树,每个分立的重新开始令牌用于针对查询而生成的操作的不同子查询。系统可以指派子查询中的每个子查询给执行操作以为相应子查询确定结果批次的辅助计算机。对于迭代器树中一些节点,系统可以使用指示对应辅助计算机是否已经开始处理相应子查询的“开始标志”、指示对应辅助计算机是否已完成处理相应子查询的“结束标志”、或二者。当系统并行处理子查询时,系统可以使用一个或两个标志。当系统顺序处理子查询时,系统可以使用一个或两个标志。
当系统确定分片拆分已发生时,系统可以为每个拆分生成分立的子查询。例如,当拆分加宽了分片的边界时,系统可以创建针对原始包括在该分片中的数据的第一子查询和针对新添加到该分片中的数据的第二子查询。系统提供第一子查询和第二子查询到托管该分片的辅助计算机以使得计算机确定对子查询中的每个子查询作出响应的结果批次并且从辅助计算机接收结果批次。例如,当系统具有分片{user(user1)/thread(1,10);user(user1)/thread(10,20);user(user1)/thread(20,30)}且确定分片之一变为user(user1)/thread(15,25)时;系统可以创建用于user(user1)/thread(15,20)的第一子查询以及用于user(user1)/thread(20,25)的第二子查询并且例如在不同请求中提供第一子查询和第二子查询到托管分片user(user1)/thread(15,25)的计算机。
当拆分减小了分片边界时,系统可以创建用于新分片边界的新子查询并且包括用于每个子查询的相同重新开始令牌。系统发送子查询到托管相应分片的相应辅助计算机。每个辅助计算机确定重新开始令牌是否指示对子查询作出响应的所有数据是否之前已经提供给系统。响应于确定对子查询作出响应的所有数据之前已经提供给系统,辅助计算机向系统提供消息,该消息指示所有数据之前被提供给系统。响应于确定对子查询作出响应的所有数据还没有提供给系统,辅助计算机确定重新开始令牌是否应用于辅助计算机上包括的分片。当重新开始令牌应用于在辅助计算机上包括的分片时,辅助计算机使用重新开始令牌来确定之前没有提供给系统的数据,并且使用所确定的之前未提供给系统的数据来生成结果批次。当重新开始令牌没有应用于在辅助计算机上包括的分片时,辅助计算机忽略重新开始令牌并且处理分片中的数据,好像辅助计算机没有接收到重新开始令牌一样。
5.0附加实施方式细节
本说明书中所述的主题和功能操作的实施例可以用数字电子电路、以有形体现的计算机软件或固件、虚拟机、虚拟机上执行的应用、计算机硬件,包括在本说明书中公开的结构及其结构等价物,或者以上述一个或多个的组合来实现。本说明书中所述的主题的实施例可以被实现为一个或多个计算机程序,即在有形非暂时性程序载体上编码以便由数据处理装置执行或控制数据处理装置的操作的计算机程序指令的一个或多个模块。可替选地或此外,程序指令可以在人工生成的传播信号上编码,例如机器生成的电、光或电磁信号,其被生成以编码信息用来传输到合适的接收机装置以便由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器阵列或设备、或者以上一个或多个的组合。
术语“数据处理装置”指的是数据处理硬件并包含用于处理数据的所有各种装置、设备和机器,包括例如可编程处理器、计算机、虚拟机、多个处理器或计算机。装置还可以是或者进一步包括专用逻辑电路,例如FPGA(现场可编程门阵列)或者ASIC(专用集成电路)。除了硬件之外,装置可以可选地包括为所述计算机程序创建执行环境的代码,例如构成处理器固件、协议栈、数据库管理系统、操作系统、或以上一个或多个的组合的代码。
计算机程序,也可被称为或描述为程序、软件、容器、软件应用、模块、软件模块、脚本或代码,可以以任何形式的编程语言来编写,包括编译或解释语言、或者声明或流程性语言,并且可以以任何形式部署,包括作为单独程序或者作为模块、组件、子例程、或适合用于计算环境中的其他单元。计算机程序可以但不必对应于文件系统中的文件。计算机程序可以存储在保持其他程序或数据的文件(例如,标记语言文档中存储的一个或多个脚本)的一部分中、专用于所述程序的单个文件中、或者多个协调文件中(例如,存储一个或多个模块、子程序或部分代码的文件)。计算机程序可以被部署为在一个计算机上或位于一个站点或分布在多个站点且由通信网络互连的多个计算机上执行。
本说明书中所述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机来执行以通过对输入数据操作并生成输出而执行功能。过程和逻辑流程还可以由专用逻辑电路来执行,且装置还可以被实现为专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。
适合于计算机程序的执行的计算机包括例如通用或专用微处理器或二者,或者任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或二者接收指令和数据。计算机的必要元件是用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括一个或多个大容量存储设备用来存储数据,例如磁、磁光盘、或光盘,或者操作耦合以从中接收数据或向其传送数据。但是,计算机不需要具有这样的设备。而且,计算机可以体现为其他设备,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收机、或者便携存储设备,诸如通用串行总线(USB)闪存驱动器,这仅列举几个。
适合存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括例如半导体存储器设备,例如EPROM、EEPROM以及闪存存储器设备;磁盘,例如内部硬盘或可移动磁盘;磁光盘;以及CD-ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路来补充,或者并入专用逻辑电路中。
为了提供与用户的交互,本说明书中所述的主题的实施例可以在具有诸如CRT(阴极射线管)或LCD(液晶显示器)监视器的用于向用户显示信息的显示设备以及用户能够用来向计算机提供输入的键盘和例如鼠标或轨迹球的指示设备的计算机上实现。其他类型的设备也可以用来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;而且来自用户的输入可以以任何形式接收,包括声学、语音、或触觉输入。此外,通过发送文档给由用户使用的设备以及从该设备接收文档,计算机可以与用户交互;例如,通过发送网页给用户设备上的网络浏览器以响应从网络浏览器接收的请求。
这里所述的主题的实施例可以用包括诸如数据服务器的后端组件、或者包括诸如应用服务器的中间件组件、或者包括诸如具有用户可以与本说明书中所述的主题的实施方式进行交互的图形用户界面或网络浏览器的客户端计算机的前端组件、或者一个或多个这样的后端、中间件或前端组件的组合的计算系统来实现。系统的组件可以由例如通信网络的任何形式或介质的数字数据通信来互连。通信网络的示例包括局域网(LAN)和广域网(WAN),例如互联网。
计算系统可以包括客户端和服务器。客户端和服务器通常彼此远离且典型地通过通信网络来交互。客户端和服务器的关系由于在相应计算机上运行且彼此具有客户端-服务器关系的计算机程序而出现。在一些实施例中,服务器发射例如HTML页面的数据到用户设备,例如用来显示数据给与作为客户端的用户设备交互的用户以及从该用户接收用户输入,。在用户设备上生成的数据,例如用户交互的结果,可以在服务器上从用户设备接收。
一个这样类型的计算机的示例在图3中示出,其示出一般计算机系统300的示意图。根据一个实施方式,系统300可以用于与之前所述的任何计算机实现的方法相关联而描述的操作。系统300包括处理器310、存储器320、存储设备330和输入/输出设备340。组件310、320、330和340中每个都使用系统总线340互连。处理器310能够处理用于在系统300内执行的指令。在一个实施方式中,处理器310是单线程处理器。在另一实施方式中,处理器310是多线程处理器。处理器310能够处理存储在存储器320中或存储设备330上的指令以在输入/输出设备340上显示用于用户界面的图形信息。
存储器320存储系统300内的信息。在一个实施方式中,存储器320是计算机可读介质。在一个实施方式中,存储器320是易失性存储器单元。在另一实施方式中,存储器320是非易失性存储器单元。
存储设备330能够为系统300提供大容量存储。在一个实施方式中,存储设备330是计算机可读介质。在各种不同的实施方式中,存储设备330可以是软盘设备、硬盘设备、光盘设备或磁带设备。
输入/输出设备340为系统300提供输入/输出操作。在一个实施方式中,输入/输出设备340包括键盘和/或指示设备。在另一实施方式中,输入/输出设备340包括显示单元,用于显示图形用户界面。
尽管本说明书包含许多具体实施方式细节,但这些不应该被解释为对可能要求保护的范围的限制,而应被解释为对可能特定于特定实施例的特征的描述。在本说明书中所述的在分立实施例的环境中的某些特征还可以在单个实施例中组合而实现。反之,在单个实施例的环境中描述的各种特征也可以分立地在多个实施例中实现或以任何合适的子组合的方式而实现。而且,尽管特征可以在上面被描述为在某些实施例中行动,甚至最初就是这样要求保护的,来自所要求保护的组合的一个或多个特征在一些情况下可以从组合中抹去,而所要求保护的组合可以被引导为子组合或子组合的变型。
类似地,尽管在附图中以特定次序描述了操作,其不应该被理解为要求这样的操作以所示的特定次序或者以顺序的次序来执行,或者所有说明的操作都被执行,以获取所需结果。在特定环境中,多任务和并行处理可能是有利的。而且,上面所述实施例中的各种系统模块和组件的分立不应该被理解为需要在所有实施例中这样分立,应该被理解的是,所述程序组件和系统通常能够在单个软件产品中集成在一起或者被打包到多个软件产品中。
已经描述了主题的特定实施例。其他实施例在所附权利要求的范围内。例如,权利要求中所述的动作可以以不同次序来执行且仍旧获取所需结果。作为一个示例,在附图中描绘的处理不必要求所示出的特定次序,或顺序的次序,来获取所需结果。在一些情况下,多任务和并行处理可能是有利的。

Claims (20)

1.一种计算机实现的方法,包括:
由计算机从请求设备接收特定查询;
使用数据存储系统确定对所述特定查询作出响应的当前结果,其中,所述计算机是主计算机并且向多个辅助计算机中的每一个指派子查询,所述计算机从所述辅助计算机接收批次的结果和对应的重新开始令牌,并且所述计算机组合表示来自所述辅助计算机的所述批次的结果中的每一个的数据以确定所述当前结果;
使用所述当前结果针对所述计算机处未被发送至所述请求设备的批次的结果生成全局重新开始令牌,其中,来自所述辅助计算机的重新开始令牌表示被执行以确定对特定子查询作出响应的多个结果的操作,并且能够被用来确定未包括在所述多个结果中的对所述特定子查询作出响应的新结果;以及
向所述请求设备提供消息,所述消息包括a)用于所述全局重新开始令牌的第一数据和b)用于所述当前结果的第二数据,
其中,所述计算机控制所述全局重新开始令牌的大小以保持所述全局重新开始令牌的大小低于阈值大小,所述计算机通过调节查询复杂度及用于处理查询的并行性程度中的一个或多个来控制所述全局重新开始令牌的大小。
2.如权利要求1所述的方法,其中,所述多个结果包括之前被提供给所述请求设备的对所述特定查询作出响应的一个或多个在先结果。
3.如权利要求1所述的方法,其中:
确定所述当前结果包括使用所述数据存储系统确定对所述特定查询作出响应的一个或多个当前行;
生成所述全局重新开始令牌包括:
确定存储在所述数据存储系统中的所述一个或多个当前行是通过键来排序的;以及
响应于确定存储在所述数据存储系统中的所述一个或多个当前行是通过键来排序的而确定所述一个或多个当前行的索引;以及
提供所述消息包括向所述请求设备提供所述消息,所述消息包括a)用于所述一个或多个当前行的所述索引的所述第一数据和b)识别所述一个或多个当前行的内容的所述第二数据。
4.如权利要求3所述的方法,其中,确定所述一个或多个当前行的索引包括确定所述一个或多个当前行中的最后一行的索引。
5.如权利要求1所述的方法,其中:
确定所述当前结果包括使用所述数据存储系统确定对所述特定查询作出响应的一个或多个当前行;
生成所述全局重新开始令牌包括:
确定所述一个或多个行不是通过特定键来排序的;以及
响应于确定所述一个或多个行不是通过特定键来排序的而识别为确定所述一个或多个当前行而做出的多个确定性决定,其中,所述多个确定性决定允许系统确定包括所述当前结果的所述多个结果;以及
提供所述消息包括向所述请求设备提供所述消息,所述消息包括a)识别所述多个确定性决定中的每个确定性决定的所述第一数据和b)识别所述一个或多个当前行的内容的所述第二数据。
6.如权利要求5所述的方法,包括:
由所述计算机确定用于响应于所述特定查询生成结果的两个或更多特定操作能够并行执行;
针对所述两个或更多特定操作中至少两个特定操作中的每个特定操作生成相应的子查询;以及
将每个子查询指派给迭代器,所述迭代器将执行与该子查询相关联的特定操作,使得两个或更多个迭代器并行处理相应的子查询,其中,确定所述一个或多个行不是通过特定键来排序的包括确定所述两个或更多个迭代器正在并行处理相应的子查询。
7.如权利要求1到6中任意一项所述的方法,其中,生成所述全局重新开始令牌包括生成所述全局重新开始令牌而不在永久存储中存储所述全局重新开始令牌。
8.如权利要求1到6中任意一项所述的方法,其中,生成所述全局重新开始令牌包括在易失性存储器中存储所述全局重新开始令牌而不在非易失性存储器中存储所述全局重新开始令牌。
9.如权利要求1到6中任意一项所述的方法,包括:
在向所述请求设备提供所述消息之后从所述请求设备接收所述特定查询和所述全局重新开始令牌;
使用第二数据存储系统和所述全局重新开始令牌来确定未包括在所述多个结果中的对所述特定查询作出响应的第二结果;
确定第二全局重新开始令牌,所述第二全局重新开始令牌表示被执行以确定所述第二结果和所述多个结果的操作;以及
向所述请求设备提供第二消息,所述第二消息包括a)用于所述第二全局重新开始令牌的第三数据和b)用于所述第二结果的第四数据。
10.一种用于处理查询的系统,包括:
数据处理装置;以及
非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质与所述数据处理装置进行数据通信且存储指令,所述指令在由所述数据处理装置执行时使得所述数据处理装置执行操作,所述操作包括:
发送特定查询到计算机;以及
针对对所述特定查询作出响应的多个结果中的每个当前结果:
从所述计算机接收消息,所述消息包括a)用于相应的当前结果的第一数据和b)用于全局重新开始令牌的第二数据、针对批次的结果生成的所述全局重新开始令牌、以及从被指派子查询的辅助计算机接收的重新开始令牌,其中,来自所述辅助计算机的所述重新开始令牌表示被执行以确定当前由所述系统接收的包括相应的所述当前结果的多个结果的操作且能够被用来确定未包括在所述多个结果中的对特定子查询作出响应的新结果,
其中,所述计算机控制所述全局重新开始令牌的大小以保持所述全局重新开始令牌的大小低于阈值大小,所述计算机通过调节查询复杂度及用于处理查询的并行性程度来控制所述全局重新开始令牌的大小。
11.如权利要求10所述的系统,其中,接收所述消息包括从所述计算机接收所述消息,所述消息包括a)用于所述当前结果的所述第一数据和b)识别所述计算机的特定状态以确定当前由所述系统接收的所述多个结果的所述第二数据。
12.如权利要求11所述的系统,其中,所述第二数据包括识别当前由所述系统接收的所述多个结果的索引。
13.如权利要求11所述的系统,其中,所述第二数据识别由所述计算机执行以确定当前由所述系统接收的所述多个结果的一个或多个确定性步骤。
14.如权利要求10到13中任意一项所述的系统,其中,发送所述特定查询到所述计算机包括跨连接将所述特定查询发送到所述计算机,所述操作包括:
在接收到用于所述多个结果中的每个结果的消息之后,确定从所述计算机接收到的最近的全局重新开始令牌;
提供所述特定查询和所述最近的全局重新开始令牌到第二计算机;以及
从所述第二计算机接收消息,所述消息包括用于第二结果的第三数据,所述第二结果对所述特定查询作出响应且未包括在所述多个结果中,以及用于表示第二全局重新开始令牌的第四数据,所述第二全局重新开始令牌表示被执行以确定所述第二结果和所述多个结果的操作。
15.如权利要求14所述的系统,其中由所述数据处理装置执行的操作进一步包括:
在接收到用于所述多个结果中的每个结果的消息之后,确定与所述计算机的连接不再存在,其中,确定从所述计算机接收到的所述最近的全局重新开始令牌是响应于确定与所述计算机的所述连接不再存在。
16.如权利要求14所述的系统,所述由所述数据处理装置执行的操作进一步包括:
在接收到用于所述多个结果中的每个结果的消息之后,确定从所述计算机请求用于所述特定查询的附加结果,其中,确定从所述计算机接收到的所述最近的全局重新开始令牌是响应于确定请求用于所述特定查询的附加结果。
17.如权利要求10到13中任意一项所述的系统,所述由所述数据处理装置执行的操作进一步包括:
在发送所述特定查询到所述计算机之前从请求设备接收所述特定查询,其中,发送所述特定查询到所述计算机包括:响应于从所述请求设备接收到所述特定查询,向所述计算机发送表示用于所述特定查询的操作的第一部分的第一子查询;
向第二计算机发送表示用于所述特定查询的操作的第二部分的第二子查询;
针对对所述特定查询作出响应的第二多个结果中的每个第二当前结果:
从所述第二计算机接收第二消息,所述第二消息包括用于相应的该第二当前结果的第三数据和用于第二重新开始令牌的第四数据,所述第四数据表示使用所述第二子查询执行以确定当前由所述系统接收的包括相应的该第二当前结果的所述第二多个结果的操作;
确定最近的当前结果和最近的第二当前结果;以及
向所述请求设备发送响应,所述响应识别i)所述最近的当前结果和对应的重新开始令牌和ii)所述最近的第二当前结果和对应的第二重新开始令牌。
18.如权利要求17所述的系统,所述由所述数据处理装置执行的操作进一步包括:
确定向所述第二计算机指派所述第二子查询;以及
在向所述第二计算机发送所述第二子查询之前:
确定尚未从所述第二计算机接收到第二当前结果;
确定已经从所述计算机接收到当前结果和对应的全局重新开始令牌;以及
向所述请求设备发送识别所述当前结果和所述对应的全局重新开始令牌的第一响应,其中,向所述第二计算机发送所述第二子查询发生在向所述请求设备发送所述第一响应之后。
19.如权利要求17所述的系统,进一步包括:
所述计算机;以及
所述第二计算机。
20.一种存储指令的非暂时性计算机可读存储介质,所述指令在由数据处理装置执行时使得所述数据处理装置执行操作,所述操作包括:
由计算机从请求设备接收特定查询;
使用数据存储系统确定对所述特定查询作出响应的当前结果,其中,所述计算机是主计算机并且向多个辅助计算机中的每一个指派子查询,所述计算机从所述辅助计算机接收批次的结果和对应的重新开始令牌,并且所述计算机组合表示来自所述辅助计算机的所述批次的结果中的每一个的数据以确定所述当前结果;
使用所述当前结果针对所述计算机处未被发送至所述请求设备的批次的结果生成全局重新开始令牌,其中,来自所述辅助计算机的重新开始令牌表示被执行以确定对特定子查询作出响应的多个结果的操作并且能够被用于确定未包括在所述多个结果中的对所述特定子查询作出响应的新结果;以及
向所述请求设备提供消息,所述消息包括a)用于所述全局重新开始令牌的第一数据和b)用于所述当前结果的第二数据,
其中,所述计算机控制所述全局重新开始令牌的大小以保持所述全局重新开始令牌的大小低于阈值大小,所述计算机通过调节查询复杂度及用于处理查询的并行性程度中的一个或多个来控制所述全局重新开始令牌的大小。
CN201710827669.1A 2016-09-14 2017-09-14 查询可重新开始性 Active CN107818129B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111137364.0A CN113886430A (zh) 2016-09-14 2017-09-14 查询可重新开始性

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/264,797 2016-09-14
US15/264,797 US10169415B2 (en) 2016-09-14 2016-09-14 Query restartability

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202111137364.0A Division CN113886430A (zh) 2016-09-14 2017-09-14 查询可重新开始性

Publications (2)

Publication Number Publication Date
CN107818129A CN107818129A (zh) 2018-03-20
CN107818129B true CN107818129B (zh) 2021-10-08

Family

ID=59738520

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201710827669.1A Active CN107818129B (zh) 2016-09-14 2017-09-14 查询可重新开始性
CN202111137364.0A Pending CN113886430A (zh) 2016-09-14 2017-09-14 查询可重新开始性

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202111137364.0A Pending CN113886430A (zh) 2016-09-14 2017-09-14 查询可重新开始性

Country Status (6)

Country Link
US (4) US10169415B2 (zh)
EP (1) EP3507705B1 (zh)
CN (2) CN107818129B (zh)
DE (2) DE202017105367U1 (zh)
GB (1) GB2554810A (zh)
WO (1) WO2018052660A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190129981A1 (en) * 2017-10-31 2019-05-02 Sap Se Asynchronous distributed data cleansing
US10635605B2 (en) * 2018-03-13 2020-04-28 International Business Machines Corporation Shared memory inter-enclave communication
US11190514B2 (en) * 2019-06-17 2021-11-30 Microsoft Technology Licensing, Llc Client-server security enhancement using information accessed from access tokens
US10915418B1 (en) * 2019-08-29 2021-02-09 Snowflake Inc. Automated query retry in a database environment
US20220107738A1 (en) * 2020-10-06 2022-04-07 Kioxia Corporation Read controller and input/output controller
US11734291B2 (en) * 2020-10-21 2023-08-22 Ebay Inc. Parallel execution of API calls using local memory of distributed computing devices

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1860479A (zh) * 2003-09-30 2006-11-08 皇家飞利浦电子股份有限公司 在具有内容目录服务的系统中查询高速缓存
CN101388031A (zh) * 2003-04-25 2009-03-18 汤姆森环球资源公司 分布式搜索方法、体系结构、系统及软件
CN101517571A (zh) * 2006-09-15 2009-08-26 微软公司 搜索结果的高效导航
CN101650746A (zh) * 2009-09-27 2010-02-17 中国电信股份有限公司 一种对排序结果进行验证的方法和系统
US8489647B2 (en) * 2010-08-31 2013-07-16 International Business Machines Corporation Use-case based configuration of an object-relational mapping framework
US8572051B1 (en) * 2012-08-08 2013-10-29 Oracle International Corporation Making parallel execution of structured query language statements fault-tolerant
US9148329B1 (en) * 2011-11-30 2015-09-29 Google Inc. Resource constraints for request processing

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4751702A (en) 1986-02-10 1988-06-14 International Business Machines Corporation Improving availability of a restartable staged storage data base system that uses logging facilities
US6253212B1 (en) 1998-06-23 2001-06-26 Oracle Corporation Method and system for maintaining checkpoint values
US6351754B1 (en) 1998-06-23 2002-02-26 Oracle Corporation Method and system for controlling recovery downtime
US6289474B1 (en) 1998-06-24 2001-09-11 Torrent Systems, Inc. Computer system and process for checkpointing operations on data in a computer system by partitioning the data
US7051034B1 (en) * 2002-12-18 2006-05-23 Oracle International Corporation Dynamic optimization for processing a restartable sub-tree of a query execution plan
GB0308264D0 (en) * 2003-04-10 2003-05-14 Ibm Recovery from failures within data processing systems
US7634687B2 (en) 2005-01-13 2009-12-15 Microsoft Corporation Checkpoint restart system and method
US7822717B2 (en) 2006-02-07 2010-10-26 Emc Corporation Point-in-time database restore
US7490110B2 (en) 2006-03-24 2009-02-10 International Business Machines Corporation Predictable query execution through early materialization
US7853624B2 (en) * 2006-05-02 2010-12-14 International Business Machines Corporation System and method for optimizing distributed and hybrid queries in imperfect environments
US7725470B2 (en) 2006-08-07 2010-05-25 Bea Systems, Inc. Distributed query search using partition nodes
US7984043B1 (en) 2007-07-24 2011-07-19 Amazon Technologies, Inc. System and method for distributed query processing using configuration-independent query plans
US8316036B2 (en) 2007-08-31 2012-11-20 Microsoft Corporation Checkpointing iterators during search
US20090083238A1 (en) * 2007-09-21 2009-03-26 Microsoft Corporation Stop-and-restart style execution for long running decision support queries
US8185505B1 (en) 2008-06-20 2012-05-22 Emc Corporation Techniques for processing recovery points
US7991744B2 (en) 2008-07-10 2011-08-02 International Business Machines Corporation Method and system for dynamically collecting data for checkpoint tuning and reduce recovery time
US9183255B1 (en) 2009-12-30 2015-11-10 Teradata Us, Inc. Spool management and checkpointing in a multi-database system
US8396852B2 (en) * 2010-09-20 2013-03-12 International Business Machines Corporation Evaluating execution plan changes after a wakeup threshold time
US8726076B2 (en) 2011-05-27 2014-05-13 Microsoft Corporation Operator state checkpoint markers and rehydration
US10102248B2 (en) * 2012-10-10 2018-10-16 TmaxData Co., Ltd. Join type for optimizing database queries
US9026504B2 (en) * 2013-02-04 2015-05-05 Bank Of America Corporation Multi-row database data loading for enterprise workflow application
US20150248461A1 (en) * 2014-02-28 2015-09-03 Alcatel Lucent Streaming query deployment optimization
CN105488208B (zh) * 2015-12-11 2019-03-08 北京奇虎科技有限公司 数据查找方法与装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101388031A (zh) * 2003-04-25 2009-03-18 汤姆森环球资源公司 分布式搜索方法、体系结构、系统及软件
CN1860479A (zh) * 2003-09-30 2006-11-08 皇家飞利浦电子股份有限公司 在具有内容目录服务的系统中查询高速缓存
CN101517571A (zh) * 2006-09-15 2009-08-26 微软公司 搜索结果的高效导航
CN101650746A (zh) * 2009-09-27 2010-02-17 中国电信股份有限公司 一种对排序结果进行验证的方法和系统
US8489647B2 (en) * 2010-08-31 2013-07-16 International Business Machines Corporation Use-case based configuration of an object-relational mapping framework
US9148329B1 (en) * 2011-11-30 2015-09-29 Google Inc. Resource constraints for request processing
US8572051B1 (en) * 2012-08-08 2013-10-29 Oracle International Corporation Making parallel execution of structured query language statements fault-tolerant

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
A latency and fault-tolerance optimizer for online parallel query plans;Prasang Upadhyaya 等;《Proceedings of the 2011 ACM SIGMOD International Conference on Management of data》;20110616;241-252 *
A Lightweight Multidimensional Index for Complex Queries over DHTs;Yuzhe Tang 等;《IEEE Transactions on Parallel and Distributed Systems》;20111231;第22卷(第12期);2046-2054 *
一种支持高维数据查询的并行索引机制;王寅峰 等;《华中科技大学学报(自然科学版)》;20110630;第39卷;156-160 *

Also Published As

Publication number Publication date
WO2018052660A1 (en) 2018-03-22
US20190155808A1 (en) 2019-05-23
US20230306028A1 (en) 2023-09-28
EP3507705B1 (en) 2020-06-17
US10956421B2 (en) 2021-03-23
DE102017120486A1 (de) 2018-03-15
DE202017105367U1 (de) 2018-01-12
US20210191931A1 (en) 2021-06-24
US10169415B2 (en) 2019-01-01
GB2554810A (en) 2018-04-11
GB201714581D0 (en) 2017-10-25
EP3507705A1 (en) 2019-07-10
US20180075103A1 (en) 2018-03-15
US11698905B2 (en) 2023-07-11
CN113886430A (zh) 2022-01-04
CN107818129A (zh) 2018-03-20

Similar Documents

Publication Publication Date Title
CN107818129B (zh) 查询可重新开始性
US8386473B2 (en) Process architecture for elastic stateful shared nothing system
JP6107429B2 (ja) データベースシステム、検索方法およびプログラム
Ananthanarayanan et al. Photon: Fault-tolerant and scalable joining of continuous data streams
US10732836B2 (en) Remote one-sided persistent writes
US20150032694A1 (en) Scalable Coordination Aware Static Partitioning For Database Replication
US20160065498A1 (en) Distributed transaction subsystem
US20120059823A1 (en) Index partition maintenance over monotonically addressed document sequences
US10452655B2 (en) In-memory cursor duration temp tables
US20160026660A1 (en) Distribution of an object in volatile memory across a multi-node database
US10642860B2 (en) Live migration of distributed databases
CA2932403A1 (en) Systems and methods for hosting an in-memory database
US11409722B2 (en) Database live reindex
KR102182493B1 (ko) 스몰 데이터 기계 학습을 위한 노드 관리 시스템
CN111125248A (zh) 一种大数据存储解析查询系统
EP4242862A2 (en) Rdma-enabled key-value store
US20220156163A1 (en) Fault tolerance in scale-out distributed query processing appliance
US11455219B2 (en) High availability and automated recovery in scale-out distributed database system
Suciadi Analysis of MapReduce Model on Big Data Processing within Cloud Computing
Ishida Fault tolerance for distributed explicit-state model checking

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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: American California

Applicant after: Google limited liability company

Address before: American California

Applicant before: Google Inc.

GR01 Patent grant
GR01 Patent grant