用于分布式文件存储和索引服务的方法和装置的制作方法

文档序号:6570593阅读:262来源:国知局
专利名称:用于分布式文件存储和索引服务的方法和装置的制作方法
技术领域
本发明涉及数据存储和取回,更具体地涉及用于数据存储器的可 搜索的索引。
背景技术
有时候被简称为"网络,,的互联网是计算机网络的世界范围内的 系统,其中在任何一个计算机的客户端可以在允许的情况下从任何其 他计算机获取信息。互联网的最广泛使用的部分是通常被简写为
"WWW,,的万维网,其通常,皮称为"Web"。 Web可以,皮定义为所有的 资源(例如网页和网站)和在互联网上使用超文本传输协议(HTTP) 或其变化形式来访问资源的客户端。网站是包括被称为主页的开始文 件的Web文件的有关集合。从主页中,客户端可以导航到网站上的 其他网页。Web服务器程序是使用客户端/服务器模型和HTTP来对 Web客户端提供形成网站的网页的文件的程序,Web客户端的计算 机包括转发请求并且显示响应的HTTP客户端程序(例如Web浏览 器)。Web服务器程序可以托管一个或更多网站。 数据存储
通过各种应用来存储用于访问的不同类型的数据对象的数据存 储器在计算机系统和应用、联网、互联网和相关的技术领域中是所关 心的和开发的主要领域。按照惯例,开发者创建其自己的数据存储解 决方案来存储数据对象,用杠杆作用影响现货供应的数据库产品如 Oraele/MySql数据库以开发数据存储解决方案,或对数据存储解决方 案依靠第三方提供者。然而,提供数据存储解决方案,数据对象可以 被存储到数据存储器并且从数据存储器取回。 一般,数据存储解决方 案提供可用来从数据存储器中取回数据对象的一种或更多类型的定
位器。 一般的"定位器"是文件路径类型的定位器,其中客户端提供文 件路径,包括特定的文件名,以从在文件路径中被指定的数据存储器 的某个位置取回特定的数据对象(例如,文件)。然而,文件路径不 是非常灵活的,因为期望的数据对象只可通过文件/路径名指定。#>据 期望的数椐对象的其他属性,文件路径机制以及用于从数据存储器中 取回数据对象的其它传统的"定位器"机制一般不提供从数据存储器 取回数据对象的灵活性。例如,客户端可能希望根据类别、公司、类 型、或可能与数据对象有关的无数其他属性中的任何一个来从数据存 储器取回数据对象。常规的文件路径不提供这样灵活的取回方法。
存在"一次性,,数据存储解决方案,其可根据其他属性提供比仅仅 一个文件路径/文件名更加灵活的用于从数据存储器查询/取回数据对 象的机制。按照常规,不同的开发者对不同的应用趋向于反复以不改 变其他问题的方式来解决此相同的数据存储问题,不灵活地处理其他 数据存储需要,和/或使其解决方案以证明在短期和/或长期中是昂贵
的"不用定制的,,技术如Oracle/MySql为基础。随着数据存储器的增 长,这些传统的数据存储解决方案通常需要数据存储器管理员来执行 或管理监控、分区、查询优化、存储程序、增加新硬件、危机/紧急程 序(例如,当存储系统减少时)等等。此外,对于这些传统的数据存 储解决方案,假如客户端想要增加可以用来查询和取回数据对象的新 属性,则表设计必须改变以支持这些新属性。

发明内容
描述了用于通用的可搜索的数据服务的方法和装置的各种实施 方式。在一个实施方式中,可搜索的数据服务可以作为Web服务来 实现,该Web服务允许开发者存储表示为{名称,值}对的属性,{名 称,值}对与存储在数据存储器中的数据对象(实体)相关联。与实 体相关联的属性可以被自动编索引以用在搜索中。可搜索的数据服务 的实施方式可以根据一个体系结构来实现,开发者可访问该体系结构 来开发客户端应用程序的数据存储器的搜索前端(search frontend),
并且对可靠、快速和可升级的数据存储器建立和更新可搜索的索引。 可搜索的数据服务的实现对于客户端/开发者可以是透明的。客户端和 /或开发者仅需要知道对可搜索的数据服务的最小的外部暴露的接口。 可搜索的数据服务的实施方式可以提供对后端数据存储器的可 搜索的索引以及建立并查询可搜索的索引的接口,所述可搜索的索引 根据与每个定位器有关的属性列表来使客户端应用程序能够搜索和 取回后端数据存储器中被存储的实体的定位器。这些实体可在可搜索
的数据服务中通过实体的定位器在可搜索的索引中被识别。每个定位 器可有表示为{名称,值}对的实体的相关的属性组。注意,定位器本 身可以被认为是实体的属性之一。
可搜索的数据服务的一个实施方式可以被实现为具有Web服务 接口的Web服务,该Web服务接口把对可搜索的数据服务的功能的 一个或更多调用暴露给客户端应用程序。此Web服务接口使开发者 能够为不同的客户端应用程序建立搜索前端,这些客户端应用程序可 通过Web服务接口来访问可搜索的数据服务的功能,以搜索和取回 被存储在后端数据存储器中的数据实体的定位器。通过杠杆作用影响 可搜索的数据服务作为对数据存储器的搜索前端的应用程序,可以被
管理开销,并且搜索速度可使用例如索引、查询计划和并行性被自动 地最优化。
可搜索的数据服务提供可搜索的索引,并且其本身本质上不是数 据存储器。可搜索的数据服务的实施方式可以将数据的搜索和编索引 与数据的实际存储分开。后端数据存储器可以实现为其中定位器可以 用来定位和取回实体的任何类型的数据存储系统,并且可以驻留在网 络、局域网(LAN)、广域网(WAN)或互联网上的任何地方,或 者可以甚至在本地连接到计算机系统或系统的数据存储器上实现。可
的索引。例如,实施方式可以用来向存储在数据库中的数据和各种特 定的或混合类型的文件的存储库提供可搜索的索引,包括但不限于文 本、数字图像和数字音频文件。然而注意,可搜索的索引的实施方式 可用于可能没有后端数据存储器的应用中。在这些应用中,在可搜索 的索引中被存储为{名称,值}对的属性是数据。
可搜索的数据服务的实施方式可以包括机制,该机制使可搜索的 数据服务能够容易调节并且提供可搜索的索引的冗余、可靠性和高度 可用性,而客户端应用程序的开发者不需要任何知识和额外的努力。 这些机制可以包括但不限于用于建立可搜索的索引的机制、用于给可 搜索的索引分区的机制、用于复制可搜索的索引的机制、用于在可搜 索的数据服务中处理节点的故障的机制以及用于在可搜索的数据服 务中自动监控和控制节点的机制。
可搜索的数据服务的实施方式可以被实现为在多个主机或节点 上的分布式系统。在一个实施方式中,节点可以包括在可搜索的数据 服务内按规定路线将请求从客户端系统发送到适当的节点的协调器 节点、处理查询请求的过程的查询节点、以及存储并且管理可搜索的 索引的存储节点。在一个实施方式中,在可搜索的数据服务实施方式
中,在节点和部件中间的通信可以至少部分地通过闲聊(gossip)协 议和反熵(anti-entropy)协议而变得容易。


图1是示出提供Web服务接口的示例性系统配置、并且显示在 Web服务客户端和Web服务提供者之间的交互作用的结构图。
图2示出了根据一个实施方式的在客户端和可搜索的数据服务 之间的关系和数据流。
图3示出了根据一个实施方式的可搜索的数据服务的示例性高 级别功能体系结构。
图4示出了根据一个实施方式的可搜索的数据服务的示例性网 络体系结构。
图5A和5B示出了根据一个实施方式用于实现可搜索的数据服 务的方法,该方法处理服务请求以在可搜索的索引中存储可搜索的数
据服务对象,并且在可搜索的索引中的数据存储器中定位对实体的实
体标识符(eID )。
图6示出了根据一个实施方式用于可搜索的数据服务的示例性
较低级别的模块体系结构。
图7示出了根据一个实施方式用于在可搜索的数据服务系统中
对可搜索的索引分区的方法。
图8示出了根据一个实施方式用于在可搜索的数据服务系统中
复制可搜索的索引的分区的方法。
图9A和9B示出了根据可搜索的数据服务的一个实施方式,对
用户的可搜索的索引、每个用户的数据(eID)分离到存储桶(bucket)
中、和存储桶的分区。
图9c示出了根据一个实施方式通过复制分区的数据复制。 图IO示出了根据一个实施方式在复制组中的分区的分离。 图11示出了根据一个实施方式的示例性存储节点及其组件。 图12示出了根据一个实施方式的可搜索的数据服务的不同组件
并且进一步示出了组件中间的数据流,该组件可以组成查询子系统或
与查询子系统相互作用以执行来自可搜索的数据服务的客户端的查 询服务。
图13示出了根据一个实施方式的标识符环。 图14示出了根据一个实施方式的单个存储节点的示例性结构。 图15是根据一个实施方式的可搜索的数据服务的应力管理方法 的流程图。
图16示出了根据一个实施方式在可搜索的数据服务中的复制组 的生存周期。
图17示出了根据一个实施方式用于监控在可搜索的数据服务中 的组成员资格和状况的方法。
图18示出了根据一个实施方式在可搜索的数据服务中的管理控 制台的高级别体系结构。
图19示出了根据一个实施方式在网络环境中的可搜索的数据服
务的实现。
图20是示出了可以实现实施方式的计算机系统的示例性实施方 式的结构图。
虽然本发明在这里作为例子对几个实施方式和原理图进行了描 述,但本领域的技术人员应认识到,本发明不限于所描述的实施方式 和附图。应理解,这些附图和对其的详细描述并不是用来将本发明限 制到所公开的特定形式,而是相反,本发明覆盖落入本发明的实质和 范围内的所有修改、等效和备选方案,如被附加的权利要求定义的。 在这里使用的标题仅仅是用于组织的目的,而不意味着用于限制说明 书或^f又利要求的范围。如在整个申请中^f吏用的,词"可以(may)"以 许可的含义(即,意味着有可能),而不是强制的含义(即,意味着 必须)使用。类似地,词"包括(include) ", "including", "includes,, 意味着包括但不限于。
具体实施例方式
描述了用于通用的可搜索的数据服务的方法和装置的不同实施 方式。在一个实施方式中,可搜索的数据服务可以实现为Web服务, 该Web服务允许开发者存储表示为(名称,值}对的属性,{名称,值} 对与在数据存储器中的数据对象(实体)相关。与实体相关的属性可 被自动编索引以用在搜索中。搜索表达式可以对属性执行逻辑和算术 操作,以找到和取回数据对象或被实体的定位器(也称为实体标识符 或eID)识别的实体。可搜索的数据服务的实施方式可以依据这里所 描述的体系结构来实现,开发者可以通过Web服务接口来访问该体 系结构以为容易实现的数据存储器提供客户端应用程序的搜索前端, 并且为可靠、快速和可升级的数据存储器建立和更新可搜索的索引。
可搜索的数据服务的实施方式可以提供对后端数据存储器的可 搜索的索引以及建立和查询可搜索的索引的接口,所述可搜索的索引 使客户端应用程序能够按照与每个定位器相关的属性列表来搜索和 取回在后端数据存储器中存储的数据的定位器(在数据存储器中数据
的单位或数据对象在这里可以称为实体)。后端数据存储器可以实现 为任何类型的数据存储系统并且可以存储任何类型的数据对象(实 体),其中定位器可以用来定位和取回实体。在可搜索的数据服务中, 实体可以通过数据存储器中实体的定位器来描述,该定位器可以-故称为实体标识符或elD。每个定位器或eID可以具有4皮表示为{名称,值} 对的相关的实体属性组。注意,定位器或eID本身可被考虑为在数据 存储器中的实体的属性之一。可以提供查询接口和协议,其可用来按 照一个或更多与eID相关的属性从可搜索的数据服务中查询和接收 eID列表。
传统的Web模型允许客户端通过HTTP客户端程序如Web浏 览器来访问Web资源(例如应用程序、服务和数据)。被称为Web 服务的技术可以用来提供对Web资源的计划性访问。Web服务可以 用于通过Web服务接口来给Web软件开发者提供对Web资源的计 划性访问,包括在Web连接的计算机例如Web服务系统上托管的才支 术平台(例如应用程序和服务)和数据(例如产品目录和其他数据库)。 一般来说,Web服务接口可以配置成为请求某个服务被执行的客户端 和服务提供者之间的通信提供标准交叉平台API (应用程序接口 )。 在一些实施方式中,Web服务接口可以配置为支持文件或消息的交 换,包括描述服务请求和对该请求的响应的信息。这种文件或消息可 以使用标准化的Web协议如超文本传输协议(HTTP )来交换,并且 可以用与平台无关的数据格式如可扩展标记语言(XML)被格式化。
图1是示出提供Web服务接口的示例性系统配置并显示Web服 务客户端与Web服务提供者之间的交互作用的结构图。在本例中, Web服务接口 106可以在与互联网IOO相连的服务器130上实现。此 服务器130可以被称为Web服务提供者。服务器130,或可选地与服 务器130相连的一个或更多其他服务器,可以包括一个或更多应用程 序或服务108。服务器130可以与用于在数据库142中存储信息的数 据存储器140相连。数据库142可以包括任何类型的数据。
服务器120可以与互联网100相连。服务器120可托管Web月良
务客户端124。 Web服务客户端124可以配置为通过Web服务接口 106计划性地访问服务器130的应用程序或服务108和/或数据库142。 注意,Web服务接口没有提供Web浏览器接口 ,而是提供了经由API 的计划性的接口,应用程序或服务108的至少一些功能和/或数据库 142中的至少一些数据可以被Web服务客户端124计划性地访问。还 要注意,服务器120可以提供客户端122通过Web浏览器可以访问 的网站,并且Web服务客户端124可以配置为通过Web服务接口 106 访问应用程序或服务108的至少一些功能和/或服务器130的数据库 142中的至少一些数据,以通过由服务器120提供的网站来提供应用 程序或服务108的至少 一些功能和/或数据库142中的至少 一些数据。 进一步注意,Web服务客户端124本身可以为另一个Web服务。
为了访问Web服务提供者130提供的应用程序、服务或数据, Web服务客户端124可以通过互联网IOO向Web服务接口 106发送 请求消息。这个请求消息通过网络和互联网基础i殳施,穿过Web月l 务客户端124的本地网络路由器、交换机、防火墙等,穿过互联网中 枢前进,到达Web服务提供者的本地网络,到达服务器130,并接着 到达Web服务接口 106。 Web服务提供者130接着可以处理该请求, 例如通过执行应用程序或服务108的指示的功能或访问数据库142中 被指示的数据。Web服务接口 106接着可以通过互联网100,向后通 过本地网络和互联网中枢,在响应消息中将处理的结果返回给Web 服务客户端124。
可搜索的数据服务的一个实施方式可以实现为具有Web服务接 口的Web服务,该接口对于客户端应用程序暴露对可搜索的数据服 务的功能的一个或更多Web服务调用。这个Web服务接口可以使开 发者能够容易地为多种客户端应用程序建立搜索前端,客户端应用程 序通过Web服务接口来访问可搜索的数据服务的功能,以搜索和取 回存储在后端数据存储器中的不同类型的数据。通过杠杆作用影响可 搜索的数据服务以便为数据存储器实现搜索前端的应用程序,可以自
理开销,并且搜索速度可以使用例如索引、查询计划和并行性被自动 最优化。
可搜索的数据服务的实施方式可以提供便宜的、容易实现的和容 易维护的可搜索的索引以及对可搜索的索引的接口,可通过杠杆作用
影响所述可搜索的索引以提供数据存储器的搜索前端,该搜索前端可 满足多种不同的应用程序的搜索需要。可搜索的数据服务提供可搜索 的索引,并且本身本质上不是数据存储器。可搜索的数据服务的实施 方式可以从数据的实际存储中分离数据的搜索和编索引。后端数据存 储器可以实现为其中定位器可以用来定位和取回实体的任何类型的
数据存储系统,并且可以驻留在网络、局域网(LAN)、广域网(WAN) 或互联网上的任何地方,或者甚至可以在本地连接到计算机系统或系 统的本地数据存储器上实现。然而注意,可搜索的索引的实施方式可 以用在没有后端数据存储器的应用中。在这些应用中,在可搜索的索 引中被存储为{名称,值}对的属性是数据。
可搜索的数据服务的实施方式可以使开发者能够将数据存储器 放置在他们希望的任何地方;接着开发者向可搜索的数据服务提供定 位器(eID)连同对于eID表示为(名称,值}对的一组属性,可搜索的 索引为eID建立,且可搜索的数据服务可以接着被查询,以从可搜索 的索引返回满足查询的eID的列表。这些eID的列表可以接着用来访 问存储在后端数据存储器上的数据实体。如所提到的, 一个实施方式 可以提供Web服务接口, Web服务接口提供一个或更多Web J艮务调 用,通过该调用开发者可以增加eID和相关的属性,更新可搜索的索 引(例如通过修改、替换或删除在可搜索的索引中的eIDs和属性), 和查询可搜索的数据服务以获取eID的列表。
可搜索的数据服务的实施方式可以用来提供对任何类型的数据 的可搜索的索引。例如,实施方式可以用来将可搜索的索引提供给存 储在数据库中的数据和各种特定或混合类型的文件的储存库,包括但 不限于文本、数字图像和数字音频文件。例如,可搜索的数据服务可 以用来为数字图像储存库提供可搜索的索引。通过可搜索的数据服务
的Web服务接口,互联网上的客户端可以打开账户,存储数字图像, 并且为数字图像提供索引信息。
在一个实施方式中,可搜索的数据服务的实现可以提供数据存储 器以及对数据存储器的可搜索的索引。在一个实施方式中,通过Web 服务或可搜索的数据服务的其他接口,客户端可以将实体存储到数据 存储器,并且为实体提供eID和相关的属性,该实体用于创建数据存 储器的可搜索的索引。客户端接着可以通过可搜索的数据服务的接口 查询可搜索的索引,并且使用查询的结果以通过可搜索的数据服务的 接口来访问数据存储器。
注意,虽然可搜索的数据服务的实施方式通常在这里被称为将可 搜索的索引提供给后端数据存储器,实施方式可以用在可能没有后端 数据存储器的应用中。在这些应用中,在可搜索的索引中存储为{名 称,值}对的属性是数据。在这些应用中,没有存储在后端数据存储 器中的"实体";在某种意义上,实体是可搜索的索引中的属性。在一 个实施方式中,通过Web服务或可搜索的数据服务的其他接口,客 户端可以提供其数据作为用来创建可搜索的索引的{名称,值}对。客 户端可以接着通过可搜索的数据服务的接口来查询可搜索的索引,以 获取期望的数据。可能使用可搜索的数据服务并且其中没有后端数据 存储器的应用的例子可以包括但不限于产品目录和电话目录。
可搜索的数据服务的实施方式可以包括机制,该机制使可搜索的 数据服务能够容易按比例调节,并且提供可搜索的索引的冗余、可靠 性和高度可用性,而用杠杆作用影响可搜索的数据服务的开发者不需 要任何知识和额外的努力来向后端数据存储器提供搜索前端。这些机 制可以包括但不限于用于建立可搜索的索引的机制、用于给可搜索的 索引分区的机制、用于复制可搜索的索引的机制、用于处理可搜索的 数据服务内节点的故障的机制、以及用于自动监控和控制可搜索的数 据服务中的节点的机制。
可搜索的数据服务的一些实施方式可以实现为具有Web服务前 端的分布式系统,在系统中的不同节点配置为执行不同的功能。例如,
在一个实施方式中,可能有一个或更多协调器节点,其协调请求从客
户端系统按规定路线发送到一个或更多适当的节点,例如将通过Web 服务接口接收的客户端的查询(读取)请求按规定路线发送到一个或 更多适当的查询节点,以及将通过Web服务接口接收的客户端的存 储(写入)请求按规定路线发送到一个或更多适当的存储节点; 一个 或更多查询节点,其处理包括将查询请求按规定路线发送到适当的存 储节点的查询请求的过程;以及一个或更多存储节点,其响应于存储 请求而管理eID和相关属性的存储,并响应于来自查询节点的查询请 求而取回存储的eID。
分布式系统中的不同节点可以相互通信地合作,以保证可搜索的 索引是可升级的、 一致的、可用的和持久的。在一个实施方式中,至
点中间的通信。在一个实施方式中,至少部分地通过反熵协议可促进 在可搜索的数据服务实施方式中的节点中间的通信。在一个实施方式 中,至少部分地通过闲聊协议和反熵协议可促进在可搜索的数据服务 实施方式中的节点中间的通信。在一个实施方式中,可搜索的数据服 务实施方式中的两个或更多节点可根据使用闲聊协议和/或反熵协议 的组通信协议来参与组,以便于组中的节点中间的不同功能的合作执 行,例如在存储节点的组内分区的协力移动或分区的协力复制。
在一个实施方式中,用户创建的可搜索的索引(也称为域或存储 桶)可以最初;故创建为一个分区,并且该分区(和任何随后建立的分 区)可以在存储节点上被重新划分,以及作为结果的新分区中的一个 可以接着被协力移动到数据中心或另一个数据中心内的另一个存储 节点,以允许可搜索的索引增加而超过一个节点或甚至一个数据中心 的存储限制。分割还可用于通过允许客户端存储(写入)请求分布在 两个或更多节点中间来提高性能。
域的分区可以被复制到在数据中心内或穿越数据中心的其它存 储节点,以提供数据的冗余,这可帮助保证可搜索的索引保持可用和 持久。复制也可以用于通过允许客户端查询(读取)请求分布在两个
或更多节点中间来提高性能。在一个实施方式中,使用反熵协议来复 制从一个存储节点到另一个存储节点的分区,并接着使用闲聊协议使 被复制的分区为最新的,可以执行复制。存储特定分区的复制的存储 节点可以协力参与复制组,并且组通信可以在组中使用以向分区传播 更新。在一个实施方式中,对被复制分区的写入可以最初直接应用在 复制組中的 一个或更多存储节点上,并且接着使用闲聊协议而传播到 复制组中的其他存储节点。
组通信可以用于监控不同节点、组件以及可搜索的数据服务实施 方式中的其他资源的状况和状态,并且可以使新资源的自动增加能够 代替失效或由于任何原因而变得不可用的现有资源。例如,如果一个
现有的存储节点变得离线(offline),则组通信可以用于将新的存储节 点自动恢复到存储节点组(例如复制组)中。
可搜索的数据服务的实施方式可以使用键-值对存储来将eID 和实体的相关的其他属性(表示为{名称,值}对)存储在eID存储器 中。注意,eID可以被考虑为相关的实体的属性,并且可以作为键-值对存储在eID存储器中。在一个实施方式中,键-值对存储可以根 据存储eID和相关的其他属性的联想字典数据库体系结构来实现。在 实施方式中用来存储属性的联想字典当以相对少的CPU费用读取时 可具有高的总处理能力。联想字典是简单的,其可有助于维持可靠性、 使用的容易以及灵活性。进一步地,联想字典当与可选物如关系数据 库比较时可能是便宜的。
在一个实施方式中,eID存储器可以按照Berkeley数据库来实 现。Berkeley数据库是使用键-值对并可用于给表和其他数据结构创 建索引的开放资源嵌入式数据库系统。与关系数据库不同,Berkeley 数据库不支持SQL查询。所有的查询和数据分析改为由应用程序通 过Berkeley数据库应用编程接口 (API)来执4亍。注意,其他实施方 式可以对eID存储器使用其他数据库结构。
可搜索的数据服务的实施方式使用Web服务可使编入索引的搜 索在Web上可用。实施方式可以使开发者容易将搜索能力增加到其
应用程序。需要访问存储在数据存储器中的数据对象的应用程序的开 发者可能需要或希望使应用程序能够基于多个属性中的一个或属性 的组合来取回数据对象。通过合并联想字典与搜索索引,并使编入索
引的搜索通过Web服务接口可用,可搜索的数据服务的实施方式可 以允许开发者通过杠杆作用影响可搜索的数据服务,以廉价和容易地 为这样的应用程序实现可搜索的索引前端,该搜索前端提供很多这样 的应用程序所需要或所期望的速度和查询能力,以基于一个属性或属 性的组合来取回存储在数据存储器中的数据对象的定位器。
注意,包括这里描述的可搜索的数据服务的不同机制、子系统和 部件的可搜索的数据服务的实现对于客户端/开发者可以是透明的。客 户端和/或开发者仅需要知道可通过Web服务接口提供的可搜索的数 据服务的最小的外部暴露的接口,该Web服务接口允许客户端/开发 者建立并且更新可搜索的索引(域),以及从可搜索的索引为eID列 表查询可搜索的数据服务。
图2示出了根据一个实施方式在客户端和可搜索的数据服务之 间的关系和数据流。数据存储器322可以包括通过定位器可访问的数 据实体。可搜索的数据服务340实现可通过Web服务接口 350暴露 API。客户端330可通过Web服务接口访问可搜索的数据服务340的 功能。应用程序(例如客户端330 )的开发者可通过Web服务接口 350提供的调用,通过杠杆作用来影响可搜索的数据服务340,以向 数据存储器332提供前端搜索服务。
客户端330可以通过Web服务接口 350向可搜索的数据服务340 提供数据存储器332中的至少一些实体的定位器(eID)和相关属性 (其可由{名称,值}对描述)。可搜索的数据服务340可如上所述存 储eID和存储桶中的相关属性,并且可以为属性建立索引,以产生可 搜索的索引342。客户端330可以接着通过Web服务接口 350查询可 搜索的数据服务340。可搜索的数据服务340对照可搜索的索引342 执行查询,以定位满足查询的eID。可搜索的数据服务340可以将包 含满足查询的eID列表的查询结果返回到客户端330。
下面是对这里使用的一些术语的定义,以描述可搜索的数据服务
的实施方式的方面
*实体实体指任何数据对象或实体,其可以存储在一些类型的 数据存储器332中,开发者希望对其关联属性。
參实体标识符(eiD):开发者可用于唯一地识别其应用程序的 实体的字符串(例如UTF-8编码字符串)。eID也可以被称为定位器。 在一些使用情况中,eID可以用来定位斑点状的实体。在一个实施方 式中,可搜索的数据服务对于由开发者使用的存储解决方案可能是不 透明的。在一个实施方式中,UTF-8编码可以用于eIDs以支持需要 eIDs的排序的特征。注意,在一个实施方式中,eID可为字节的任意 序列(但在域或存储桶中是唯一的)。
*属性指{名称,值}对,其可以表示为与eID相关的字符串, 并且eID基于该字符串可以被编索引和查询。在一个实施方式中,属 性可以是UTF-8编码字符串,以^l属性可以容易地用在UTF-8编码 查询表达式字符串中。
參索引与eID相关联的每个属性都可以有或被提供可以被查询 的索引,以取回满足查询表达式的eID的列表。
*序列ID:确认更新请求的接收并允许更新的状态被追踪的可 搜索的数据服务产生的唯一的标识符。在一个实施方式中,序列ID 可以用来排序和维持更新请求的一致性;具有较高序列ID的请求整 体取代具有较低序列ID的请求。注意,在一个实施方式中,序列ID 可能没有暴露给客户端。
*客户端(例如图2中的客户端330):术语客户端可以用于表 示由希望使用可搜索的数据服务系统的可搜索的数据服务用户开发 的任何应用程序、脚本、软件片段等。
*用户可搜索的数据服务用户可为了记账、计量和可能其他目 的而唯一地由用户标识符识别。每个可搜索的数据服务用户可以有使
户端。用户标识符可以用在可搜索的数据服务中以定位存储在可搜索
的数据服务中的用户的eID数据。用户可以是一个或更多存储桶的拥 有者。用户也可以被称为客户。
*可搜索的数据服务请求指客户端通过Web服务接口发送到 可搜索的数据服务以执行这里描述的一个或更多可搜索的数据服务 操作的调用(包括数据)。
參可搜索的数据服务响应指当可搜索的数据服务处理由客户端 发送的可搜索的数据服务请求时,可搜索的数据服务发送回客户端的 响应。
參存储桶指用户可能为了语义或其它原因而希望保持在一起的 可搜索的数据服务对象的组。查询穿过一个存储桶而被应用。存储桶 也可以被称为域或可搜索的索引。每个存储桶都由存储桶标识符识 别。在一个实施方式中,每个用户标识符可以与一个或更多存储桶标 识符关联,但是存储桶标识符可与一个且只有一个用户标识符相关 联。
下面示出了用户、存储桶、实体标识符(eID)之间的关系。 用户->存储桶->610
在一个实施方式中,可搜索的数据服务逻辑上为每一个用户存储 桶维持elD々属性表。下面是示例性elD》属性表的表示。
eID 属性
ki U名称,值 , {{名称,值}}...
k2 U名称,值}}, U名称,属值}}...
K3 {{名称,值}}, {{名称,值}}...
在一个实施方式中,每一个eID在表中(在存储桶中)都是唯一 的;eID因此可以被视为用户提供的实体键。在一个实施方式中,eID 可以主要由可印刷的字符组成。
关于属性和{名称,值}对之间的关系,属性可以一般由一个(名 称,值}对来表示。然而,在一个实施方式中,在上面的表中在任一 行上有具有相同名称的多个{名称,值}对是可能的,指示该名称的多
值属性。例如,下面来自elD》属性表的示例性的行示出对于被指定 为eID的特定URL,关键字属性是多值的。 eID 属性
<url> (名称-"keywords",值-"xxx"),(名称-"keywords", 值-"yyy"),…
在一个实施方式中,在{名称,值}中的所有值被表示为字符串。 为了使字符串的比较操作符返回相同的真值作为数字,数字可以是零 填充的。例如,当">"符号是比较的字符串时,"21">"100"为真,但 当它是比较的数字时为假;然而,当作为字符串或数字比较时,"021" 和"100,,具有相同的真值。在一个实施方式中,格式例如ISO8601可 以用来允许日期-时间值作为字符串被正确地比较。
在一个实施方式中,elD》属性表中的每一行可以被认为是可搜 索的数据服务对象。可搜索的数据服务对象可以表示为
用户->存储桶->610->{属性列表}
当用户希望建立索引时可创建可搜索的数据服务对象,该索引可 用于搜索被客户端应用程序使用并被实体标识符(eID)识别的数据 存储器中的实体。当创建可搜索的数据服务对象时,用户可至少提供 下列输入
參用户ID
*存储桶标识符-识别域 參eID
*属性列表-与实体相关联的{名称,值}对的列表 在一个实施方式中,对于可搜索的服务对象,可搜索的数据服务 可以自动提供也表示为{名称,值}对的一个或更多其他的属性。除了 用户提供的属性的列表之外,这些其他属性也可以被编索引和搜索。 这些属性可以被称为基本属性。在一个实施方式中,所有域中和对所 有用户的所有可搜索的数据服务对象可以包括这些基本属性。在另一 个实施方式中,这些基本属性中的一个或更多可以是可选的。基本属 性可以包括一个或更多下列项但不限于下列项 *建立时间/日期-指示可搜索的数据服务对象何时被建立的时
參最近修改的时间/日期_指示可搜索的数据服务对象何时被最 后修改的时间戳。最初可与建立时间/日期相同。
*最近访问的时间/日期-指示可搜索的数据服务对象何时被最 后访问的时间戳。
參被谁建立-指示建立这个可搜索的数据服务对象的特定用户/ 客户端。
參最近被谁修改-指示最近修改这个可搜索的数据服务对象的 特定用户/客户端。
參尺寸-指示这个可搜索的数据服务对象的尺寸(例如,以字节 为单位)。
*访问权利-指示对这个可搜索的数据服务对象的访问权利。
当用户指定的所有属性以及基本属性被编索引并且eID被持久 地存储时,可搜索的数据服务对象可被认为成功地创建。当可搜索的 数据服务对象没有被成功地创建时,可指示对象为什么不可被建立的 原因的错误代码和消息可被返回给用户。
在一个实施方式中,用户通过可搜索的数据服务可以读取可搜索 的数据服务对象和与对象相关的基本属性。在一个实施方式中,可搜 索的数据服务对象可通过指定用户标识符、存储桶标识符和可搜索的 数据服务对象的eID来从可搜索的数据服务中被读取。
在一个实施方式中,用户可以通过提供待更新的可搜索的数据服 务对象的用户标识符、存储桶标识符和eID连同更新信息一起来更新 可搜索的数据服务对象。在一个实施方式中,用户可以增加或删除eID, 增加或删除eID的属性,并且修改与现有的属性相关联的值。在一个 实施方式中,可能不允许用户增加、删除、或修改至少一些基本属性。 然而,当用户修改可搜索的数据服务对象时,与对象修改相关联的一 个或更多基本属性可被更新。
在一个实施方式中,仅当用户希望按在请求消息中所指定的来修
改的所有eID和属性,包括与属性相关联的索引被更新时,可搜索的 数据服务对象才可以被认为成功地更新。在一个实施方式中,部分的 更新可能不被允许。例如,如果请求指定需要被修改的多个属性,并 且一个修改不能被执行,则整个更新请求可能会失败,而没有一个修 改被执行。当可搜索的数据服务对象没有被成功地更新时,指示对象 为什么不可被更新的原因的错误代码和消息可返回给用户。
在一个实施方式中,用户可通过提供待删除的对象的用户标识 符、存储桶标识符和elD来从域中删除现有的可搜索的数据服务对象。 在一个实施方式中,仅当不再有具有与对象相关联的eID的对象可被 访问的保证时,并且当此对象不再是可搜索的时,可搜索的数据服务 对象才被成功地删除。在一个实施方式中,在可搜索的数据服务对象 被删除之后,可能有eID仍然可用来访问对象的一段时间。此外,对 象可在一段时间为可搜索的是可能的。如果可搜索的数据服务对象及 其关联的索引不能被删除,则删除请求失败,并且可通过错误代码和 消息通知用户失败。在一个实施方式中, 一旦可搜索的数据服务对象 从域中^^删除,elD就可以在域中^^用户重新^f吏用。
在一个实施方式中,用户可以请求用户域(存储桶)、编入索引 的属性、可搜索的数据服务对象以及eID的列表。连同可搜索的数据 服务对象和用户提供的属性一起,用户可在列出可搜索的数据服务对 象时访问由可搜索的数据服务提供的基本属性。在一个实施方式中, 用户可以执行一个或更多下面的列表操作但不限于这些列表操作
*列出与指定前缀匹配的所有可搜索的数据服务对象和/或elD;
*列出与用户关联并由唯一的用户标识符识别的所有域(存储
桶);
*列出在域下(存储桶内)被编入索引的所有属性;
*列出在域下的所有可搜索的数据服务对象和/或eID;
列出由指定的客户端编入索引的所有属性;
*列出对跨越所有域的客户的所有可搜索的数据服务对象和/或
eID;
參列出有指定的属性的所有可搜索的数据服务对象和/或eID。
假定许多域、属性、可搜索的数据服务对象或定位器可以响应于 列表请求而被返回,则可搜索的数据服务可以给列表结果标页数。客 户端可以通过多个请求分段(页)地取回列表。
在一个实施方式中,用户可以通过经由Web服务接口暴露的查 询请求搜索可搜索的数据服务对象和eID。用户可以在单个域(存储 桶)内对可搜索的数据服务对象的一个或更多属性执行查询,以获取 满足查询表达式的eIDs的列表。在一个实施方式中,可搜索的数据 服务可以支持对查询表达式中的属性的一个或更多下列操作符,但不 限于这些操作符。这些操作符可以組合使用
布尔(e.g.,与,或,非)
算术(e.g., <, >, =, !=, <=, >=, )
包含(属性包含指定的字符串)
开始于(属性以指定的字符串开始)
查询操作可以返回满足查询表达式的可搜索的数据服务对象的 eID。在一个实施方式中,完整的可搜索的数据服务对象可以被可选 地返回。在一个实施方式中,查询的结果可以基于在查询消息中用户 提供的分类具体要求以升序或降序被存储。假定许多eID可以响应于 查询而被返回,则可搜索的数据服务可以给查询结果标页数。客户端 可以接着通过多个请求分段(页)地取回eID的列表。在一个实施方 式中,客户端可以在查询消息中提供指定在页上的实体(eID)的数 量的页长度规格。
在一个实施方式中,如果希望,用户可以删除域(存储桶)。仅 当与域中的属性相关联的所有索引和域中的可搜索的数据对象都被 删除时,域才可被认为被成功地删除。如果域中的可搜索的数据服务 对象及其相关联的索引不能被删除,则删除请求失败,并且可以通过 错误代码和消息通知用户失败。
在一个实施方式中,用户可以删除在域内的索引。如果索引中的 所有属性都被成功地删除,则该索引被认为被成功地删除。假如域中
的索引不能被删除,则删除请求失败,并且可以通过错误代码和消息 通知用户失败。
可搜索的数据服务的一个实施方式可以提供机制,由此用户可用 分批模式将待执行的至少一些操作提交到存储桶上。例如,分批模式 机制可以被例如具有大数据集的用户使用,用户意欲将该数据集上载 到可搜索的数据服务。例如,示例性分批模式机制可例如允许用户提 交文件,在文件中每一行都表示一个操作,例如增加可搜索的数据服
务对象的操作。来自这样的文件的示例性行包括但不限于 參存储桶标识符-识别域
參操作-指示待执行的操作。例如,ADD、DELETE或MODIFY。 參eID
參属性列表
示例性可搜索的数据服务API
这部分描述了根据一个实施方式可以通过Web服务接口 350暴 露给开发者和客户端作为Web服务的可搜索的数据服务340的示例 性API。在一个实施方式中,API可通过Web月艮务平台经由在 HTTP/HTTPS上的具象状态传输(REST)和/或简单对象访问协议 (SOAP)被提供给开发者和客户端。其他的实施方式可以使用其它 协议。被提供的Web服务接口 350可以是应用程序不可知的。
下面描述根据一个实施方式可由客户端通过Web服务接口 350 提出的对可搜索的数据服务的示例性请求。注意,这些描述是示例性 的,而不是被规定为限制性的。其他的实施方式可包括其他请求,和 /或可包括所描述的请求的变形。
在一个实施方式中,通过可搜索的数据服务可允许下面类型的客 户端操作。这些操作可以通过Web服务接口暴露给客户端
*更新更新eID-属性存储桶的操作,例如增加、替换和删除操作。
*列表-属性给定eID和存储桶标识符,该操作列出eID的属 性。这在上面的表中可被显现为从左到右进行一例如,如果给定"kl"
作为变元,则在"kl"右边的所有f名称,值}对被返回。
查询-eID。给定查询表达式,从存储桶返回满足该表达式的所 有eID。这在上面的表中可被显现为从右到左进行。在一个实施方式 中,查询表达式是使用布尔操作符(例如非、与、或)合并的谓词 (predieate)的集合。谓词表示对属性列表的名称和/或值域必须保持真 的条件。
更新操作
这些可搜索的数据服务操作可以被客户端通过Web服务接口调 用,以更新用户的eID-属性存储桶。
在一个实施方式中,如果属性不存在,则替换操作可产生属性。 替换操作的随后调用可以修改(更新)值,并且可确保在任何特定的 时间对该属性仅有一个值。有唯一值的属性的更新应该使用这个操 作。在一个实施方式中,调用替换操作的客户端请求可以包括一个或 更多下面的信息但不限于这些信息
争存储桶标识符识别用户的存储桶的字符串。如果存储桶不存 在,则可以创建一个。
* eID:可被客户端使用来定位在数据存储器中的实体的字符串。
參名称表示属性的名称的字符串。
*值表示属性的值的字符串。
參用户标识符识别可搜索的数据服务用户,并且可以用来记账 和认证用户。在一个实施方式中,也可以包括对用户的证明。
在一个实施方式中,如果属性不存在,则增加操作可以创建属性。
另一个:,因而允许、仓;建多值的属性。在一个实施方。式中,调用增加
操作的客户端请求可以包括一个或更多下面的信息,但不限于该信
參存储桶标识符识别用户的存储桶的字符串。如果存储桶不存 在,则可以创建一个。
參eID:可被客户端使用来定位在数据存储器中的实体的字符串。
參名称表示属性的值的字符串。 *值表示属性的值的字符串。
參用户标识符识别可搜索的数据服务用户,并且可以用来记账 和认证用户。在一个实施方式中,也可以包括对用户的证明。
在一个实施方式中,删除操作可以调用下面项中的一个,取决于 是否可选的名称和/或{名称,值}对被指定
*在没有名称或值被指定的情况下,删除操作可以删除与给定的 eID相关联的所有属性。在一个实施方式中,在一段时间间隔后,如 果没有新的属性利用增加或替换操作被引入,则eID成为无用信息收 集的候选者。在一个实施方式中,没有eID的存储桶可以成为无用信 息收集的候选者。在一个实施方式中,属性可以被标记为被删除,并 且没有活动的无用信息收集被执行。
*在只有名称但没有值被指定的情况下,删除操作可以删除具有 该名称并与给定的eID相关联的属性。该属性可以有唯一值或为多值 的。
*在名称和值都被指定的情况下,删除操作可以删除与给定的
eID相关联的{名称,值}对。这允许客户端删除在多值属性中的一个 特定的值。
在一个实施方式中,调用删除操作的客户端请求可以包括一个或 更多下面的信息,但不限于这些信息
參存储桶标识符识别用户的存储桶的字符串。
* eID:可被客户端使用来定位在数据存储器中的实体的字符串。
*名称表示属性的值的字符串。
值表示属性的值的字符串。
參用户标识符识别可搜索的数据服务用户,并且可以用来记账 和认证用户。在一个实施方式中,也可以包括对用户的证明。
上面描述的每个eID-属性存储桶更新操作可以响应于包括更 新结果的客户端而产生更新。在一个实施方式中,更新响应可以通过 可搜索的数据服务的Web服务接口被转发到客户端。在一个实施方
式中,更新响应被发送到客户端,以通知客户端对更新操作的更新的 结果,该结果成功地通知客户端这个更新操作是成功的,以及在由于 一些原因更新操作不能被执行的情况下,通知客户端更新操作失败。 在一个实施方式中,上述的每个更新操作可以使用类似的响应结构。 下面示出了可以被包括在对更新操作请求的示例性响应中的信息。注
意,这是示例性的,并且不被规定为限制性的
*状态"OK,,或"ERROR"。如果更新#皮正确地形成并且可#皮应 用,则状态是"OK";否则,响应可在错误消息中解释问题。
*错误消息进一 步解释更新操作请求所遇到的任何问题的信 息。例如"请求不良地形成"。
成批的更新请求
一个实施方式可以提供机制,更新请求可通过该机制被分批处 理,或作为成批的操作提交。成批的更新请求可以包括如上所述的两 个或更多更新请求的序列,并且对成批的更新请求的响应可包括与成 批的更新请求对应的更新状态的序列。在一个实施方式中,为了实时 地连续处理在成批的更新请求中指定的更新操作,可能存在对可在单 个批量更新请求中提交的更新操作的数量的限制。可选地,在成批的 更新请求中的更新可被异步地执行。
列表-属性操作
一个实施方式可以提供可由客户端通过Web服务接口来调用的 列表-属性操作。列表-属性操作可以返回与指定的eID相关联的属 性列表。下面示出了可以包括在示例性列表-属性操作请求中的信 息。注意,这是示例性的,而并没有被规定为限制性的 參存储桶标识符识别用户的存储桶的字符串。 參eID:可被客户端使用来定位在数据存储器中的实体的字符串。 *过滤表达式可以用于对eID过滤返回的属性的字符串表达 式。如果没有指定过滤表达式,则与eID关联的所有属性都被返回。 过滤的语法遵循如下所述用于"查询—eID"的过滤。这个参数是可选 的。
參用户标识符识别可搜索的数据服务用户,并且可以用来记账 和认证用户。在一个实施方式中,也可以包括对用户的证明。
下面示出了可包括在对客户端的示例性列表-属性操作响应中 的信息
參属性列表如果有,是与过滤表达式匹配的{名称,值}对的列 表。如果在请求中没有给定过滤表达式,则可返回特定的eID的所有 属性。如果没有错误,则这是预期的返回。
*错误消息解释列表-属性操作请求所遇到的任何问题的信 息。例如,"未知的实体标识符"、"未知的存储桶"或"过滤表达式有 错误的语法"。
查询—eID操作
一个实施方式可以提供可由客户端通过Web服务接口调用的查 询-eID操作或简单的查询操作。查询-eID操作返回与通过查询表 达式指定的标准匹配的eID的列表。查询表达式是可遵循在下面的标 题为查询语法和搜索表达式的部分中给出的一组规则的字符串。然 而,可搜索的数据服务的一些实施方式可以接受具有隐含的语法的非 标准化搜索表达式,并使用一个或更多标准化规则将语句减化到规范 形式(见标题为非标准化搜索表达式的部分)。注意,查询-eID操 作请求在这里可以被称为查询、查询请求或查询节点请求。
下面示出了可以包括在示例性查询-eID操作请求中的信息。注 意,这没有被规定为限制性的
參存储桶标识符识别用户的存储桶的字符串。
參查询表达式字符串表达式,eID的列表可以根据该字符串表 达式被定位和返回。
*更多的标志可在前面的查询-eID操作请求中返回到客户端 的不透明对象(例如cookie)。如果标志从较早的查询-eID操作被 返回,则该标志可以在后来的查询-eID操作请求中被提供,以请求 响应于前面的查询-eID操作请求而定位的eID列表中的下一页被返 回。这是可选的参数。
參用户标识符识别可搜索的数据服务用户,并且可以用来记账 和认证用户。在一个实施方式中,也可以包括对用户的证明。
下面示出了可包括在对客户端的示例性查询-eID操作响应中 的信息
參实体标识符列表与在查询请求中指定的搜索标准匹配的eID 的列表。这是预期的返回,除非存在错误,其中可以返回一个或更多 错误消息。
攀更多的标志字符串;在一个实施方式中,更多的标志对客户 端是不透明的。如果满足查询请求的eID的列表太大而不能在一个响 应中返回,则该列表可"分页,,地返回。更多的标志"cookie,,可以指示 "所看到的最后的页"。更多的标志"cookie,,可以;故包括在后来的查询 请求中以取回下一页的eID。
*错误消息解释查询-eID操作请求所遇到的任何问题的信息。 例如,"未知的存储桶"、"查询表达式没有正确的语法"或"无效的更 多的标志"。
可搜索的数据服务体系结构
前面的部分对可搜索的数据服务的实施方式描述了暴露给开发 者/客户端的示例性Web服务API。在下面的部分中,描述了在用于 实现可搜索的数据服务的示例性体系结构和可包括在可搜索的数据 服务的实现中的各种子系统和部件。
图3示出了根据一个实施方式的用于可搜索的数据服务的示例 性高级别功能体系结构。在这个实施方式中,可搜索的数据服务可以 包括一个或更多下面的主要部件和子系统,但不限于这些主要部件和 子系统Web服务平台200、请求路由器202、查询子系统204和存 储子系统206。注意,在该体系结构级别,其他实施方式可以有其他 部件和/或子系统或多个部件和/或子系统的组合。
Web服务平台200可以包括用作可搜索的数据服务的前端的一 个或更多Web服务器。Web服务平台200可以执行一个或更多下面 的功能,但不限于这些功能
*通过请求-拦截器,Web服务器可以与一个或更多其他服务相 互作用,用于可搜索的数据服务的测量、记账、认证和访问权利。
Web服务器可以提供暴露给开发者和客户端的一个或更多具 象状态传输(REST)和/或简单对象访问协议(SOAP) API,用于将
意,其他实施方式可以^^吏用一个或更多其他协议或协议的组合。这些 API允许接收和存储与实体ID(eID)存储器中的实体相关联的实体定 位器(eID)和属性。属性的索引可以从eID存储器中被建立。在一 个实施方式中,API可以提供处理eID和属性的一个或更多下面的 API调用,但不限于这些调用(其可以被称为存储节点请求或存储请 求)。
争增加-为实体增加属性({名称,值}对)。主要用于具有多值 的属性,例如像"关键字"的属性,其有一个或更多值。 參删除-除去属性。
參替换-替换现有的属性。可主要用于具有单值的属性。 參列表属性-列出实体的所有{名称,值}对。
* Web服务器可以提供一个或更多REST和/或SOAPAPI,用于 提交对可搜索的数据服务的查询请求。注意,其他实施方式可以使用 一个或更多其他协议或协议的组合。在一个实施方式中,有一个查询 API调用(查询-eID)。查询请求可以,皮称为查询节点请求。
请求路由器202可以执行一个或更多下面的功能,但不限于这些
功能
*请求路由器202可以从Web服务平台200接收服务请求,并 且确定该服务请求是否为存储节点请求(例如增加、删除或替换一个 或更多eID和相关的属性的请求),或是查询节点请求(取回一个或 更多elD和/或相关的属性的请求)。
參如果服务请求是存储节点请求,则请求路由器202查询存储节 点定位器,以将在请求中指定的eID和存储桶映射到适当的存储节点。 在一个实施方式中,可搜索的数据服务索引的数据可以被分离到存储
桶中。存储桶定义可在单个查询中被考虑的数据的限制。
*如果服务请求是查询节点请求,则请求路由器202查询一个查 询节点定位器,以将存储桶和查询表达式映射到适当的查询节点。
请求路由器202将服务请求按规定路线发送到适当的节点,收 集结果,并且将结果发送回Web服务平台200。
查询子系统204 (其也可以被称为查询服务)可执行一个或更多 下面的功能,但不限于这些功能
參处理查询;
*如果可能,为来自被查询子系统204维持的查询高速緩冲存储 器查询提供服务;
參将来自查询高速緩沖存储器中的不满足的查询发送到存储子 系统206上的一个或更多存储节点,用于执行。对于小域(存储桶), 查询一般可以在单个存储节点上运行。较大的存储桶可以越过多个存 储节点被分区,需要查询在每个分区的一个存储节点上执行。类似于 请求路由器202,查询子系统204可以使用存储节点定位器的本地实 例,以找到适当的存储节点。
參聚集从两个或更多存储节点接收的查询结果,并且如果必要, 对查询结果分类;
*通过由Web服务平台200提供的Web服务接口将查询结果返 回到查询的客户端。在一个实施方式中,如果必要,为结果标页数。
存储子系统206可以包括一个或更多存储节点。存储节点可以位 于一个或更多数据中心内。存储节点可以执行一个或更多下面的功 能,但不限于这些功能
參在存储节点上,本地eID存储器可用作对eID及其属性的权威 性存储器;
肇索引可从eID存储器中被建立,该索引可以在本地存储节点上 给eID的所有属性编索引。
參本地查询处理器可以对照本地eID存储器运行查询。
* eID更新服务可以对本地eID存储器应用存储节点请求(增加、
删除、替换等)。
*本地分区管理器可以观察每个存储节点的本地资源的使用(磁
盘空间、CPU负载、网络带宽等)并相应地管理存储桶的分区,以及
可以协作地与其他存储节点通信以移动分区。分区可以移动,例如以 在存储节点上维持舒适区内可用的存储空间,和/或提供负载平衡。
可以协作地与其他存储节点通信以穿越存储节点复制分区,例 如以提供数据的冗余。
在一个实施方式中,当客户端进行对可搜索的数据服务的API 调用时,Web服务平台200是第一接触点。例如,Web服务平台200 可以为可搜索的数据服务提供认证、访问控制、登录、测量和记账服 务。从客户端到被Web服务平台200提供的可搜索的数据服务API 的服务请求可以被分为两个类别对存储子系统206的写请求,其在 这里可以被称为存储节点请求或存储请求,以及对查询子系统204的 读请求,其在这里可以被称为查询节点请求、查询请求或简单地为查 询。存储节点请求可以包括但不限于对增加、删除或替换定位器(eID ) 及其在存储子系统206中的存储桶中的相关属性的请求。此外, 一个 实施方式可以提供允许客户端请求被建立的新域(存储桶)的构造 API调用,eID和相关的属性可以被增加到新域。查询节点请求是根 据在查询节点请求中的查询表达式从存储子系统206中的存储桶获取 定位器(eID)的列表的查询。
Web服务平台200将进入的请求从客户端转发到请求路由器 202,在一个实施方式中,该进入的请求可以例示在可搜索的数据服 务的协调器节点上。在一个实施方式中,可以有两个或更多协调器节 点和/或请求路由器202来分配负载并通过保护而防止单个点的失效 来提供冗余。可驻留在一个或更多协调器节点上的请求路由器202和 /或一个或更多其它相关联的部件可以组成协调子系统或协调服务。请 求路由器202检查进入的服务请求以确定是否此请求是存储节点请求 还是查询节点请求,确定接收此请求的适当的节点(例如存储节点或 查询节点),并且在可搜索的数据服务实施方式中将此请求转发到被
确定的节点。
如果请求是存储节点请求,则客户端请求对存储在存储桶中的索 引信息的写操作(例如增加、删除或替换)。注意,存储节点请求也 可以为列表属性请求。存储桶定义可被认为在单个查询中的数据的限 制。在一个实施方式中,存储桶可以被划分为可存储在不同的存储节 点上的一个或更多分区。然而,注意,存储节点可以存储多个分区。 与另外可适合于单个存储节点的索引相比,分区可以允许可搜索的数 据服务的客户端存储并维持更大的可搜索的索引。因此,存储桶的不 同分区可以驻留在不同的存储节点上。分区可以穿越存储节点被复 制。在可搜索的数据服务中,穿越存储节点的分区的复制(并且可能 穿越数据中心)可以提供数据的冗余以及因而客户端的可搜索的索引 的持久性、可靠性和可用性。可搜索的数据服务的分区和复制机制在 本文档中稍后被进一步描述。
在一个实施方式中,如果请求是存储节点请求,则请求路由器
202可以查询本地存储节点定位器,以将在存储节点请求中指定的存 储桶和eID映射到存储子系统206中特定的存储节点。请求路由器202 也可以查询存储节点定位器,以确定指定的存储桶是否有一个或更多 分区。根据从存储节点定位器收到的信息,请求路由器202确定在存 储子系统206中特定的存储节点,并接着将存储节点请求转发到被确 定的存储节点。在存储子系统206中,存储节点在其本地eID存储器 上执行在存储节点请求中指定的操作。如果有必要,存储节点可以接 着将存储节点请求传播到在存储子系统206中储存存储桶的分区的复 制的其他存储节点。
如果请求是查询节点请求,则客户端请求读操作,或查询存储在 存储桶中的索引信息。在一个实施方式中,如果请求是查询节点请求, 则请求路由器202可以查询本地查询节点定位器,以将请求所指定的 存储桶和查询表达式映射到在查询子系统204中的适当的查询节点。 请求路由器202接着将查询节点请求转发到在查询子系统204中的确 定的查询节点。
在查询子系统204中的查询节点上,查询请求的一些预处理(例 如标准化)可以被执行,例如,以标准化在查询请求中指定的查询表 达式。在一个实施方式中,本地查询高速緩冲存储器可以;故检查,以 确定是否来自查询高速緩冲存储器的查询可被满足。如果来自本地查 询高速緩冲存储器的查询可被满足,则查询子系统204通过Web服 务平台200将来自查询高速緩冲存储器的查询结果返回到客户端。如 果来自查询高速緩冲存储器的查询不能被满足,则查询节点定位器的 本地实例可以被查询,以定位存储子系统206中的一个或更多存储节 点,该查询被转发到所述一个或更多存储节点。
对于小域(存储桶),查询可以在单个存储节点上运行。大域(存 储桶)可以穿越多个存储节点而被分区,这可能需要查询在每个分区 的一个存储节点上执行。存储节点将结果(eID的列表)返回到查询 子系统204中的查询节点。在一个实施方式中,查询子系统204中查 询节点上的查询集合器可以根据在查询节点请求中的具体要求聚集 从一个或更多存储节点接收的结果。查询子系统204接着通过Web 服务平台200将从存储节点接收的查询结果返回到客户端。在一个实 施方式中,查询子系统204按必要的或按期望的给查询结果标页数。 在查询节点上,从查询子系统206接收的查询结果可以被写到本地查
询高速緩冲存储器。
如上面提到的,请求路由器202可以查询本地存储节点定位器和 本地查询节点定位器以分别定位将接收存储节点请求的存储节点和 将接收查询节点请求的查询节点。此外,查询节点上的本地存储节点 定位器可以被查询,以定位接收查询请求的存储节点。存储节点定位 器追踪什么存储节点在存储子系统206中,并且查询节点定位器追踪 什么查询节点在查询子系统204中。两个节点定位器都可以使用表或 数据库来记录关于被追踪的相应节点的信息。在一个实施方式中,该 表可以依照Berkeley数据库建立。在一个实施方式中,当存储子系统 206中有变化时,例如当存储桶被重新分区、分区被复制、新的存储 节点被增加、新的实体被增加到存储桶等时,该变化可被传递到不同
的节点定位器。查询子系统204的变化,例如查询节点的增加或去除 可以被传递到查询节点定位器。在一个实施方式中, 一个本地节点定 位器可以响应于变化而#皮最初更新,并且依照闲聊协i义该变化可以从 该节点定位器传播到其他节点上的其它节点定位器。
可搜索的数据服务可包括在不同的节点和部件中间的通信;bL制, 该机制例如允许存储和查询节点定位器监控在可搜索的数据服务实 施方式中的变化(例如增加或除去的节点、对存储子系统206的复制、 分区、写入等),并且因此根据通信的更新信息来更新存储在相应的 表中的信息。在一个实施方式中,通信机制可以按照闲聊或流行 (epidemic)协议来实现。该通信机制可以允许一个节点上的变化传 播到可能需要该信息的可搜索的数据服务实施方式的所有节点和部 件。在一个实施方式中,通信机制提供微弱地一致的更新;通信机制 传播信息,所以不提供对所有节点的立即更新。然而,通信系统可足 够快地传播更新,以在可追踪该信息的不同节点和部件中间维持弱的 一致性。在一个实施方式中,通信机制传播更新信息,以便传递的信 息不完全覆盖系统的通信带宽。在一个实施方式中,这可以通过背负 式输送(piggybaek)关于其他部件之间或节点之间通信的至少 一 些更 新信息来完成。
在一个实施方式中,在存储子系统206中的实体ID(eID)存储器 可以被实现为实体定位器(eID )的表,且对每个eID实现为表示为{名 称,值}对的一组属性,{名称,值}对与实体相关。eID存储器是在可 搜索的数据服务中的信息的权威性存储器。当可搜索的数据服务的客 户端应用程序通过对由Web服务平台200提供的Web服务接口的存 储节点请求将信息写到可搜索的数据服务时,存储节点请求被请求路 由器202按规定路线发送到存储子系统206中特定的存储节点,并且 在存储节点上信息被写到本地eID存储器。注意,信息可以被写到与 特定的应用程序相关的特定存储桶,以及存储桶信息可以在存储节点 请求中被提供。因此,不同客户端应用程序的信息可以被写到不同的 存储桶中。在一个实施方式中,当可搜索的数据服务的用户开始为特 定的应用程序创建可搜索的索引时,用户可为这个可搜索的索引(存 储桶)提供存储桶标识符。当对该可搜索的索引进行请求(例如查询) 时,请求参考可搜索的索引的存储桶标识符。注意,用户可以设置有 唯一的用户标识符,该标识符可用于区分可搜索的数据服务的多个用
户。在一个实施方式中,Web服务平台可以为用户分配用户标识符。 特定的用户可以有多个可搜索的索引,每个都被分配存储桶和给定存 储桶标识符。因此,特定的用户标识符和特定的存储桶标识符指定在 可搜索的数据服务中的域。注意,存储桶可以越过在两个或更多不同 存储节点上的两个或更多本地eID存储器来被分配。存储节点请求或 查询节点请求按规定路线发送到的特定的存储节点eID存储器可以通 过在请求中指定的用户标识符、存储桶标识符和eID来确定。
一旦信息被添加到eID存储器,可建立对eID存储器的索引。 如上所描述的,在eID存储器中的每个eID都有被存储为!名称,值} 对的相关的一组属性。每个名称都相应于一个索引,并且每个索引都 相应于{名称,值}对的特定的名称。在一个实施方式中,索引(在索 引中的每一行)可通过与名称相关的值被分类。在一个实施方式中, 索引可以存储在与本地eID存储器相关的本地查询索引存储器中。注 意,索引对特定的存储桶是特有的。然而在一个实施方式中,如果存 在很多小的存储桶,则索引可以越过存储桶连接,以避免有很多小的 数据结构。
作为例子,eID存储器和相关的索引可以为关于待售的商品的物 品信息的数据库(数据存储器)创建,例如在提供待售的书籍的在线 商业网站的书籍。物品的一个属性可以是物品的售价。因此,在数据 库中关于物品的信息的eID可被提供和添加到eID存储器中。每个eID 可以有表示相关物品的不同属性的名称和值的相关的{名称,值}对组。 例如,物品的这些{名称,值}对中的一个可以是"销售价格-<美元数 量>"。因此,可以为属性名"销售价格,,创建索引。这个索引可以用"销 售价格,,的值被分类。客户端可以提交包含查询表达式的查询请求, 该查询表达式指示客户端正在请求在某个"销售价格"值范围内的所
有物品的eID,小于指定数量的"销售价格,,值的所有物品的eID,等 等。索引可接着用来找到在数据存储器中哪些物品具有满足查询表达 式的"销售价格"值。在数据存储器中具有满足查询表达式的"销售价 格"值的所有eIDs可以在查询结果中返回到查询的客户端。
在一个实施方式中,存储子系统206可以将存储桶初始化为一个 分区。当信息被添加到存储桶中时,存储桶可最终增长,直到存储桶 在或接近太大而不适合于在一个存储节点上的点。在存储节点上可用 的存储空间变得临界低之前的某个点(换句话说,当存储节点上可用 的存储空间仍然在舒适区内时),存储桶可以被重新分为两个(或多 个)分区,且这些分区中的一个(或多个)可以接着被移动到另一个 存储节点,以便存储桶可继续增长。存储桶的重新分区可对客户端应 用程序透明地执行。注意,分区也可以为了其他原因而执行,例如为 服务请求提供负载平衡。对可搜索的数据服务的分区机制在本文档中 稍后被进一步描述。
可搜索的数据服务的实施方式可以提供允许客户端删除先前添 加到存储桶的项目的接口。在一个实施方式中,这些项目可以在eID 存储器中被标记为被删除的,但没有从磁盘中除去。在另一个实施方 式中,这些项目可以被标记为删除,并且可搜索的数据服务可以提供 机制,该机制周期性地或不定期地执行无用信息收集,以将祐:才示记为 删除的任何项目从磁盘中移除。在一个实施方式中,如果存储桶先前 被重新分区以产生两个或更多分区,并且随后项目从存储桶中被删 除,则可搜索的数据服务可以提供机制,如果在存储节点上有足够的 磁盘空间来存储单个合并的分区,则该机制可将两个或更多的分区合 并成一个分区。
当存储桶(或存储桶的分区)在或接近太大而不适合在单个存储 节点上的点时,可以执行存储桶的重新分区。因此,如在这里描述的, 存储桶的重新分区可以允许存储桶随着客户端的存储要求的增长而 增长。另一方面,越过两个或多个存储节点的分区的复制可以被执行, 例如,以在存储节点中间和/或越过数据中心提供冗佘、数据持久性、
数据可用性和负荷均分。在数据中心内或越过数据中心对两个或更多 存储节点的分区的复制可以被执行,即使对仅有 一 个分区的存储桶。
注意,在一个实施方式中,可搜索的数据服务可以在物理上驻留 在两个或更多数据中心内的节点或主机上执行。每个数据中心可以包 括参与可搜索的数据服务实施方式的两个或更多节点。在数据中心内 的可搜索的数据服务节点包括但不限于一个或更多协调器节点(托管
请求路由器202的实例的节点)、 一个或更多查询节点以及一个或更 多存储节点。数据中心中的存储节点上的分区可以被复制到该数据中 心内的一个或更多其他存储节点,和/或可以被复制到一个或更多其他 数据中心内的一个或更多其他存储节点。数据中心内的复制可以防止 数据中心内的节点遭受失效,并且可以在数据中心内的节点中间提供 负载平衡。穿越数据中的复制可以防止数据中心级别遭受故障,并且 可以提供穿越数据中心的负载平衡。
在可搜索的数据服务穿越两个或更多数据中心而被实现的一个 实施方式中,具有单个分区的存储桶可以具有分区的至少4个复制。 在该存储桶驻留的任何特定的数据中心中,分区可以被复制到至少两 个存储节点,并且也可以被复制到至少一个其他的数据中心。在其他 数据中心中,分区可以被复制到数据中心中的至少两个存储节点。如
果存储桶具有多个分区,则每个分区可以类似地越过数据中心内的存 储节点被复制,和/或可以穿越数据中心被复制到存储节点。
在一个实施方式中, 一种緩慢的复制机制可用在分区的复制中。 在一个实施方式中,当复制分区时,在节点中间可以存在被执行的两 种类型的通信。在一个实施方式中,分区的复制可在数据中心或穿越 数据中心的可搜索的数据服务节点和部件中间至少部分地使用基于 闲聊协议的通信机制,结合基于反熵的通信机制来执行。反熵协议可 以提供比闲聊协议更快的通信。使用反熵协议,分区的整个数据结构 可以被复制到另一个存储节点以确保初始的一致性。然而同时,更新 可以被接收并且应用于原始的分区。因此,当反熵复制正在发生时, 对在原始存储节点上接收到的原始分区的更新可以使用闲聊协议被
传播到在其它存储节点上的新的复制。通过反熵复制的分区的复制随 着时间的过去而逐渐变旧。然而,所接收的任何更新被传播到新的复 制。当分区的反熵复制被完成并且新的复制准备好在线时,由于被传 播的更新,新复制可以是最新的。
在一个实施方式中,可搜索的数据服务可以试图尽可能提供对客
户端的可搜索的索引的接近于24/7的可用性和可靠性,并且如果存储 节点或甚至整个数据中心由于某个原因而变得不可用,则可以提供一 种机制,通过该机制可确保具有任何增加和修改的可搜索的索引是可 用的和最新的。穿越在数据中心内或穿越数据中心的存储节点的分区 的复制是该机制的一部分。在一个实施方式中,为帮助确保可用的复 制是最新的,当数据存储器中的实体的项目在存储节点上的本地eID 存储器中被增加或修改时,对存储节点上本地eID存储器进行的改变 可通过存储子系统206的更新服务对其他存储节点上的一个或更多其 他eID存储器进行。在一个实施方式中,每个存储节点上的eID更新 管理器部件的实例可在存储节点上实现更新服务的功能。在一个实施 方式中,更新服务确保每个更新应用于在其他存储节点上的两个或更 多复制,但对所有的复制不是必须的。存储节点中的闲聊协议可以接 着用来将更新传播到所有的复制。
在一个实施方式中,当对数据中心中存储节点上的本地eID存储 器进行更新时,并且在指示更新成功的响应被返回到客户端之前,存 储子系统206的更新服务可用来保证对数据中心内存储节点上的至少 一个其他本地eID存储器和对另一数据中心内存储节点上的至少一个 其他本地eID存储器进行更新。在一个实施方式中,当有在数据中心 内存储节点上的本地eID存储器内进行的初始更新时,存储子系统 206的更新服务等待确认,该确认是在更新成功的响应被发送到客户 端之前,对至少两个本地存储节点和对另 一数据中心内的至少 一个存 储节点成功地进行更新。因此,如果原始存储节点或甚至整个数据中 心由于某个原因而变得离线,则最新的复制可能在同一数据中心内的 另一个存储节点上和/或位于不同数据中心内的另一个存储节点上是
可用的。注意,更新可以使用闲聊协议传播到没有被更新服务更新的 其他存储节点,以便分区的所有复制被微弱地维持为一致的,即使在 更新被传播到托管分区的复制的所有存储节点之前可以通知客户端 更新被成功进行。
复制存储桶的特定分区或分区的存储节点可以被认为是复制组。 在复制组中的存储节点可以有相同的或几乎相同的分区的拷贝或复 制。在一个实施方式中,使用闲聊协议可以把对分区的更新传播到复 制组中的存储节点。因此,"相同的"可能易受闲聊协议的限制,这提 供了微弱的一致性。在任何给定的时间点,复制组中的分区不必是相 同的,而是当更新通过闲聊协议传播时会聚成相同的。
在一个实施方式中,在复制组中维持的分区的复制的数量可以取 决于在数据中心中被监控的硬件的可用性和可靠性统计。如果可搜索 的数据服务检测到硬件不是特别可靠或可用的,则更多的复制可以在 复制组内产生。更可靠和可用的硬件可以允许更少的复制被维持。在
一个实施方式中,在复制组中可能有分区的至少4个和多达6个复制。 注意,这适合于被创建和维持以提供数据的持久性、可靠性和可用性 的复制。在一个实施方式中,例如,如果复制组越过两个或更多数据 中心延伸,则在复制组中被维持的分区的复制的数量可以取决于穿越
两个或多个数据中心的监控的硬件的可用性和可靠性统计。在一个实 施方式中,在复制组中被维持的分区的复制的数量也至少部分地是网 络的操作特征的功能。在该实施方式中,例如,数据冗余可以基于下 列因素增加,这些因素可包括网络上的故障模式、网络上的响应时间、 网络上数据取回的错误率中的一个或更多、或一个或更多其他因素或 其中的组合,但不限于这些因素。
在一个实施方式中,分区的复制也可以在下面的情况中执行,其 中特定的分区或分区的特定复制被检测为恰好是读有效的,针对复制 组中的特定的复制或分区,大量的读取(查询消息)被可搜索的数据 服务的组成员资格和状况组件接收。当检测到分区或复制正在接收查 询到它接近从读取的舒适区出来的程度时,可搜索的数据服务可以产
生分区的一个或更多额外的复制,以穿越更多的复制分发查询,并因 此跨越附加的存储节点提供读取(查询)负载的负载平衡。
如果检测到存储桶的高写入负栽(例如来自客户端的在存储桶中 增加或更新项目的消息),则在存储桶中产生分区的附加复制可能没 有帮助。相反,产生附加的复制可能起反作用,因为更新使用闲聊协 议传播到复制,且更多的复制倾向于在复制组中产生更多的闲聊。因 此,在一个实施方式中,如果可搜索的数据服务检测到存储桶是写有 效的,到至少一些存储节点可能接近其舒适区的边界的程度,则可搜 索的数据服务可以给存储桶重新分区,而不是产生分区的更多复制, 以便在存储桶中的数据跨越更多的存储节点散布,因此写负栽可以跨 越更多的存储节点被负栽平衡。
在一个实施方式中,具有需要被复制的分区的存储节点可以例如 使用闲聊协议将信息传递给一个或更多其他存储节点。在数据中心内 或在另一个数据中心中的一个或更多其他存储节点可以接着自愿接 收分区的复制。关于对另 一个存储节点的实际复制的信息可以传递给 可搜索的数据服务的节点上的其他組件(例如协调器节点和查询节点 上的存储节点定位器),以便可搜索的数据服务的域(存储桶内)中 的复制的状态可以被追踪。
存储节点上分区的重新分区的信息可以类似地传递给其他节点 上的其他组件,以便可搜索的数据服务的域中的分区的状态可以被追 踪。如果分区需要从一个存储节点移动到另一个存储节点,则该信息 可以传递到 一个或更多其他存储节点,并且接收到此信息的存储节点 可以接着自愿接收分区。需要移动分区的存储节点可接着选择最好的 候选存储节点来接收分区。在可搜索的数据服务系统的一个实施方式 中实现用于管理磁盘负载的应力管理算法,并且可以用来从接收分区 的两个或更多候选存储节点中选择最好的候选存储节点的示例性应 力管理机制稍后在本文档中在题目为应力管理的部分中描述。
代替作为对问题或危机的反应性响应重新分区或复制分区,可搜 索的数据服务可以提供一个或更多机制,该机制使节点能够监控在节
点上不同资源的使用和状况,包括在存储子系统206内存储节点上的 存储资源,以在可搜索的数据服务内的节点中间共享状况信息,并且 主动地工作来避免对在可搜索的数据服务中不同资源的潜在的高应 力和负载。在一个实施方式中,在可搜索的数据服务中对不同的资源 可以定义舒适区,并且可搜索的数据服务可以主动地工作以将资源保 持在其各自的舒适区内。
当检测到资源正变得接近于其舒适区的边缘时,可搜索的数据服 务可以执行特定的行动。对于存储子系统206中的存储节点,这些行 动可以包括但不限于复制和重新分区。可搜索的数据服务可以监控存 储节点以及其他类型的资源如查询节点和协调器节点的使用和状况, 并且可以试图在潜在的危机之前(例如当资源仍在舒适区内时)执行 行动(例如对存储节点的复制和重新分区),与等待直到资源已经在 应力之下不同。如果系统等待,直到资源已经在应力之下以试图减轻 应力而执行某个行动,例如重新分区或复制,则资源由于内部或外部 的请求可能已经被过载,使它很难执行行动。因此,可搜索的数据服 务提供状况管理的主动方法,以支持在系统中的资源的可用性和可靠 性,与反应性方法不同。
在一个实施方式中,可搜索的数据服务中的每个节点都可以包括 可用作节点的控制和监控代理的节点管理组件的实例。节点管理组件 可用作可监控节点上不同资源的状况信息的自我监控代理,其包括但 不限于磁盘空间使用、带宽使用、CPU使用、读和/或写负载等。
在一个实施方式中,可搜索的数据服务内每个节点上的应力管理 组件可以检测被节点管理器收集的在节点上的资源的状况度量是否 在或接近其舒适区的限制,并且可以响应于所述检测而发起适当的行 动。应力管理器可以实现一个或更多算法,当资源在或接近其舒适区 的限制时,该算法可用于确定将采取的行动。例如,当存储节点上可 用的存储空间接近其舒适区的边缘时,应力管理器可以发起对节点的 重新分区,以便最新建立的分区可以被移动到另一个存储节点,因而 在节点上释放磁盘空间。注意,重新分区实际上在本地分区管理器的
控制下执行。
节点管理器组件可使节点能够参与监测和维持可搜索的数据服 务实施方式的全局状况。节点管理器组件监控特定节点上资源的状 况。在一个实施方式中,另一个组件可以监控在本地邻居或节点组中 的其他节点的状况,以比较该节点与其他节点的状况。
在一个实施方式中,在可搜索的数据服务中的每个节点可以具有 组成员资格和状况组件的实例。在一个实施方式中,在不同节点上的 组成员资格和状况组件可以允许在本地被收集在节点上的状况信息 被传送到可搜索的数据服务的本地邻居成员或节点组内的其他节点。 在一个实施方式中,组成员资格和状况组件允许可搜索的数据服务的 其他组件识别要被监控的节点组,并接着查询关于这些节点的自动刷 新的状况信息。例如,组成员资格和状况组件可以用作故障检测机制。 组成员资格和状况组件也可以允许节点比较其本地状况与其邻居或 组内的节点。
在一个实施方式中,在可搜索的数据服务中的每个节点可以基于 其本地资源和状况消息作出本地决定,它通过组成员资格和状况机制 从其邻居或节点組内的其他节点接收状况消息。这可以在本地节点和 节点组中间分布可搜索的数据服务的资源的状况监控和管理,而不是 依赖于中央控制器。因此,在一个实施方式中,可以没有监控整个可 搜索的数据服务实施方式的状况并试图使资源最优化的中央控制器, 因而没有故障的单个点。因为状况监控和维护在节点上本地和在节点 组内协作执行,而不是通过中央控制器,状况信息的全局列表不必被 维持,并且较少的状况信息必须跨越整个可搜索的数据服务实施方式 来传递。
通过本地节点管理器,每个节点追踪其自己的资源使用和状况。 每个节点也可以监控本地邻居或组内其他节点的状况。本地应力管理 器访问由节点管理器收集的资源使用和状况信息。如果在存储节点上 的应力管理器确定节点需要对其数据重新分区,则存储节点不强迫另 一存储节点接受最新建立的分区。替代地,该信息可以被其他本地存
储节点共享,例如通过组成员资格和状况机制。具有可用的磁盘空间 (被节点管理器本地监控)的其他本地存储节点可通过组成员资格和 状况机制寻找需要在被共享的状况信息中重新分区的其他存储节点。 如果具有可用的磁盘空间的存储节点找到需要移动分区的另 一存储 节点,则存储节点可以自愿决定接受分区。
因此,在特定组中的存储节点可以在本身中间对数据的重新分区 取得一致。这可不必作为所有节点都参与的组决定来执行。替代地, 两个存储节点可同意协作来对数据重新分区,节点之一自愿接受新分 区。注意,组传递和协作可以出现在特定数据中心内的节点中间,但 也可以出现在跨越数据中心的节点中间。
最初,当存储桶被建立时,存储桶包括一个分区。分区可以跨越 形成复制组的两个或更多存储节点被复制。当被复制的分区被重新分 区以形成两个或更多新分区时,每个新分区变为复制组。最初,最新 建立的分区保持在相同的存储节点上。因此,每个存储节点可以为一 个或更多复制组中的成员。分区的重新分区在复制组中的所有存储节
点上执行;还有一个存储桶;并且最初所有的数据都保持在相同的地 方。然而,数据的一半在分区A中,而另一半在分区B中。然而,在 任何存储节点上潜在的存储空间问题不能通过重新分区来解决,因为 复制仍然在相同的存储节点上。如果接近其可用的存储空间舒适区的 限制,如果可能,每个存储节点就可以决定将分区移动到另一个存储 节点。在一个实施方式中,在一个实施方式中可通过闲聊协议来定位 的另 一个存储节点可自愿决定接收分区。将分区拷贝到另 一个存储节 点可以使用复制分区的反熵机制来执行,闲聊协议用来对分区的复制 应用任何更新。分区的移动可以被主动地执行,同时可用的存储空间 仍在舒适区内,以帮助避免危机的情况。
如上面提及的,节点组的一种类型是复制组。在复制组中的每个 存储节点都存储特定分区的复制。当分区增长时,在复制组中的任何 一个存储节点都可以检测到节点上可用的存储空间正在接近其舒适 区的界限,因而本地复制可能需要被分区。在一个实施方式中,如果
分区对复制组内任何一个存储节点变得太大,则分区可以被重新分区 在复制组中的所有存储节点上,即使在其他存储节点上存在可用的磁 盘空间。最新建立的分区每个都可以组成分开的复制组,尽管最初所 有的分区都可以保持在同一组存储节点上。因此,重新分区被复制的 分区也产生两个复制组,而以前只有一个复制组。在或接近可用存储 空间的舒适区的界限的一个存储节点可以接着将一个最新建立的分 区的复制移动到自愿接收分区的另一存储节点。例如,另一个节点可 以加入或净皮添加到复制组,并且可以自愿接收分区。在复制组中的其 他存储节点可以有足够的磁盘空间,所以可以不移动分区。
图4示出了根据一个实施方式的可搜索的数据服务的示例性网 络体系结构。可搜索的数据服务实施方式可以包括但不限于Web服 务平台200、 一个或更多协调器节点350、称为查询TSAR(顶部搜索 集合器)节点360的一个或更多查询节点、以及一个或更多存储节点 370。每个协调器节点350可以包括但不限于请求路由器202的至少 一个实例。
注意,在图3中描述的高级功能查询子系统204和存储子系统 206可以但不是必须分别直接映射到查询TSAR节点360和存储节点 370。每个子系统可以包括下面参考图6进一步描述的几个组件。在 一个实施方式中,查询子系统204的组件驻留在查询TSAR节点360 上,并且存储子系统206的组件映射到存储节点370上。可选地,可 被视为一个子系统的功能部分的特定组件可以在物理上驻留在协调 器节点350、查询TSAR节点360或存储节点370上。例如,每个存 储节点370可以包括图6的本地查询处理器228的实例,本地查询处 理器228可以但不是必须在功能上视为查询子系统204的组件。此外, 在图6中示出的可搜索的数据服务的一些组件可以在不同的节点上有 本地实例。例如,在一个实施方式中,在每个协调器节点360上和每 个查询TSAR节点360上可能存在存储节点定位器216的本地实例。
数据存储器332表示数据存储系统,其中数据(实体)的单元可 以被存储。数据存储器332可以按照任何类型的存储系统来实现,其
中定位器可以用来定位和取回实体。应用程序可以在客户端系统330 上实现,客户端系统330作为后端数据存储器332的搜索前端来通过 杠杆作用影响可搜索的数据服务。在一个实施方式中,应用程序可以 配置成根据Web服务平台200的网络服务接口来访问可搜索的数据 服务的功能,以搜索并取回后端数据存储器332中的数据。
通过杠杆作用影响可搜索的数据服务的作为后端数据存储器 332的搜索前端的应用程序可以被称为可搜索的数据服务的用户。注 意,可搜索的数据服务实施方式可以有两个或更多用户。换句话说, 可搜索的数据服务实施方式可以向两个或更多后端数据存储器提供 可搜索的索引。还要注意,应用程序可以作为两个或更多后端数据存 储器332的搜索前端来通过杠杆作用影响可搜索的数据服务。通过杠 杆作用影响可搜索的数据服务、作为两个或更多后端数据存储器332 的搜索前端、且因而有在可搜索的数据服务实施方式中实现的两个或 更多可搜索的索引的应用程序可被单独和唯一地识别为每个可搜索 的索引的用户。对于每个预订唯一的用户标识符可以-故分配给可搜索 的数据服务,并且用户标识符可以用于唯一地识别特定的数据存储器 332的特定的可搜索的索引。注意,两个或更多客户端系统330可使 用相关的唯一用户标识符在可搜索的数据服务实施方式中访问特定 的可搜索的索引。
在一个实施方式中,客户端系统330可通过互联网334根据Web 服务平台200的Web服务接口提交对可搜索的数据服务的服务请求 (查询节点请求和/或存储节点请求)。Web服务平台200可将服务 请求按规定路线发送到协调器节点350。协调器节点350将服务请求 按规定路线发送到合适的节点,收集结果,并将结果发送回Web服 务平台200。在协调器节点350上的请求路由器可以接收来自Web服 务平台200的服务请求,并且确定每个服务请求是存储节点请求还是 查询节点请求。如果服务请求是存储节点请求,则请求路由器查询存 储节点定位器,以将在请求中指定的eID和存储桶映射到适合的存储 节点370。如果服务请求是查询节点请求,则请求路由器查询查询节
点定位器,以将存储桶和查询表达式映射到适合的查询TSAR节点 360。在一个实施方式中,存储节点定位器和查询节点定位器可为具 有位于每个协调器节点350上的实例的可搜索的数据服务的组件。
当接收到来自协调器节点350的查询节点请求时,查询TSAR 节点360可以在将查询转发到一个或更多存储节点370之前执行查询 的处理。为了执行查询,查询TSAR节点360可将查询转发到适合的 存储节点370。对于小域,查询一般可运行在单个存储节点370上。 较大的域可以跨越多个存储节点370被分区,要求查询在每个分区的 一个存储节点370上被执行。分区稍后在本文档中被进一步描述。查 询TSAR节点360可以使用存储节点定位器的本地实例来定位用于查 询的适合的存储节点370。查询TSAR节点360可以聚集并且分类从 存储节点370接收的查询结果。查询TSAR节点360接着可以将查询 结果返回到协调器节点350。在一个实施方式中,如果有必要或是希 望,查询TSAR节点360可以对查询结果标页数。
在存储节点370上,eID存储器可以用作对eID及其属性的权威 性存储器。可给本地存储节点370上eIDs的所有属性编索引的索引 可以从eID存储器建立。本地查询处理器可以对照存储节点370上的 索引来运行从查询TSAR节点360接收到的查询。eID更新服务可以 接收来自协调器节点350的存储节点请求,并且相应地更新eID存储 器。本地分区管理器可以为存储节点370观察本地资源(例如磁盘空 间、CPU负载、网络带宽等)的使用,并且可以与其它存储节点370 上的其他分区管理器通信,以在必要时重新分配分区。
图5A和5B示出了根据一个实施方式用于实现可搜索的数 据服务的方法,可搜索的数据服务处理服务请求,以将可搜索的数据 服务对象存储在可搜索的索引中,并且在可搜索的索引中定位数据存 储器中的实体的实体标识符(eID)。每个可搜索的数据服务对象可 以指定在数据存储器中的特定实体的两个或更多个属性。每个属性可 以表示为(名称,值}对,并且属性可以包括用于定位数据存储器中的 特定实体的唯一实体表示符(eID)。
可搜索的数据服务系统可以在多个节点上实现。节点可位于一个 数据中心内,或可分散在两个或更多数据中心中。数据中心在地理上 可以是分散的。在一个实施方式中,可搜索的数据服务至少可以包括 协调子系统、查询子系统和存储子系统。在一个实施方式中,多个节 点可以包括实现协调子系统的一个或更多协调器节点、实现查询子系
统的一个或更多查询节点(也称为查询TSAR节点)和实现存储子系 统的一个或更多存储节点。在一个实施方式中,Web服务平台可以向 可搜索的数据服务提供Web服务接口,可搜索的数据服务向可搜索 的数据服务的客户端应用程序提供一个或更多接口调用。
在图5A中,Web服务平台可根据对可搜索的数据服务的 Web服务接口来接收来自客户端应用程序的服务请求,如在1000所 示的。Web服务平台可以接着将服务请求转发到可搜索的数据服务的 协调器节点,如在1002所示的。在一个实施方式中,Web服务平台 可以向可搜索的数据服务提供执行测量、记账、认证和用户的访问控 制的一个或更多其他服务。
如在1004所示的,协调器节点可以确定服务请求是查询节点请 求(对可搜索的索引的读操作)还是存储节点请求(对可搜索的索引 的写操作)。在一个实施方式中,可搜索的数据服务的请求路由器组 件可以执行上述确定。在1004,如果服务请求是存储节点请求,则协 调器节点可以定位接收存储节点请求的存储节点,如在1006所示的。 在一个实施方式中,可搜索的数据服务的请求路由器组件可以咨询可 搜索的数据服务的本地存储节点定位器组件,以定位接收存储节点请 求的存储节点。如在1008所示的,协调器节点可接着将存储节点请 求转发到所确定的存储节点。
当接收到存储节点请求时,存储节点可根据存储节点请求修改可 搜索的索引的分区,如在1010所示的。在一个实施方式中,存储节 点可以
參将在存储请求中指定的可搜索的数据服务对象增加到可搜索
的索引;
參修改存储在可搜索的索引中的可搜索的数据服务对象,如在存
储请求中指定的;
拳从可搜索的索引中删除可搜索的数据服务对象,如在存储请求 中指定的;或
參如果存储节点请求是列表属性请求,则编辑并返回实体的所有 {名称,值}对的列表。注意,列表属性请求可能不导致分区的修改。
如在1012所示的,对分区的改变可以被传播到存储被修改的分 区的复制的一个或更多其他存储节点。在一个实施方式中,按照闲聊 协议,这些改变可传播到其他存储节点。在一个实施方式中,反熵协 议也可以用来将改变传播到分区的其他复制。如在1014所示的,指 示存储节点请求的成功或失败的响应可以根据Web服务接口返回给
客户端应用程序。
在1004,如果服务请求是查询节点请求,则协调器节点可以定 位接收查询节点请求的查询节点,如在1016所示的。在一个实施方 式中,可搜索的数据服务的请求路由器组件可以咨询可搜索的数据服 务的本地查询节点定位器组件,以定位接收查询节点请求的查询节 点。如在1018所示的,协调器节点可接着将查询节点请求转发到所 确定的查询节点。1020项指示流程图在图5B中继续。
在图5B中,查询节点接收来自协调器节点的查询节点请求,并 且处理查询节点请求。在一个实施方式中,查询节点可以执行查询节 点请求的一些预处理,例如在查询节点请求中指定的非标准化查询表 达式的标准化。如在1022所示的,查询节点可以确定在查询节点请
求中指定的查询表达式是否可从本地查询高速緩沖存储器被满足,本 地查询高速緩冲存储器緩存来自先前的查询节点请求的结果。在 1024,如果查询节点可从本地查询高速緩冲存储器被满足,则如在 1026所示的,查询节点可以根据Web服务接口将从本地查询高速緩 冲存储器中取回的查询结果返回到客户端应用程序。
在1024,如果查询节点请求不能从本地查询高速緩冲存储器被 满足,则如在1028所示的,查询节点可以定位一个或更多适合的存
储节点,以接收和处理查询节点请求。在一个实施方式中,查询节点 可以咨询可搜索的数据服务的本地存储节点定位器组件,以定位接收
存储节点请求的一个或更多存储节点。如在1030所示的,查询节点 接着可以将查询节点请求转发到被确定的存储节点。
如在1032所示的,接收来自查询节点的查询节点请求的每个存 储节点都可以搜索可搜索的索引的本地分区,以定位满足由查询节点 请求指定的查询表达式的可搜索的数据服务对象。如在1034所示的, 每个存储节点都可以接着将满足查询节点的查询表达式的查询结果 返回到查询节点。如在1036所示的,在一个实施方式中,查询结果 可以緩存在本地查询高速緩冲存储器中。如在1038所示的,查询节 点可按需要或期望对查询结果进行合并、分类和/或标页数。如果查询 结果从多个存储节点接收,则查询结果可能需要被合并。如果查询结 果超过页数限制,则查询结杲可以被标页数,并且接着可以返回到在 两个或更多响应消息中的客户端应用程序。在一个实施方式中,查询 结果可以按照在查询节点请求中指定的分类标准被分类。在一个实施 方式中,查询结果至少可以包括来自可搜索的索引中的每个可搜索的 数据服务对象的实体标识符(eID),所述可搜索的数据服务对象满足在 查询节点请求中指定的查询表达式。如在1040所示的,查询节点可 以根据Web服务接口将从存储节点接收的查询结果返回到客户端应 用程序。
图6示出了根据一个实施方式的可搜索的数据服务的示例 性低级别的模块体系结构。此图示出了通过可搜索的数据服务的不同 模块或组件的数据流。在该实施方式中,可搜索的数据服务可以包括 一个或更多所示组件,但不限于这些组件。注意,可搜索的数据服务 的实现可以包括至少一些所示组件中的两个或更多。
下面描迷在可搜索的数据服务的实施方式中的示例性数据流,此 时新信息使用对Web服务平台200所提供的Web服务API的增加请 求(一种存储节点请求)被提交到可搜索的数据服务。REST或SOAP 请求到达Web服务平台200,在Web服务平台200它被验证,打上
时间戳,并且被传递到请求路由器202。请求路由器202向存储节点 定位器216请求可以存储数据的一个或更多存储节点270的列表,并 将数据发送到该列表上的一个节点。在存储节点270上的实体ID更 新管理器230接收数据,将数据存储在其本地实体ID存储器236上, 并且将数据发送到至少 一个或更多本地存储节点270和在另 一个数据 中心内的至少两个存储节点270。当所有这些存储节点都存储了数据 时,REST或SOAP调用返回"成功"结果。
下面描述当处理查询节点请求或查询时在可搜索的数据服务的 实施方式中的示例性数据流。REST或SOAP请求到达的Web服务 平台200,在Web服务平台200它被验证并传递到请求路由器202。 请求路由器202向查询节点定位器220请求查询TSAR212(顶部搜索 集合器)的列表,查询TSAR212可处理查询并且将查询按规定路线 发送到该列表上的一个节点(查询TSAR212)。查询TSAR212首先 确定查询是否可从查询高速緩沖214存储器被满足。如果是这样,则 它将查询响应返回到请求路由器202,请求路由器202将查询响应转 发回到Web服务平台200,查询响应可以根据Web服务接口从Web 服务平台200返回到发起查询的客户端应用程序。
如果查询不能从查询高速緩冲存储器214被回答,则查询 TSAR212向本地存储节点定位器216请求存储桶的 一组分区,且存储 节点托管那些分区的存储复制。查询TSAR212可以接着将查询发送 到来自每个分区的一个存储节点主机的本地查询处理器228。本地查 询处理器228可以找到满足查询的所有eID。这些列表接着被返回到 查询TSAR212,其中列表被聚集。被聚集的列表可以被分类并返回到 查询的客户端。
可搜索的数据服务的实施方式可以在具有高的可用性和可靠性 的大型分布式系统上运行。在这些环境中,可搜索的数据服务的实施 方式可以监控并且管理系统资源以满足高的可用性和可靠性要求。在 一个实施方式中,组成员资格和状况组件226可以在每个节点上运行, 并且可以将关于CPU、磁盘、存储器、网络利用和其他本地系统度量
的本地状况信息传送到一个或更多其他的节点。组状况226组件可以 追踪复制组中的成员,并且也可以追踪节点何时进入和离开可搜索的 数据服务系统环境。
分区管理器232处理存储节点主机到复制組的分配,以及存储桶 到多个分区的划分。这使在磁盘空间上运行低的节点能够划分数据 集,以便一些数据可以移动到另一个节点。用于决定何时或如何划分 和移动数据的算法稍后在本文档中被描述。
在一个实施方式中,所有可搜索的数据服务节点可以使用组 通信组件222,以与其他可搜索的数据服务节点进行通信。在一个实 施方式中,组通信组件222可以提供流行(闲聊)和反熵节点间通信。 在可搜索的数据服务的实施方式中,为了对数据存储器的更 新排序,对于每个更新请求,请求路由器202可以产生定序标志,并 且将它与回答一起传递回客户端。定序标志可以捕捉排序ID和可能 其他系统信息。如果希望,客户端可以从定序标志中提取排序ID。在 一个实施方式中,可搜索的数据服务可按由该排序ID给定的顺序应 用请求。注意,其他实施方式可以使用其他方法来给更新排序。
在一个实施方式中,排序ID可以基于其本地NTP同步时间由请 求路由器202产生。其他实施方式可以使用其他基础来产生排序ID。 注意,NTP同步时间是有缺陷的同步系统,并且可能有时由于时钟偏 差,更新次序可被颠倒。然而,在使用NTP同步时间作为产生排序 ID的基础的实施方式中,客户端可以确定更新被应用的次序,并且如 果它们没有对该次序达成一致则重新提交更新。
在一个实施方式中,客户端可以被请求将客户端所接收的上一个 定序标志与其下一个请求一起发送到可搜索的数据服务。在一个实施 方式中,可搜索的数据服务可以使用被接收的上一个定序标志来收集 关于时钟偏差和排序的数据。在一个实施方式中,如果必要,可搜索 的数据服务可以使用由客户端提供的上一个定序标志来影响更新的 排序,如由收集的数据所确定的。
数据分区和复制
可搜索的数据服务的实施方式可以提供用于存储子系统
206中的索引数据的数据分区和复制的一个或更多机制。数据分区可 以允许可搜索的数据服务的客户端存储和维持否则比可适合于单个 存储节点更大的可搜索的索引。数据复制可以对用户的数据存储器的 可搜索的索引的持久性、可靠性和可用性提供可搜索的索引中的冗 余,可搜索的索引被存储并且查询可通过可搜索的数据服务来从客户 端应用程序访问。
在可搜索的数据服务的实施方式中的数据分区和数据复制 的一个方面是没有用来控制数据分区和数据复制的中央控制器。替代
地,数据分区和数据复制任务可以分布在可搜索的数据服务系统中的 不同节点和组件中间。
图7根据一个实施方式示出用于在可搜索的数据服务系统 中给可搜索的索引分区的方法。可搜索的数据服务系统可以在多个节 点上实现。节点可以位于一个数据中心内或可分散在两个或更多数据 中心内。数据中心可以在地理上分散。在一个实施方式中,可搜索的 数据服务可以至少包括协调子系统、查询子系统和存储子系统。在一 个实施方式中,多个节点可以包括实现协调子系统的一个或更多协调 节点、实现查询子系统的一个或更多查询节点(也称为查询TSAR节 点)和实现存储子系统的一个或更多存储节点。在一个实施方式中, Web服务平台可以向可搜索的数据服务提供Web服务接口 ,可搜索 的数据服务向可搜索的数据服务的客户端应用程序提供一个或更多 接口调用。
如在1050示出的,可搜索的数据服务可以为数据存储器初始化 可搜索的索引,作为在单个存储节点上存储的单个分区。如在1052 示出的,随着时间的过去,分区可以增长。例如,当从客户端应用程
分区可增长。在某个点,可搜索的数据服务可以检测到,在存储节点 上的可用磁盘空间在或接近在存储节点上的可用磁盘空间的舒适区 的界限。
为了允许可搜索的索引继续增长,分区可以被重新分区,以产生
两个或更多新的分区,如在1054示出的。每个新的分区可以包括在 可搜索的索引中的可搜索的数据服务对象的不同子集。 一个或更多新 的分区可以接着被移动到一个或更多其他存储节点,因而释放在存储 节点上的存储空间,如在1056示出的。在一个实施方式中,另一个 节点可以协作地自愿接收或存储新的分区。在一个实施方式中,需要 移动分区的存储节点可以在存储节点的组内广播指示存储节点需要 移动分区的消息。接收消息的一个或更多存储节点接着可以自愿存储 分区。存储节点可以接着从存储分区的自愿者中选择最好的存储节 点,并且可接着与被选择的存储节点合作来将分区移动到其他存储节 点。注意,在两个节点上存储的不同分区可以继续增长,因而如果有 必要,可以被重新分区来产生可以接着移动到其他存储节点的新的分 区。重新分区和将分区移动到其他存储节点因此允许可搜索的索引的 分区增长而超过单个存储节点的存储限制。在可搜索的数据服务系统 的一个实施方式中实现用于管理在存储节点上的磁盘负载的应力管 理算法,并且可用于从接收分区的两个或更多自愿者节点中选择最好 的存储节点的示例性应力管理机制稍后在本文档中在标题为应力管 垔的部分中描述。
注意,对分区进行重新分区以产生两个或更多新分区并且将一个 或更多分区从存储节点移到一个或更多其他存储节点也可以被执行 为对可搜索的索引的负载平衡写负载。如果存储节点检测到对分区的 写负栽在或接近用于写到存储节点的舒适区的界限,则存储节点可以 对分区进行重新分区,并且将新分区中的至少一个协作地移到另一个 存储节点,以将写负载中的一些移动到其他存储节点,如上所述。
图8示出了根据一个实施方式用于复制可搜索的数据服务系统 中的可搜索的索引的分区的方法。数据复制可对可搜索的索引的持久 性、可靠性和可用性提供在可搜索的索引中的冗余。分区的复制也可 以为存储节点的资源执行一个或更多使用度量的负载平衡。在一个实 施方式中,如果存储节点检测到对分区的读负载在或接近用于读到存
储节点的舒适区的界限,则分区的复制可以被执行为分区的负载平衡
读负载。在一个实施方式中,如果存储节点检测到存储节点上的CPU 负载在或接近对存储节点的CPU负载的舒适区的界限,则分区的复 制可以被执行为存储节点上的负载平衡CPU负载。
为了复制由存储节点存储的分区,存储节点可以定位接收分区的
复制的另一存储节点,如在1100示出的。在一个实施方式中,另一
个节点协作地自愿接收或存储复制。在一个实施方式中,想要复制分 区的存储节点可以在存储节点组内广播指示存储节点正在寻找接收 复制的自愿者的消息。接收消息的一个或更多存储节点可以接着自愿 存储复制。存储节点可以接着从存储复制的自愿者中选择最好的存储 节点,并且与被选择的存储节点合作来将分区复制到其他存储节点。
如在1102示出的,存储节点可以接着使用反熵协议将分区复制 到其他存储节点。注意,在复制期间当可搜索的索引的存储节点请求 被接收或处理时,分区可能被潜在地更新。为了获得分区和复制之间 的一致性,在一个实施方式中,复制可使用闲聊协议用所接收的对分 区的更新而被更新,以将更新传播到其他存储节点,如在1104示出 的。注意,闲聊协议可提供分区的复制之间的微弱的一致性。也要注 意,对分区的复制的更新可以使用闲聊协议来继续执行,因而维持分 区之间微弱的一致性。
分区被复制到的存储节点可以与存储分区的存储节点在同 一个 数据中心内,或可以在另一个数据中心内。在一个实施方式中,可搜 索的数据服务可以创建并维持分区的至少两个复制在数据中心内,以 及分区的至少两个复制在至少 一个其他数据中心内。
数据分区
图9A和9B示出了根据可搜索的数据服务的一个实施方式的用 户的可搜索的索引、对每个用户250的数据(eID)到存储桶中的分离、 以及存储桶的分区。对每个用户250的可搜索的数据服务数据被分离 到存储桶中,这限定了可以在单个查询中被考虑的数据的限制。在图 9A中,当可搜索的数据服务客户端(或用户)将数据增加到被用户
250A识别的可搜索的索引时,客户端将定位器(eID)与属性一起提 交到存储桶252中。每个存储桶252最初驻留在单个存储节点上。因 为数据集可以无限地增长,分区可以超过存储节点上磁盘的物理容 量。为了允许这种可能性,在一个实施方式中,存储桶中的数据可以 4皮分离到两个或更多分区254中,如在图9B中示出的。在图9B中, 图9A的存储桶252被显示为被分裂而形成分区254。例如,存储桶 252A被分裂成分区254A、 254B和254C。注意,在一个实施方式中, 每个分区254驻留在单个存储节点上。然而,多个分区254可驻留在 单个存储节点上。
当分区254增长时,磁盘可能用完空间,需要将一个或更多分区 254移动到另一个存储节点。在一个实施方式中,可搜索的数据服务 的应力管理器组件可以执行在存储节点中间管理分区254的移动的任 务的至少一部分。下面参考分区管理器232和应力管理器组件进一步 描述在可搜索的数据服务的实施方式中的数据分区。
数据复制
图9C示出了根据一个实施方式通过复制分区的数据复制。在一 个实施方式中,为了数据持久性和容错性,数据集(存储桶分区254) 可以跨越几个存储节点被复制。在图9C中,图9B的分区254被复制 以形成复制组256。例如,在图9C中,存储桶252A的分区254A、 254B和254C ,皮复制以形成复制组256A,256B和256C。复制可以允 许可搜索的数据服务的实施方式跨越复制组256分配查询负载,因此 作为对在可搜索的数据服务上经受的"读应力"的响应可能是必要或 期望的。此外,因为一个或更多存储节点可能失效,可搜索的数据服 务的实施方式可以提供新的存储节点以保持复制组256增加。下面参 考组成员资格和状况組件进一步描述形成复制组的细节。
分区管理器
在一个实施方式中,可搜索的数据服务的分区管理器232组件负 责对重新配置可搜索的数据服务系统作出决定并执行行动以减轻热 点,该热点可能作为磁盘(存储)空间的存储的结果和/或由于高处理
负栽而出现。分区管理器232组件可以执行趋向于在可搜索的数据服 务系统中的主机或节点上平衡应力的分布式计算(分布式地跨越主机 或节点)。
在实施方式中,分区管理器232可以执行一个或更多下面的行 动,但不限于这些行动
■ 主机(存储节点)可以被增加到复制組256;
■ 主机(存储节点)可以从复制组256中被移除;
■ 分区254可以被分割;
■ 分区254可以与另一个分区合并。
在一个实施方式中,分区管理器232根据由组成员资格和状 况组件226收集并从组件226接收的组状况信息来执行这些行动。 分区
在一个实施方式中,分区254可以基于实体ID(eID)的散列 来形成。下面是示例性函数,其返回指示提供的eID是否在特定的分 区内的布尔值(真或假)。
bool inPartition(String eID, int mask, int value)
int h = hash(eID);
return (h & mask) == value;
各种散列函数中的任一个都可用在不同的实施方式中。在一个实 施方式中,散列函数可以被明确地指定以支持可搜索的数据服务的跨 平台实现。在一个示例性实施方式中,如在ISO 3309中所定义的, CRC32可以用作用于确定分区的散列函数。CRC32可以为几乎任何 事物产生平滑的分布,除了故意恶意的输入。在一个实施方式中,通 过使用具有较大计算费用的折衷的密码安全的散列可避免恶意输入 的可能性。
分割和合并分区
可搜索的数据服务的数据被分离到存储桶252中,其限定了可以被认为在单个查询中的数据的限制。在一个实施方式中,被查询
的存储桶252可以超过容错所需要的最小数量而被复制,以便任意数 量的查询-处理能力可加到存储桶252。然而,存储桶252可能变得 太大而不能存储在可搜索的数据服务系统内的主机上,和/或可以接收 来自客户端系统的过多数量的更新。复制存储桶252可以不处理可能 由这些潜在的情况产生的问题。在一个实施方式中,为了处理这些潜 在的情况,存储桶252可以被分成数据的分离的分区254。
在一个实施方式中,对数据存储器的更新仅需要被发送到包 括要被更新的实体的分区254的成员。然而,对存储桶252中所有的 分区254进行查询;查询的结果可以接着被查询集合器合并在查询子 系统204中。因此,分区254的数量可以由存储桶252的查询要求来 确定,而在每个复制组256中主机的数量可以由存储桶252的查询的 数量产生。
可搜索的数据服务的实施方式可以提供类似于可展开的散列法 的机制,其允许通过将单个可能不同种类的主机增加到复制组256中 而按比例逐渐增加存储桶252。除了别的好处以外,该机制还可以允 许可搜索的数据服务系统利用不同种类的机器,并且可以使对存储桶 252的分区能够动态地改变。在一个实施方式中,用于对可搜索的数 据服务实体分区的算法可被使用,其中实体标识符(eID)被散列成 整数,并且该整数的最低有效位被检查以确定分区254。在一个实施 方式中,被检查的有效位的数量可在分区254之间变化。
图IO示出了根据一个实施方式在复制组中分区的分割。在 该实施方式中,存储桶254中分区254的数量可以通过在复制组256 中分割分区254而增加。复制组256对给定的散列后缀变成相应于可 通过给该后缀增加一个或更多位而形成的两个后缀的两个分区(两个 复制组)。在图IO中示出的实施例中,散列后缀—10的复制组256N 被分割为由后缀J)IO和_110标识的两个分区(复制组256N一0和复制 组256N_1)。
4吏用该机制,两个新复制组256N 0和256 1的初始成员资格可
确切地与被分割的复制组256N的成员资格相同。最初没有数据迁移 出现,并且查询和更新可以如分割前一样被分配。然而,当新的存储 节点被增加到一个分割的复制组256 (在这个例子中,复制组256—0) 时,复制组有多于所需要数量的成员。有应力的主机可以接着离开复 制组256一0 (同时保留在复制组256—1中),在这种情况下,通过删 除其数据的一半(复制组256J)中的一半),因而减轻了主机上的应 力。因此,将单个节点增加到存储桶252可以减轻在存储子系统上的 至少一些应力。
注意,如果所有的主机都有相同数量的磁盘空间(即,在磁盘空 间方面相似),并且如果数据在分区254中间被或多或少均匀地划分, 则在存储桶252内的所有主机可能趋向于在大约相同的时间用完空 间,这可能要求每当存储桶需要重新分区时存储桶252中主机的数量 加倍。
当使用同类主机时,为了帮助避免每当存储桶需要分区时必须加 倍存储桶252中的主机,可搜索的数据服务的实施方式可以使用可或 多或少地随机增加主机的一个或更多机制,被增加到有应力的复制组 256的主机的概率与复制组256上被测量的应力成比例地增加。4吏用 这些机制,复制组256的分割可以在复制组上的存储应力变为临界值 之前被执行。当应力较低时, 一个或更多新主机可以提早增加到分割 的复制组256,当被测量的应力水平增加时,新主机增加得更频繁。
分区管理器接口
在一个实施方式中,分区管理器232可根据API与eID更新管 理器230相互作用。下面是示例性API,其可以被分区管理器232使 用,并且可以包括一个或更多所描述的示例性调用和返回,但不限于 这些调用和返回。
setpartitions(Subscriber,Bucke仁AcceptPartitionList,DropPartiti onUst)
AcceptPartitionList和DropPartitionList是字符串数组,其中每 个字符串都表示分区掩码。eID更新管理器230记住新的接受分区列
表,并且使用该列表来过滤进入的操作。eID更新管理器230可接着 进入数据存储器以移除项目,这些项目的散列eID与撤销分区类表中 的模式相匹配。接受分区列表或撤销分区类表可以为空的。当存储节 点引导时,其接受分区列表可为空的,并且可以使用来自分区管理器 232的调用而^皮初始4匕。
empty(subscriber identifier, bucket identifier)
该回调指示被指定的存储桶在本地变为空,且分区管理器232 因此应该考虑合并或是删除它。
hint(subscriber identifier, bucket identifier, mask)
该对等(peer-to-peer)调用可以用作另 一个存储节点应该考虑加 入指定的分区。
在一个实施方式中,分区管理器232可以为組状况226组件的客 户端,该組状况226组件用于通过对组成员资格和状况226组件的 API来在复制组内确定节点的负载。在一个实施方式中,分区管理器 232也可以查询存储节点定位器216,以查找未被充分利用的存储节点。
在一个实施方式中,分区的分割和合并仅被在磁盘存储器上的应 力驱动。特别是, 一旦本地磁盘使用变得超过确定的门限,本地托管 的分区就可以被分割。其他的实施方式可以使用用于划分在一组可用 的主机中间的实体的体系结构和机制。例如,在一个实施方式中,一 致的散列(或是分布的散列表(DHT))可以用来在可用的主机中间 半随机地散布实体复制。该实施方式可以使在系统中增加或删除主机 相对简单,但可能往往使查询效率低,因为查询可能需要被发送到几 乎所有服务于存储桶的主机。因此,按比例调节对于存储桶的查询处 理能力在该实施方式中很难。在另一个示例性实施方式中,实体可以 基于其属性被分布,但是注意,该实施方式可能使查询计划和执行更 加复杂。该实施方式也可能增加添加和删除主机的复杂度,并且可能 更难对改变数据分布的反应更加困难。
存储节点 图11示出了根据一个实施方式的示例性存储节点及其组件。注
意,分区管理器232和相关联的组件在上面的标题为分区管理器的部 分中被描述,并且本地查询处理器228进一步在下面的标题为查询月良 查的部分中被描述。图11的下列描述集中在eID存储器236及其相 关联的组件eID更新管理器276和在eID更新管理器276上^f皮编辑 的查询索引234。也要注意,在一个实施方式中,所示組件的实例可 以驻留在可搜索的数据服务实施方式中的每个存储节点270上。
在一个实施方式中,本地eID存储器236和本地eID更新管理器 230可以一起运行,以提供一个或更多下面的功能,但不限于这些功 能
參支持列表属性API:在客户端提交更新后,客户端可以读回与 eID相关的属性。
争支持查询索引234的建立和重新建立elD存储器236可以用 作用于建立查询索引274的权威性存储器。如果这些索引234丟失, 则它们可以使用本地eID存储器236来重新产生。
參支持对大量请求的查询子系统204要求,由此eID的列表被提 交,对每个eID的属性将被返回。
在一个实施方式中,在可搜索的数据服务实施方式内的各个存储 节点270上的eID存储器236的实例可以共同提供一个或更多下面的 功能,但不限于这些功能
*持久性当告知客户端更新被接受时,客户端可能需要复制的 eID存储器236将不丢失数据的高级别的信任。
*一致性复制展示在指定的服务等级协议(SLA)内与客户的 最终一致性。
*可靠性、可用性、易伸缩性可搜索的数据服务实施方式可能 需要按需要支持这些以使总系统能够满足特定的SLA。
在一个实施方式中,为了提供持久性和一致性功能,eID存储器 236的实例可以使用闲聊机制通信,如在本文档中稍后进一步描述的。 分区管理器232通过与组状况226组件和应力管理组件的相互作用可
通过动态分区来管理eID存储器236的磁盘使用,以及通过当节点失 效时建立的新复制来管理eID存储器236的持久性。 eID更新管理器
在一个实施方式中,eID更新管理器230可例如通过TCP在指 定的端口上接收更新和列表属性请求。eID更新管理器230也可以与 其本地分区管理器232通信,以报告问题和状态,并且接收关于存储 桶分区254的指示,elD更新管理器230应该维持该指示,且如果有, 它应除去该指示。
注意,存储节点270可以包括一个或更多存储桶分区254。在一 个实施方式中,分区决定在elD更新管理器230的范围之外。然而, elD更新管理器230被通知分区决定,并且遵守它们。
eID存储器
在一个实施方式中,eID存储器236可以作为berkeley数据库 (BDB)来实现。注意,其他实施方式可以使用其他机制来实现eID 存储器236。给定BDB内的用户标识符、存储桶标识符和实体标识符 (eID) , BDB提供找到所有属性的能力。BDB将信息存储为键-值 对;键在这里可以被称为BDB-key,且值被称为BDB-value。在一个 实施方式中,BDB-key和BDB-value可以如下形成
參BDB-key = Key( subscriber identifier, bucket identifier, eID )
* BDB-value = { updates-for-the画eID-above }
Key( subscriber identifier, bucket identifier, eID )是使用指定的 变元来形成唯一键的函数。例如,在一个实施方式中,该函数可以通 过连接用户标识符、存储桶标识符和eID字符串来形成BDB-key。继 续这个例子,为了列出给定存储桶标识符的所有eID,函数可以用一 些划界线信息给连接的用户标识符、存储桶标识符和eID字符串加上 前缀。例如BDB-key可以形成为"pl2—clientlbucketl/photos/xy.jpg", 其指示用户标识符("clientl")与用户的一个存储桶("bucketl") 连接,是12个字符长,跟在12个字符后的是eID字符串 "/photos/xy.jpg"。根据查找功能所期望的(对用户标识符、存储桶标
识符和eID的相等查找,对用户标识符和存储桶的相等查找,但对eID 的范围和相等查找),Key (...)在实施方式中可以各种方式实现。
在一个实施方式中,BDB-value可以包括更新操作(例如替 换、增加和/或删除)的集合及其相应的序列ID,序列ID帮助补充 BDB-key中eID的属性。在一个实施方式中,如果序列ID更高,则 对属性的新的更新操作取代在eID存储器中现有的更新操作。例如, 给定eID,对属性的替换操作具有比在eID存储器236中对该属性的 替换更高的序列ID,从elD存储器236移除后者。作为另一个例子, 具有确定的序列ID的总删除操作使具有较低序列ID的所有更新操作 不相关的。
为了i兌明上面内容,考虑下面在特定的eID的示例性BDB-value: { (op=replace, name-nl, value=vl, ts=tl), (op=replace, name=n2, value=v2, ts=t2), (op=add,name=n2,value=v3,ts=t3) } 其中op表示操作并且ts表示序列ID。假定对于这个例子M〉t3 >t2>tl。在这个例子中的"这个瞬间",被BDB-value暗指的属性是 {(nl,vl),(n2,v2),(n2,v3)}
其中n2是多值的。现在考虑通过在相同的eID的下列示例性方 案之一来更新 第一方案
(op=replace, name=n2, value=v4, ts=t4) 这使BDB-value包括
{ (op=replace, name=nl, value=vl, ts=tl), (op=replace, name=n2, value=v4, ts=t4)} 因此
(op=replace, name=n2, value=v2, ts=t2),
(op=add,name=n2,value=v3,ts=t3) 从更新的列表中丟弃,因为它们被新的更新替代。 第二方案 (op=delete, ts=t4)
这使BDB-value仅包括 {(op=delete, ts=t4)}
所有的其他操作被移除,因为它们都被新的更新替代。 第三方案
(op=add, name=nl, value=v5, ts=t4) 这使BDB-value包括
{ (op=replace, name=nl, value-vl, ts=tl), (op=add, name=nl, value=v5, ts=t4), (op=replace, name=n2, value=v2, ts=t2), (op=add,name=n2,value=v3,ts=t3) }
在这种方案中,没有更新需要被丢掉。两个属性,nl和n2是多值的。
查询索引
在一个实施方式中,查询索引234可以实现为Berkeley数据库 (BDB)。注意,其他实施方式可以使用其他机制来实现查询索引234。 在一个实施方式中,给定存储桶252,查询索引234允许从{名称,值} 对映射到eID。因此,对于查询索引234:
BDB-key = Key( subscriber identifier, bucket identifier, name, value )
BDB-value = { all-eIDs-with-{name, value}-above } 一个实施方式可以使用用户标识符、存储桶标识符和名称执行相 等查找,以及用值执行范围和相等查找。在一个实施方式中,查询索 引234的Key( subscriber identifier, bucket identifier, name, value ) 函数,给定示例性查询
@name = "some-name", @value > "stringl" AND @value < "string2"
可通过允许下面的转换来支持查询
BDB-Key > Key ( subscriber identifier, bucket identifier, "some-name", "stringl" ) AND BDB-Key < Key ( subscriber identifier, bucket identifier, "some-name", "string2")
实现函数Key()的一些示例性方法在标题为eID存储器的部分 下被讨论,并也^皮规定为应用在这里。
在一个实施方式中,查询索引234的BDB-value连同其序列IDs 一起是一组更新操作(例如增加和/或替代),序列IDs使一个或更多 eID的组与BDB-key中的{名称,值}对相关联。注意,eID存储器236 的每个新更新都可以使一个或更多先前的更新变为不相关的。查询索 引234需要接收新更新以及它替代的所有更新。
存储节点使用情况
下面描述根据一个实施方式的几个示例性可搜索的数据服务存 储节点使用情况。前两个使用情况(处理更新请求和处理列表属性请 求)描述外部事件的处理。其余使用情况描述内部事件的处理。
下面描述根据一个实施方式的更新请求的处理。当收到来自请求 路由器202的更新请求时,如果elD更新管理器230确定更新不是针 对它当前所维持的存储桶,则错误被返回。如果eID更新管理器230 确定更新被请求路由器202使用将来大于T(例如5-10 )秒的序列ID 来标记,则请求路由器202返回错误。在一个实施方式中,如果有必 要,eID更新管理器230也可以检查其NTP同步状态,并且发出警报。
在一个实施方式中,eID更新管理器230可以使用組通信222组 件来"gcast"更新。越过网络的字节数可以被约计(对于更多的细节见 组通信部分); 一般,字节数可以是在更新消息中的字节数的N倍, 其中N是为持久性所需要的复制的数量。gcast可以返回更新可以被 写入用于持久性的节点组,或可以超时。
eID更新管理器230使用更新来执行eID存储器236的读取 - j务改-写入。这可以4吏一些更新,皮取代和新的更新纟皮加入。如果eID 更新管理器230发现更新不能被应用,因为它已经被取代,则消息迟 到的指示被返回。eID更新管理器230在持久日志中记录新更新和被 取代的更新。如果eID更新管理器230成功地gcast,更新eID存储 器236,并且写到其日志,则它返回从gcast中获取的节点组。否则, 错误可被返回。
下面描述根据一个实施方式的列表属性请求的处理。eID更新管 理器230读取其本地eID存储器236以找到被请求指定的eID。如果 eID被找到,则其属性被读取并且成功的响应被发送回。如果eID未 被找到,则错误可被返回。
处理内部事件
如果eID存储器日志改变,则查询索引更新器可以读取新的增加 项,并且更新查询索引234。反熵监控程序(daemon)读取新的增加 项并对反熵更新其数据结构(例如Merkle树)。
下面描述根据一个实施方式由组通信222组件产生的应用消息 调用的处理。如果eID更新管理器230确定更新不是针对它当前所维 持的存储桶,则错误被返回。如果elD更新管理器230确定更新,皮请 求路由器202使用将来大于T (例如5-10)秒的序列ID来标记,则 消息被接受且如果有必要,eID更新管理器230检查其NTP同步状态, 并且发出警报。
eID更新管理器230使用更新消息来执行eID存储236的读取-修改-写入。这可以使一些更新被取代和新的更新被加入。如果eID 更新管理器230发现更新不能被应用,因为它已经被取代,则消息迟 到的指示被返回。如果elD更新管理器230发现更新已经被应用,则 消息是复制的指示被返回。eID更新管理器230在持久日志中记录新 更新和被取代的更新。如果eID更新管理器230成功地更新eID存储 器236并且写到其日志,则它返回OK(成功)。否则,错误可净皮返 回。
下面描述根据一个实施方式由组通信222组件产生的反熵调用 的处理。响应于该调用,反熵监控程序连接被指示的主机,并且与主 机一起进行反熵会话。在本文档的其他地方进一步讨论反熵。
下面描述根据一个实施方式由组通信222组件产生的设定分区 调用的处理。eID更新管理器230用新接受列表和撤消列表写入其日 志。eID更新管理器230启动具有撤消列表的清理线程,以从它不再 负责的eID删除自己。当读取所记录的事件时,查询索引234启动其
自己的清理线程。当读取所记录的事件时,反熵监控程序也启动其自 己的清理线程。
eID更新管理器接口
下面描述根据一个实施方式被eID更新管理器230暴露或 预期的示例性接口。注意,这些接口是示例性的,而没有被规定为限 制性的。
eID更新管理器230可以暴露一个或更多下面请求路由器 202的接口,但不限于这些接口
replace ( bucket identifier, eID, name, value, prev-seq画ID)或 add ( bucket identifier, eID, name, value, prev國seq-ID)或 delete ( bucket identifier, eID, name, value, prev-seq隱ID)
eID更新管理器230可以暴露一个或更多下面本地组通信 222组件的接口,但不限于这些接口
apply(Group, Msg) —> ok|dup|late|error andentropy(Group, Host, Cookie) —> Status eID更新管理器230可以暴露但不限于下面本地分区管理器232 的接口
setpartitions(Subscriber, Bucket, AcceptPartitionList, DropPartitionUst)
注意,AcceptPartitionList和DropPartitionList是(掩石马,值}对
的列表。
eID更新管理器230可以预期一个或更多下面来自本地组通信组 件222的接口,但不限于这些接口
gcast(Group, Msg) {ok, Hosts, Cookie} | error gsync(Cookie, Timeout)—> true|false
eID更新管理器230可以暴露但不限于下面来自本地分区管理器 232的接口
empty(Subscriber, Bucket) 查询服务
在一个实施方式中,可搜索的数据服务系统的查询子系统204 或查询服务可以提供用于解析客户端查询、取回数据和关联查询结果 组的一个或更多接口。在一个实施方式中,查询服务可以涉及或包括 如在图6中示出的可搜索的数据服务的几个组件,包括但不限于一个 或更多查询TSAR212、查询高速緩冲存储器214、查询节点定位器220 以及在每个存储节点270上的本地查询处理器228、本地查询索引存 储器234和实体ID(elD)存储器236。注意,这些组件在下面的图中可 以使用不同的数字来表示。
图12根据一个实施方式示出了可搜索的数据服务的不同的组件 并进一步示出了组件之间的数据流,可搜索的数据服务可以組成查询 子系统或与查询子系统相互作用,以执行来自于可搜索的数据服务的 客户端的查询的服务。查询子系统可以对照在包括相关的实体 ID(eID)(属于特定的存储桶)的可搜索的数据服务中的所有存储节点 370提供客户端提交的查询的有效执行,集合来自每个单独的存储节 点370的结果,并且緩存满足每个给定查询的eID组。在一个实施方 式中,为了执行查询的处理,查询子系统包括但不限于下面的組件
*查询节点定位器354可以对每个特定的查询进行路由选择决 定。在一个实施方式中,重复的客户端查询可以-故鼓励以通过查询系 统路由选择相同的路径,以便最大化查询高速緩沖存储器364的好处。
*查询TSAR (顶部搜索集合器)360可以将查询分配到给定存 储桶的适合的存储节点370组,以及聚集结果和查询緩存。
參在每个存储节点370上的一个本地查询执行引擎376,负责在 每个存储节点370上执行本地查询。
在一个实施方式中,查询TSAR360本质上被视为同等物。每个 查询TSAR360可以回答任何客户端查询。这可以帮助简化单独节点 的增加和移除。然而,因为查询结果可以被緩存在单独节点上的查询 高速緩冲存储器364中, 一个实施方式可能尽可能经常地试图通过相 同的查询TSAR360节点来按规定路线发送对同一个存储域的完全一 样的查询。为了帮助通过查询TSAR360按规定路线发送查询,请求
路由器352可以访问查询节点定位器3 54服务,以获取对特定的存储 桶的查询节点的列表。
除了上面提到的服务和组件之外, 一个或更多其他组件或月艮务可 以通过查询服务来访问。例如,存储节点定位器服务390可以被访问, 以定位对给定存储桶的适合的存储节点370的组或列表。作为另一个 例子,查询服务可以通过杠杆作用影响或参与总系统节点状况服务 (图6中的组成员资格和状况256),总系统节点状况服务可以监控 加入和离开系统的不同节点,并且可以将状况信息传播到系统中的其 他节点。
查询节点定位器
为了查询緩存以提供有利的命中率,如果可能, 一个实施方式可 以试图确保相同的客户端查询由协调服务(请求路由器352 )按规定 路线发送到相同的查询TSAR360节点。在一个实施方式中,查询节 点定位器354可封装逻辑以提供路由选择,其中一个查询节点定位器 354可以在每个协调器节点350中^L例示。在一个实施方式中,查询 节点定位器354可以实现一致的散列方案,该方案允许在分区的节点 组上随机分配进入的查询。其他实施方式可以实现用于分配查询的其 它随机或非随机机制。
在一个实施方式中,查询节点定位器354实现一致的散列函数, 以使用基本散列函数来为每个节点和键分配m-位标识符,例如 SHA-1。在一个实施方式中,节点的标识符可以通过弄乱节点的IP 地址来选择,而键标识符可以通过弄乱域的组合和标准化查询字符串 来产生。项"键,,可以用来指在散列函数下的原始键及其图像,因为含 义从项被使用的上下文来看是清楚的。类似地,项"节点,,可以用来指 在散列函数下的节点及其标识符。在一个实施方式中,标识符长度可 以大到足以使两个节点或键散列为相同的标识符的概率可以忽略。
在一个实施方式中,由查询节点定位器354使用的散列映射结构 可以包括一个或更多下列字段,但不限于这些字段
參键-组合域(存储桶)名和查询字符串表达式的散列。
*值—满足给定存储桶的查询表达式的eID组。
*开销-最初执行查询表达式所用的时间;例如,可以用在无用 信息收集和置换算法中。
*时间戳-当项目插入到高速緩沖存储器中时的本地时间;例 如,可以用在无用信息收集和置换算法中。
一致的散列法可以如下将键分配给节点。标识符在标识符环形模 2m中被排序。键k被分配到其标识符等于或跟随在标识符空间中(标 识符)的k的第一个节点。该节点被称为键k的后继节点,被表示为 successor(k)。如果标识符被表示为从0到2m - 1的数字的环,则 successor(k)是从k开始以顺时针方向的第一个节点。
图13示出了 m=3的标识符环。该环有3个节点0、 1和3。标 识符1的后继是节点1,所以键1将被定位在节点1。类似地,键2 将被定位在节点3,而键6在节点0。
一致的散列法可以允许节点进入并且离开具有最小破坏的可搜 索的数据服务。为了维持一致的散列映射,当节点n加入网络时,先 前分配给节点n的后继的某些键现在被分配到节点n。当节点n离开 网络时,它所有被分配的键重新分配到节点n的后继。在键到节点的 分配中,不需要出现其他的变化。在图13中给出的例子中,如果具 有标识符7的节点加入,则它将从具有标识符0的节点捕获具有标识 符6的键。
查询TSAR (顶部搜索集合器)
在一个实施方式中,查询处理器362是可搜索的数据服务系统的 第一组件,其处理在查询消息中被客户端330提供的查询表达式。查 询处理器362可以预处理查询表达式。在允许在查询语言中有非标准 化语法的一个实施方式中,查询处理器362执行的初始步骤是将查询 转换成其规范的标准化形式。在一个实施方式中,查询处理器362也 可以在查询表达式中重新排序谓词,以标准化它们,以便语义相同的 查询看起来是一样的。例如查询表达式 ANDpredicatelAND [predicate2
查询表达式中谓词的标准化可例如帮助系统获取更高的查询高 速緩冲存储器364的命中率。
在查询表达式的预处理之后,查询处理器362可以检查其本地查 询高速緩冲存储器364,以确定是否查询高速緩冲存储器364包括满 足给定(可能标准化的)查询表达式的必要结果集。如果查询高速緩 冲存储器364包括结果集,则结果集从查询高速緩沖存储器364中被 取回,并且通过协调器节点350返回到客户端330。否则,查询表达 式被向前传递到查询集合器366,其负责从相应的存储节点370中取 回结果集。在结果集从存储节点370被取回后,它緩存在本地查询高 速緩冲存储器364中,并且通过协调器节点350返回到客户端330。
在查询高速緩冲存储器364中查询緩存的效率可以是影响可搜 索的数据服务系统的总性能的性能参数。系统的总性能可以通过对照 查询高速緩冲存储器364解决热点查询来提高,而不必到达单独的存 储节点370来取回结果集。 查询集合器
在一个实施方式中,为了定位包括当前查询被执行的存储桶的 eIDs的存储节点370组,查询集合器366可以使用存储节点定位器 368服务。在存储节点370组被确定后,查询集合器366可以将查询 请求发送到每个存储节点370上的本地查询执行引擎376,如果有必 要则重试。在结果集从参与查询的所有存储节点370接收到后,如果 有必要,根据分类属性,这些结果集可以合并成单个集。
本地查询执行引擎
图14根据实施方式示出了单个存储节点370的示例性体系结构。 本地查询执行引擎376可紧密地连接到存储节点370的eID存储器 380和本地查询索引存储器378。本地查询执行引擎376对照被存储 在特定的存储节点370上的eIDs组在本地执行查询。因为关于eIDs 的所有信息都在本地呈现,本地查询执行引擎376可以在本地(例如,
在存储节点370内)执行被提供的查询390,对结果分类,并且将查 询结果集3卯(连同分类属性一起)返回到查询TSAR360。在一个实 施方式中,进入的查询390可以被解析器372在本地解析,并且在4皮 本地查询执行引擎376对照eID存储器380执行之前被查询优化器 374优化。在一个实施方式中,解析器372、查询优化器374和本地 查询执行引擎376可以为本地查询处理器228的组件,如在图6中所 示的。
查询语法和搜索表达式
在实施方式中,示例性查询消息可以包括一个或更多下列字段, 但不限于这些字段
*用户标识符对特定客户端或可搜索的数据服务客户端的标识
符;
參存储桶标识符识别限定可在查询中被考虑的数据的限制的存储桶。
參节点ID-节点标识符。
參查询表达式-应用于该查询的搜索表达式。
參"更多的标志"当满足查询表达式的eIDs的数量超过标记页 数限制时,不透明的更多的标志对象可以^皮返回到客户端。该标志可 与相同的查询一起被重新提交,以便取回下一个结果集(eID)。
參序列标志。
在实施方式中,查询服务可以支持通过服务的客户端对可搜索的
数据服务的查询的一个或更多下列类型的操作,但不限于这些操作 參布尔操作(例如与、或、非等);
*算术操作(例如<、>、<=、>=、<>、=、!=);
*字符串比较操作(例如前缀、包含等);
參基于客户端指定的属性对实体的结果集分类。在一个实施方式 中,可以允许仅对单个属性分类。其他实施方式可以允许对两个或更 多属性分类;
參结果集的标记页数。
在一个实施方式中,可搜索的数据服务中的搜索表达式可以表示
W3C推荐标准的XPath的子集。注意,其他实施方式可以对搜索表 达式使用其他协议。在一个实施方式中,假定属性是(名称,值)对 的列表,可使用XPath语法的相对小的子集,并且不允许在标记语言 (如XML)文档中的多重级别。注意,其他实施方式可以允许标记 语言文档中的多重级别。也要注意,其他实施方式可以使用XPath语 法的相对较大的子集。因此,用在可搜索的数据服务的至少一些实施 方式中的查询语法与XPath定义的谓词测试表达式有关。
在一些实施方式中,除了 XPath查询语法以外,可允许搜索表 达式的一个或更多非标准化形式,该搜索表达式为可根据一个或更多 非标准化规则简化为规范的形式的具有隐含语法的表达式。对搜索表
和i现上提供灵活性,P、P " 在实施方式中,搜索表达式影响对象的属性列表;也就是说, 真值可以使用对象的属性中的一个或更多或全部来计算,如果为真, 则对象可被选择。
下面是根据一个实施方式的搜索表达式的一些例子,并且没 有被规定为限制性的。 AND@name = "glassy" starts画with (@value = "tasty") I
在本实例中,两个节点组合并。如在XPath中指示的,当并且 仅当节点组不是空组时,节点组才计算为真。在上面的例子中,两个 节点组使用对象的属性列表^f皮分开计算,并且其真值使用AND(与)来 合并。
注意,[@vahie-"foo"
不意味着与NOT@value!-"foo"一样; 当且仅当一些属性具有字符串值"foo"的值时,前者才为真;当且仅 当所有的属性具有字符串值"foo"的值时,后者才为真。
下面是在一个实施方式中的搜索表达式中允许的示例性查询语 法的摘要。注意,其他实施方式可以不包括该语法的至少一部分,和 /或可以包括其他的语法。
query expression <- (predicate expression)
predicate expression <- predicate j NOT predicate expression I predicate expression AND predicate expression | predicate expression OR predicate expression | predicate expression sort expression
sort expression <- 'SORTBY[' attribute name ''| 'SORTBY[, attribute name ' ASC'| 'SORTBY[' attribute name ' DESq,
predicate <-[,attribute name ''| '[' attribute name —value test expression—,],
attribute name <- '@name =' attribute
在上面,attribute是系统中给定的属性的字符串名称。
value test expression <- value test | NOT value test expression | value test expression AND value test expression | value test expression OR value test expression value test <- '@value =' test value 在上面,值必须与test value相等。
value test <- '@value !=* test value在上面,值必须与test value 不相等。
value test <- '@value >' test value 在上面,值必-页大于test value。
value test <- '@value >=' test value 在上面,值必须大于或等于test value.
value test <- '@value <' test value 在上面,值必须小于test value。
value test <- '@value <=' test value 在上面,值必须小于或等于test value.
value test <- 'startsWith(@value =' test value ,)'
在上面,值必须由test value开始。
value test <- ,contains(@value =' test value ,)'
在上面,值必须包含test value作为子字符串。
下面是一个实施方式中搜索表达式的示例性查询语法规则的摘 要。注意,其他实施方式可以不包括这些语法规则的至少一部分,和 /或可以包括其他语法或这些规则的修改。
*在对象的属性列表的每个{名称,值}对上执行的布尔测试被包 围在方括号[...]内。
參在方括号内,{名称,值)对的名称和值部分使用"(^name"和 "(^value,4皮表示在左边。
參表达式的第一部分必须是以"(^name"形式的属性的名称,且
后面可为属性值的零或更多布尔测试。
*操作符"> >=<<==!=,,可以用作与右边的字符串的比较操作符。
*来自Xpath的字符串函数"starts-with"和"contains"可以用 于字符串值属性。
參属性的所有(^name部分被认为是字符串,@value部分也被认
为是字符串。
*布尔操作符是与、或和非。这些可以用来在{名称,值}对上合 并测试。
參使用在中的测试获得的属性组具有如被XPath (节点组的布 尔函数)给定的真值,并因此可使用布尔操作符合并。
*可选的SORTBY表达式可以指定结果集应被分类的属性。 SORTBY表达式可以包括ASC (升序)和DESC (降序)分类符,
以指示分类顺序。ASC (升序)是默认的分类顺序。
下面是根据如上所述的示例性规范的搜索表达式语法的示例性 搜索表达式
@name = "lastName" starts-with (@value = "Adams,,)I AND@name = "firstName" @value = "John"] AND瞎name = "age" @value > "25" AND @value < "60"SORTBY瞎name = "year" DESC
非标准化搜索表达式
XPath语法的示例性规范搜索表达式语法。然而,可搜索的数据服务 的一些实施方式可以接受具有隐含语法的非标准化搜索表达式,并且 使用一个或更多标准化规则将语句简化到规范形式。下面介绍非标准 化搜索表达式和用于将隐含语法简化到规范形式的相应的示例性相 关的标准化规则的例子。注意,非标准化表达式显示在左边,标准化 表达式在右边,如
"unnormalized expression" => [normalized expression] 后面是比较操作符">>=<<=:!="的字符串后面必须跟有字符 串或数字;表达式将形成比较-测试。
"index > 5" => [@name = "index" @value > "5',
"title:'foo," => [@name = "title" @value = "foo"] 否定-测试是在它前面有"NOT"的测试。
"NOT keyword:,xxxxxx'" => [ @name = "keyword" NOT(@value = ',xxxxxx',)
元素测试是如上定义的测试或否定-测试。元素测试可被列为由 布尔操作符AND或OR连接的系列。如果缺少布尔操作符,则假定 为AND。圓括号可用来指示布尔操作符可被应用的顺序
"title:'foo, NOT prefix:'keyword'" => [ @name = "title" @value = "foo"j AND [ @name = "prefix" NOT (@value = "keyword")
关于同一属性的测试的序列可以被视为应归入相同的谓词。
"price > 5 AND price < 20 AND available:,yes," => [ @name ="price" @value > "5" AND @value < "20"AND [ @name = "available" @value = "yes" I 分类顺序可以通过在查询字符串的末尾包括"sortby"表达式来 指定,后面是在结果集应该被分类的属性名。指定分类顺序的附加的 修改符("asc"或,,desc")可以跟随
"year < 2010 AND author:'John Doe' sortby price desc"=> [@name = "year" @value < ,,2010,,] AND [@name = "author" @value = "John Doe"SORTBY[@name = "price" DESC
查询结果集
在一个实施方式中,如在这里描述的,被提交到可搜索的数据服 务的查询可以由可搜索的数据服务的查询服务处理,以产生一个或更 多下列项作为返回的搜索结果数据的一部分,但不限于这些项
參满足查询表达式的一个或更多实体ID(eID)的组。在一个实施 方式中,被返回的eID的数量可以不超过预定的标记页数限制。
參更多的标志当满足查询表达式的eID的数量超过标记页数限 制时,不透明的对象返回到客户端。为了取回下一个结果(eID)集,该 标志可以与相同的查询 一起被重新提交。
查询服务使用情况
下面根据一个实施方式描述几个示例性可搜索的数据服务查询 服务使用情况。注意,这些使用情况可以指在图12中示出的示例性 查询子系统体系结构。
下面根据一个实施方式描述如果所有的节点可用的、没有緩存查 询且提供顺序标志时示例性查询请求通过查询服务的处理。在接收来 自客户端330的查询之后,协调器节点350上的请求路由器352将查 询请求或来自查询请求的查询信息提交到本地查询节点定位器354。 查询节点定位器354可以通过返回一个或更多查询TSAR节点360的 列表来响应。在一个实施方式中,可能存在对可以返回到列表中的查
询TSAR节点360的数量的预定限制(例如该限制可以为3)。在一 个实施方式中,查询TSAR节点360的列表可以根据一个或更多标准 来排列或分类。
请求路由器352接着可以将查询请求提交到从查询节点定位器 354接收的列表中的至少一个查询TSAR节点360。在接收来自请求 路由器352的查询请求的查询TSAR节点360上,本地查询处理器362 可以将查询请求提交到本地查询高速緩沖存储器364。如果查询高速 緩冲存储器364返回否定緩存命中结果,则查询TSAR节点360可以 将查询请求提交到本地存储节点定位器368。本地存储节点定位器368 返回包括查询请求中被指定的存储桶的存储节点370的组或列表。
查询TSAR节点360接着可以将查询请求提交到被存储节点定 位器368返回的列表中的一个或更多存储节点370。在一个实施方式 中,查询请求被提交到最小的一组需要的存储节点370。在收到查询 请求的每个存储节点370上的本地查询处理器可以对照本地eID存储 器处理查询请求,并且返回一组实体ID (eID)。在一个实施方式中, eID组可以被页尺寸(例如,IOO个实体)限制。如果有必要,"更多 的标志,,指示器可以被返回,以指示有可用来满足查询请求的更多 eID。
如果有必要,查询TSAR节点360合并从一个或更多存储节点 接收的eID组,并将查询请求提交到本地查询高速緩冲存储器364以 存储结果。查询TSAR节点360接着将查询结果返回到请求路由器 352。请求路由器352接着将查询结果返回到请求客户端330。
下面根据一个实施方式描述如果所有的节点可用、緩存查询且不 提供序列标志时示例性查询请求通过查询服务的处理。在接收到来自 客户端330的查询之后,协调器节点350上的请求路由器352将查询 请求或来自查询请求的查询信息提交到本地查询节点定位器354。查 询节点定位器354通过返回一个或更多查询TSAR节点360的列表来 响应。在一个实施方式中,可能存在对可以返回到列表中的查询TSAR 节点360的数量的预定限制(例如3 )。在一个实施方式中,查询TSAR
节点360的列表可以根据一个或更多标准来排列或分类。
请求路由器352接着将查询请求提交到从查询节点定位器354 接收的列表中的至少一个查询TSAR节点360。在接收来自请求路由 器352的查询请求的查询TSAR节点360上,本地查询处理器362将 查询请求提交到本地查询高速緩冲存储器364。如果查询高速緩冲存 储器364返回肯定的緩存命中结果,则查询TSAR节点360将从查询 高速緩冲存储器364中恢复的eID页返回到请求路由器352。请求路 由器352接着将查询结果返回到请求的客户端330。
下面根据一个实施方式描述如果所有的节点可用并且序列标志 被客户端提供时示例性查询请求通过查询服务的处理。序列标志可以 用查询请求提供,以帮助确保可搜索的数据服务支持在序列标志的节 点组中被指定的那些存储节点370。通过提供在紧跟在更新之后的查 询请求中提供序列标志,客户端330可以相当多地增加看到在查询结 果集中被反映的更新的机会。上面描述的示例性使用情况的两个主要 不同是,查询高速緩冲存储器364被绕过,以及选择存储节点370以 执行查询请求的过程不支持被序列标志指定的那些存储节点370 。
在接收到来自客户端330的查询之后,协调器节点350上的请求 路由器352将查询请求或来自查询请求的查询信息提交到本地查询节 点定位器354。查询节点定位器354通过返回一个或更多查询TSAR 节点360的列表来响应。在一个实施方式中,可能存在对可以返回到 列表中的查询TSAR节点360的数量的预定限制(例如3)。在一个 实施方式中,查询TSAR节点360的列表可以根据一个或更多标准来 排列或分类。
请求路由器352接着可以将查询请求提交到从查询节点定位器 354接收的列表中的至少一个查询TSAR节点360。查询TSAR360将 请求提交到本地存储节点定位器368。本地存储节点定位器368返回 包括查询请求中被指定的存储桶的一组存储节点370。查询TSAR360 使用在序列标志中指定的存储节点370组和被存储节点定位器368返 回的存储节点370的列表,以确定查询请求可以被提交到的一个或更
多存储节点370组,并接着将查询请求提交到被确定的存储节点370。 在接收到查询请求的每个存储节点370上的本地查询处理器对照本地 eID存储器处理查询请求,并且返回一组实体ID (eID)。如果有必 要,查询TSAR360合并从存储节点370接收的eID组,并将查询结 果提交到本地查询高速緩冲存储器364以存储结果。查询TSAR360 接着将查询结果返回到请求路由器352。请求路由器352接着将查询 结果返回到请求的客户端330。 查询服务接口
下面描述根据一个实施方式可被查询服务的组件暴露或预期的 示例性接口。注意,这些接口是示例性的,而没有被规定为限制性的。
下面是查询服务的组件的示例性暴露的接口 。
查询节点定位器354可以用来发现查询TSAR360主机的排列的 列表。查询节点定位器354可以至少暴露下面的示例性接口 。
GetQueryNodes ( subscriber identifier, bucket identifier, query-expression )
GetQueryNodes接受用户标识符、存储桶标识符和查询表达式, 并且返回对应于所提供的信息的主机的列表。
查询STAR360可以至少暴露下面的示例性接口 。
Query ( queryID, subscriber identifier, bucket identifier, query-expression, more-token, update-cookie)
Query接受查询ID、用户标识符、存储桶标识符、查询表达式、 更多-标志对象和更新cookie。如果合适,Query返回查询ID、 eID 列表、更多-标志对象和/或错误消息。
在每个存储节点370上的本地查询处理器可以暴露下面示例性 的查询接口
Query ( queryID, subscriber identifier, bucket identifier, query-expression, more-token, update-cookie) Query接受查询ID、用户标识符、存储桶标识符、查询表达式, 更多-标志对象和更新cookie。如果合适,Query返回查询ID、 eID
列表、更多-标志对象和/或错误消息。
下面是查询服务的组件的示例性预期的接口。
存储节点定位器368可以暴露可用来为写和列表属性操作发现 存储主机的排列的列表的接口 。
GetStorageNodes ( subscriber identifier, bucket identifier)
GetStorageNodes接受用户标识符和存储桶标识符,并且返回一 个或更多存储节点370的列表。
组状况226组件可以暴露可以被查询节点定位器354用来定位可 用的查询TSAR节点360的一个或更多接口。
Status (group)
Status返回在指定组中的节点的状态信息。如果组中没有节点的 状态是已知的,则没有状态(或"状态为未知的")被返回。在一个实 施方式中,状态可以作为对每个节点的质量的向量被返回{状态,[{质 量,级别}, {}...。状态信息可以包括磁盘空间、读取"温度"、活跃度 等中的一个或更多,但不限于这些。
Monitor (group, callback)
Monitor通过异步调用返回组状态改变。
应力管理
可搜索的数据服务的实施方式可以实现分布式非集中的自动应 力管理机制。在实施方式中,可搜索的数据服务中的每个节点可尽可 能多得管理它自己的资源。节点可以监控其资源使用,并且关于其资 源使用可以与其他节点的有限组通信。当在节点上资源使用太高并且 出了舒适区时,则资源可被称为热。没有被充分使用的资源可被称为 冷。每个节点可以有可被执行来保持其资源使用在舒适区内的行动。
在一个实施方式中,应力管理可以是模块化的,分开的过程控制 监控、分析/决定和待执行的行动。在一个实施方式中,磁盘空间可以 被自动应力管理机制主动地管理。其他实施方式可以主动管理其他系 统资源,包括通信带宽、读负载、写负载和/或CPU使用或负载或其 组合中的一个或更多,但不限于这些。
应力管理机制的实施方式可以提供的功能包括但不限于重要资 源的自动监控、资源使用的分析、以及对保持资源使用在舒适区内的 行动的决定和执行。被应力管理机制执行的行动可被执行,以便它们 不产生可能影响总系统性能、可用性和/或可靠性的系统负栽。
在一个实施方式中,可在可搜索的数据服务上被监控的对资源的
使用度量可以包括一个或更多下列项,但不限于这些项
參存储(例如磁盘)空间 一些实施方式可以监控在存储节点上 可用和/或使用的存储空间的百分比,用于确定是否可用的存储空间在 舒适区内。
參CPU(处理器)负载 一些实施方式可以监控CPU (处理器) 使用。 一个实施方式可以监控队列深度和/或一个或更多其他CPU使 用度量。可监控正被使用的节点的可能的总处理能力的百分比,用于 确定是否CPU使用在舒适区内。
争读负载 一些实施方式可以监控磁盘读取的数量。读取可以首 先被查询驱动,并且其次被"列表属性,,调用。实施方式可以保证这些 调用不会没有记载地丟失,如果调用不能被执行,则调用返回错误。
參写负载 一些实施方式可以监控》兹盘写入的数量。当主机/磁 盘有太多的写负载时,eID属性的更新可能慢下来。实施方式可以保 证写入不会没有记栽地丢失,如果调用不能被执行,则更新返回错误。
在一个实施方式中,资源负载日志可以保持在每个节点上,移动 的视窗平均状态显示最近的活动。例如,当磁盘空间对存储节点的舒 适区太热时,数据可以从存储节点移动到 一个或更多其他存储节点。 在一个实施方式中,在资源到达临界低状态之前,应力管理机制可以 增加磁盘空间(或其他资源)。
在一个实施方式中,当磁盘在存储节点上变得太满时(即,当在 存储节点上的磁盘资源使用太热,并且因而出了或接近出了存储节点 的舒适区时),数据可能移出磁盘。在一个实施方式中,这可以使用 最少的数据迁移来执行。
图15是如在这里描述的根据一个实施方式的可搜索的数据服务
系统的应力管理方法的流程图。可搜索的数据服务系统可以在多个节 点上实现。节点可以位于一个数据中心内,或可分散到两个或更多数 据中心中。数据中心在地理上可以是分散的。在一个实施方式中,可 搜索的数据服务至少可以包括协调子系统、查询子系统和存储子系 统。在一个实施方式中,多个节点可以包括实现协调子系统的一个或 更多协调节点、实现查询子系统的一个或更多查询节点(也被称为查
询TSAR节点)和实现存储子系统的一个或更多存储节点。在一个实 施方式中,Web服务平台可以向可搜索的数据服务提供Web服务接
个或更多接口调用。
在一个实施方式中,多个节点可以自我組织成两个或更多节点 组,每个组都包括多个节点的子集。在一个实施方式中,节点组可以 包括每个都包括存储节点的子集的一个或更多存储节点组、每个都包 括查询节点的子集的一个或更多查询节点组、以及每个都包括协调器 节点的子集的一个或更多协调器节点组。在一个实施方式中,每个查 询节点和每个协调器节点可以包括可搜索的数据服务的存储节点定
位器组件的实例,存储节点定位器组件配置为定位适合的存储节点以 接收服务请求,并且节点组可以包括一个或更多存储节点定位器组, 每个存储节点定位器组都包括查询节点和协调器节点的子集。其他实 施方式可以包括其他类型的节点组。
如在1200所示出的,节点组中的每个节点可以为用于在节点上 支持可搜索的数据服务功能的节点的一个或更多本地资源中的每个 监控一个或更多使用度量。在一个实施方式中,节点组中的节点可以 根据闲聊协议把对本地资源的使用度量传播到节点组中的其他节点。 如在1202所示出的,节点组中的一个节点可以检测节点的一个本地 资源的被监控的使用度量越过了对使用度量的指定的舒适区的边界。 如在1204所示出的,节点可以与节点组中的至少一个其他节点通信, 以将节点上本地资源的资源使用的至少一部分传送到节点组中包括 类似资源的另一个节点。在一个实施方式中,闲聊协议和/或反熵协议
可用在与至少一个其他节点的通信中。注意,将本地资源的资源使用 的至少一部分传送到节点组中的另一个节点可以将节点上本地资源 的被监控的使用度量移动到节点上的使用度量的指定的舒适区中。
下面是根据一个实施方式用于管理磁盘负载的示例性应力管理 算法,该算法可以由在可搜索的数据服务系统中的应力管理机制实 现。注意,当必要时该算法处理将新主机添加到可搜索的数据服务系 统,以及当必要时在各个主机(存储节点)上增加硬盘空间。各个主 机可以使用该算法的相关部分的实现,以在本地管理磁盘空间使用。 注意,其他实施方式可以使用其他算法或该算法的修改。
定义
Da=跨越所有存储节点的磁盘使用的平均百分比。
Dth =磁盘使用门限。舒适区的上边缘。
Dc=舒适区的下边缘。
Di=在主机Hi上的磁盘使用的百分比。
Pi=主机Hi上的分区
示例性算法
如果Da〉Dth,增加主机。
如果Di〉Dth,公布Hj提供移动的分区列表。该列表可包括一个 或更多或甚至所有的Hj的分区。
主机在Da < De的场合可以争取获得它们可接受而不超过Dth的
来自列表的分区。
Hi可以接受一个或更多请求命令(bid),使得 Dc < Di (新)< Dth 迁移开销低。 分区到达具有更多自由空间的磁盘。
一段时期后,如果Hi没有接收到使它在Dth之下的请求命令,则 在Hi上分割分区(在一个实施方式中,最小的分区)并且再次提供分 区的更新的列表。
在一个实施方式中,新的分区可以使用相同的或相似的机制被提在一个实施方式中,为了对较大的分区节省磁盘上的大的自由空 间,上面的算法可以被修改,以便如果移动可以将磁盘放入舒适区内, 则分区更可能移动到磁盘。在该实施方式中,在舒适区内的主机可以 不争取获得分区。该修改可以帮助避免将较小的分区移动到有大量自 由空间的磁盘上,因此为较大的分区节省自由空间。
其他实施方式可实现用于移动分区的一个或更多其他规则,该规 则可以应用在磁盘空间应力管理算法的执行中。例如, 一个实施方式
可以实现可使具有分区的磁盘能够增加压缩(降低Dth和/或舒适区的 宽度)的算法,该分区有很小的最近的增长。作为另一个例子, 一个 实施方式可以实现使分区能够移出磁盘的算法,该分区有显著的最近 的增长,并且在低活动性时期期间接近Dth。 组通信
组通信222组件可以用来例如使可搜索的数据服务的其他組件 能够维持索引信息的微弱地一致的被复制的数据库。组通信222可以 将更新"传送"到一个或更多下面类型的被复制的数据集,但不限于这 些数据集
*在单独的存储/索引/查询子系统中的可搜索的数据服务实体。 *存储桶分区信息和单独的存储主机复制组目录。 *对于查询子系统主机和请求路由器202主机的组成员资格信息。
微弱的一致意味着被复制数据的读取可以不反映被应用在复制 组中其它地方的大多数最近的写入所产生的改变。在没有进一步的改 变时,所有的复制应该收敛为相同的值,尽管收敛可以例如被网络分 区和/或系统重启延迟。
在一个实施方式中,组通信可以依靠两种方法闲聊和反熵。闲 聊(或"流言散播(rumor mongering )")是一种通过概率溢流 (probabilistic flooding)的不可靠的多播。反熵是选择随机的对等主 机并且寻找和解决在被选的主机上的对等数据库和其他主机上的对
等数据库之间的任何不同的过程。在一个实施方式中,高级别和低级 别的反熵可以被执行。
高级别的反熵可以比较闲聊更新的同级日志,以处理消息的概率 溢流可能失去主机的情况。高级别反熵可以不参考下层数据库而被执 行。低级别反熵比较数据库(可选地,在一个实施方式中,聚集数据 库的统计数字,例如检查和),并且可以处理节点重启或否则丢失其 消息日志的情况或节点正在加入复制组并且使用低级别反熵来幂等 地得到数据库的拷贝的情况。
在一个实施方式中,组通信222组件可以不理解下层数据库的实 现。组通信222组件提供具有调用的数据库以传播更新,并且依靠数 据库来提供用于处理被接收的更新并执行低级别反熵的调回。
组通信222组件可能具有与组状况226组件的频繁交互作用。在 一个实施方式中,这两个组件可能在分开的过程中实现。在另一个实 施方式中,这两个组件都可以在同一个过程中实现,以《更这两个组件 可以共享数据结构。
复制组生存周期
图16示出了根据一个实施方式的在可搜索的数据服务中的复制 組300的生存周期。新主才几310可以添加到复制组300,并且现有的 主才几310可以从复制组300移除或离开复制组300。新主机310 (例 如主机310J)可以通过将自己声明或保证320为保证304来添加到复 制组300。被保证的主机310 (例如主机310G和310H)可以接收对 复制的数据组的闲聊更新。被保证的主机310接着可以选择现有的复 制组300成员(例如主机310F),并且执行低级别反熵。因为被保证 的主机310也可以接收所有的更新,当反熵完成后,浮皮保证的主机310 可以与任何其它复制组300成员 一样为最新的,并且可以因此使322 本身开始进入到复制组300。
主才几310 (例如主机310K)可以例如通过失败或放弃而离开复 制组300。放弃可能需要同步,因为太多同时的放弃可以使复制组300 落到其最小的组成员资格要求之下。
在一个实施方式中,组成员资格改变可以被发送到称为近亲組
302的主机的一个或更多其他组。对于复制组,近亲组是存储节点定 位器组。对于存储节点定位器组,近亲组是所有的复制组。复制组是 存储特定分区的复制的存储节点组。注意,复制组在图9C和图10中 被示为复制组256。存储节点定位器组是在可搜索的数据服务中的一 组节点(主机),其中每个节点都包括存储节点定位器216的实例。
可搜索的数据服务的实施方式可以包括一个或更多下面类型的 主机或节点的组,但不限于这些类型。注意,为每种类型的组都提供 了名称。这些名称是示例性的,而没有被规定为限制性的。
Snl—主机包括实现存储节点定位器(snl)的一些或所有节点; 在一个实施方式中,所有协调和查询集合子系统节点。
Qtsar—主机包括查询子系统中的一些或所有节点。这也可以 称为查询节点组。
Coord—数据中心—主机在给定数据中心中的所有协调器节点。 这也可以被称为协调器节点组。
參Sn一用户—存储桶—掩码—值—主机对被命名分区的复制组。"sn" 代表"存储节点"。这在其它地方被称为分区组,但也可用被称为存储 节点组。
组通信接口
下面描述根据一个实施方式可被可搜索的数据服务的组通信22 组件暴露或预期的示例性接口(例如外部和内部(对等)调用和调回)。 注意,这些接口是示例性的,而没有规定为限制性的。其他实施方式 可包括其他接口,或可不包括这些接口中的一个或更多。
调用
constructor(argument(s》
一个实施方式可以提供构造新的复制组300的构造器调用。该构 造器可以接受一个或更多参数作为变元,包括但不限于成功地确认所 需要的最少数量的组成员和通过gcast调用接收的服务初始更新(见 下面)。
gcast(Group, Msg)
gcast在组内发起闲聊消息。Group是命名组的字符串。Msg是 指定将要发送到组的消息的值。这可以作为Msg变元来提供给对其他 组成员的apply调回。
在一个实施方式中,gcast调用的结果是对象,其包括包括一个 或更多下面的元素,但不限于这些元素
*主机列出到目前为止确认更新的存储节点的字符串的数组。
*持久性指示消息是否被初始传播到最小数量的组成员的布尔 值。系统可以继续试图传播消息,即使返回假值。
參Cookie:可被随后提供给gsync的值,以察看消息是否被所有的 组成员确i人。
在一个实施方式中,gcast调用可以产生一个或更多下面的错误, 但不限于这些错误 參无效的组类型 *无效的组名 gsync(Cookie)
gsync返回指示是否闲聊消息到达所有没有失败的组成员的布尔 值。Cookie是4皮成功的gcast调用返回的值。gsync调用的结果可以 是指示是否所有的组成员都确认了消息的布尔值。在一个实施方式 中,gsync调用可以产生但不限于无效的Cookie错误。
调回
appIy(Group, Msg)
apply调回对被复制的数据集应用由给定的消息描述的改变。 Group是指示組名的字符串。Msg是指示将要被应用的消息的值。
在一个实施方式中,apply调用的结果可以包括一个或更多下列 项,但不限于这些项
參OK:改变被成功地应用,尽管可能不是完全由于更多最近排序 的改变。
DUP:或"复制"。特定的改变以前已被接收。
LATE:特定的改变被更多最近排序的改变废弃。
*错误给出错误的原因的字符串。由于被错误指定的原因,改
变不能被应用。作为结果,在一个实施方式中,低级别的反熵会话可
以被请求,同等主机执行自我修理(见下面)。 antientropy(Gro叩,Host)
antientropy调回用指定的同等主机为与命名组相关的数据发起 反熵会话。Group是指示组的名称的字符串。Host是指示执行反熵的 同等主机的名称的字符串。Antientropy可返回指示是否整个数据集 被仔细研究的布尔值。如果假,则可优选地用不同的同等主机发起对 相同组的另一反熵会话。在一个实施方式中,antientropy调回可以产 生但不限于组无效或主机无效错误。
对等调用
对等调用对于可搜索的数据服务的实现可以是内在的。这些调用 可以在指定组的成员之间或对这些成员进行。
rumor(Gro叩,Originator, Seqno, OrigVtime, Msg) rumor对等调用通过流言散播来在组中传播更新。Group是指示 更新被传播的组的名称的字符串。Originator指示产生发端主机的名 称的字符串。Seqno指示发起者对更新的序列号。OrigVtime指示发 起者对更新的虛拟时间。Msg指示正在被传播的更新,这可通过应用 调回而应用于远程数据库。Rumor调用的结果可为指示Rumor是否 被成功地接收的布尔值。在一个实施方式中,Rumor调用可以产生但 不限于组无效错误。
requestmembership(Group, Mode, Generation, Seqno)
request—membership对等调用请求发送者在接收者的组成 员资格检查中进行自愿的成员资格改变。Group是指示组的名称的字 符串。Mode指示成员资格改变的类型;在一个实施方式中,这可以 是"保证","发起"和"放弃"中的一个。Generation指示发送者的产生 号,其可以被保证在重启后递增。S叫no指示发起者对操作的序列号, 以便确认向量(见下面)可以用来指示所有的组成员何时看到操作。
request—membership调用的结果可以是指示是否接收者产生被请求 的组成员改变的布尔值。在一个实施方式中,request_membership调 用可以产生但不限于组无效错误。
在一个实施方式中,被接收的request_membership调用可,皮接 收者转发到一个或更多其他组成员。在一个实施方式中,接收者可以 将其他组成员的列表返回到发送者,request—membership调用被转发 到其它组成员。
faiIure(Group, Host, Generation)
failure对等调用宣布组成员被识别为失败了 。 Group是指示组 的名称的字符串。Host识别失败的主机。Generation:指示在失败时 失败的主机的产生。
fast—anti_entropy(Group, View, SummaryVec,
AcknowIedgementVec)
fast_anti_entropy对等调用发起快速或高级别阶段的反熵,以交 换可能被流言散播错过的更新。这些操作的交换可以被任何必要的流 言操作跟随,以使两个主机进入同步。Gro叩是指示组的名称的字符 串。View是表示组成员资格检查的对象。SummaryVec是表示概要 向量的对象。AcknowledgementVec是表示确i人向量的对象。 fast—anti—entropy调用的结果可以是指示信息的成功处理的布尔值, 后面是相互的调用和流言操作的交换,直到这两个主机交换所有可用 的消息。在一个实施方式中,fast—anti一entr叩y调用可以产生但不限 于组无效错误。
在一个实施方式中,-皮接收的fast_anti—entropy调用可以^皮接收 者转发到一个或更多其他组成员。在一个实施方式中,接收者可以将 其他组成员的列表返回到fast_anti_entropy调用,fast—anti—entropy 调用被转发到发送者。
组成员资格和状况
在一个实施方式中,组状况226组件可以允许可搜索的数据 服务的一个或更多其他组件来识別组件可以监控的节点组。组状况
226组件因此可以被其他组件查询关于这些节点的自动刷新的状况信 息。在一个实施方式中,组状况226组件也可以作为故障检测;机制来 执行。
在可搜索的数据服务的实施方式中,主机(节点)可以通过组状 况226组件和组通信222组件交换关于自己或其他节点的状况信息。 在一个实施方式中,如果可搜索的数据服务节点没有与其他节点通 信,则不管是由于节点故障、网络故障,还是一些其他原因,节点的 信息的陈旧可以被其他节点通知,并且计时器可以用来最终宣告无声 的节点为失效的。时间的压缩可通过允许组件异步工作来帮助筒化其 他组件一如果节点a正在等待来自节点b的响应,节点a最终可以 收到来自节点b的响应,或者被通知节点b失效。在一个实施方式中, 如果在等于或大于在最后接收的组状况消息之后的预先规定的超时 时间段内没有接收到来自另一节点的状况消息(直接或通过闲聊接 收),则该节点可以被确定为失效或离线。
在一个实施方式中,被分布的负载平均可至少部分地通过组成员 资格和状况226组件来控制。例如,在一个实施方式中,组状况226 组件可以考虑当前的负栽平均和距离而提供从复制组中选择最好的 成员节点的机制。
在一个实施方式中,在可搜索的数据服务中的每个节点上可以存 在组状况226组件的实例。在一个实施方式中,为了允许其他节点检 测节点的失效,在每个节点上的组状况226组件可以将也被称为心跳 消息的组状况消息周期性地发送给一 个或更多邻居节点。心跳消息可 以包括对该节点的当前本地状况统计。这些统计可以包括一个或更多 下面的节点状况信息度量,但不限于这些度量。
*处理器使用度量-例如cpu(处理器)负载平均/运行队列深度等。
*存储和/或存储器资源使用度量-例如磁盘i/o、硬盘自由空 间、页面调度/交换度量等。
网络/带宽资源使用度量-例如对网络通信资源的网络业务度
统计可以是一个时间段上的平均值(或在不同的时间段上度量的
不同平均值),例如在1分钟或5分钟内。在一个实施方式中,为了 建立在操作中增加或减少负载的边缘变化的估计,节点状况信息度量 的平均值可以与操作计数相关联。在一个实施方式中,组状况226组 件可以按需要查询一个或更多其它本地组件,以得到在用于平均的最 后一个时间段内的操作的每个存储桶故障。统计可以用CPU负载(或 带宽,或存储等)的变化的预测来增加,该变化可以响应于操作数量 的改变而实现,例如,"如果附加的每秒150个查询被接纳,则磁盘 1/0应力将像什么?,,例如,这可以允许存储节点上的分区管理器232 组件估计如果对配置进行一个或更多被提议的改变时负载可能像什 么。
在一个实施方式中,心跳消息可以通过流行或闲聊协议传播到整 个可搜索的数据服务系统中或在可搜索的数据服务系统中的节点组 内的节点上的组件。在一个实施方式中,如上描述的,通信可以通过 可搜索的数据服务的组通信222组件被执行。在一个实施方式中,组 状况信息可以在节点之间和组件消息之间的其他可搜索的数据服务 上背负式输送。
如果节点在超过特定的门限或时间段(例如5分钟)的时期内没 有收到另一个节点的心跳消息,则节点可以假定其它节点失败了。如 果在 一 个时段内节点没有收到来自任何其他节点的任何心跳,则节点 可以假定其网络连接失败了 。
在一个实施方式中,当节点接收了心跳消息时,节点可以检查内 部表,以察看这是否是节点从发起节点看到的最近的心跳消息。如果 不是,心跳消息被丢弃。如果是来自发起节点的最近的心跳消息,则 内部表被更新,并且心跳消息可以接着被发送到一个或更多其他邻居 节点。在一个实施方式中,这些邻居节点可以被随机选择。在一个实 施方式中,以朝着较近的邻居节点的偏置来选择邻居节点,以便减少 心跳在WAN链接上发送的次数。然而,在网络上将心跳消息成功地
发送到远的节点(和接收心跳消息的远的节点)的概率应该足够高, 以达到心跳最终到达可搜索的数据服务中的每个其他数据中心的期 望的信任水平。
在一个实施方式中,转发心跳消息的邻居节点可以在每个被监控
的组的基础上被选择。例如,如果节点A的组状况226组件正在监控 组Gl、 G2和G3,其中在每个组中节点A是成员,以及也监控组G4、 G5和G6,其中节点A不是成员,则节点A的心跳消息可以被发送到 这6个组的每个中的N个主才几。 一个实施方式可以为有重叠的成员资 格的组优化节点的选择,心跳消息被转发到该节点。例如,如果在组 G2中的节点B被选择成接收来自节点A的心跳消息,并且节点B也 是组G4和G6的成员,则节点B也可以被选择成为那些其他的组接 收心跳消息。
如果节点在一个时段例如5分钟内没有看到来自被监控节点的 状况更新,则该节点可以与不同的节点一起执行状况反熵,在一个实 施方式中可根据随着离节点的距离而降低的概率来选择所述不同的 节点。其他实施方式可以采用其它方法或度量或其组合来选择不同的 节点,以不同的节点可以执行状况反熵。例如,在一个实施方式中, 不同的节点可以根据随着有效的网络的和节点利用费用而降4氐的概 率来选择。如果反熵没有为被监控的节点产生更新,则被监控的节点 对在监控的节点上的本地组件可以被指定为死的或不可用的。
在一个实施方式中,一个或更多闲聊或流行协议可以用于状况信 息的更新的微弱一致的多播。在一个实施方式中,组状况226组件可 以不被认为是组通信222组件的合格的客户端,因为组通信222组件 依赖于组成员资格和状况226组件。
组状况226组件可具有与组通信222组件的频繁的交互作用。在 一个实施方式中,这两个组件可以在分离的过程中实现。在另一个实 施方式中,这两个组件都可以在同一个过程中实现,以便这两个组件 可以共享数据结构。
由于可能巨大的节点组,执行状况更新所需要的网络业务的量可
能是衡量可搜索的数据服务的限制因素。因此,在一个实施方式中, 在可搜索的数据服务中的节点組可以被组织为有层次的组,因此当限 制任何单个节点组的尺寸时,允许处理大的数据组。
图17示出了根据一个实施方式用于监控可搜索的数据服务系统 中组状况的方法。可搜索的数据服务系统可以被在多个节点上实现。 这些节点可以位于一个数据中心内,或可分散在两个或更多数据中心 中。数据中心在地理上可以是分散的。在一个实施方式中,可搜索的 数据服务至少可以包括协调子系统、查询子系统和存储子系统。在一 个实施方式中,多个节点可以包括实现协调子系统的一个或更多协调 器节点、实现查询子系统的一个或更多查询节点(也被称为查询TSAR 节点)和实现存储子系统的一个或更多存储节点。在一个实施方式中, Web服务平台可以向可搜索的数据服务提供Web服务接口 ,可搜索 的数据服务向可搜索的数据服务的客户端应用程序提供一个或更多 接口调用。
在一个实施方式中,多个节点可以自我组织成两个或更多节点 组,每个节点组都包括多个节点的子集。在一个实施方式中,节点组 可以包括每个都包括存储节点的子集的一个或更多存储节点组、每个 都包括查询节点的子集的一个或更多查询节点组、以及每个都包括协 调器节点的子集的一个或更多协调器节点组。在一个实施方式中,每 个查询节点和每个协调器节点可以包括可搜索的数据服务的存储节 点定位器组件的实例,存储节点定位器组件配置为定位适合的存储节 点以接收服务请求,并且节点组可以包括一个或更多存储节点定位器 组,其中每个存储节点定位器组都包括查询节点和协调器节点的子 集。其他实施方式可以包括其他类型的节点组。
如在1300示出的,在节点组中的每个节点都可以收集对该节点
的本地状况信息。如在1302示出的,节点组中的每个节点都可以将
包括所收集的对节点的本地状况信息的消息周期性或不定期地发送
到节点组中的至少一个其他节点。如在1304示出的,节点组中的每 个节点都可周期性或不定期地接收发源于节点组内一个或更多其他
节点的包括所收集的对其他节点的本地状况信息的消息。在一个实施 方式中,节点的本地状况信息可以包括一个或更多下列项,但不限于
这些项对本地存储资源的一个或更多存储资源使用度量;对本地处 理器资源的一个或更多处理器使用度量;和对网络通信资源的一个或 更多网络使用度量。
在一个实施方式中,节点组中的节点可以配置为根据闲聊协+义在 节点组内传播消息。在一个实施方式中,节点组中的节点可以在其他 可搜索的数据服务消息上将状况信息背负式输送到节点组中的其他 节点。
在一个实施方式中,状况消息可以用作心跳消息,以检测是否在 节点组内的另一节点变得离线。在该实施方式中,如在1306示出的, 如果在指定的时间段内没有收到包括对其他节点的所收集的本地状 况信息的新消息,则节点组中的 一 个节点可以确定节点組中的另 一 个 节点变得离线。
在一个实施方式中,当检测到在指定的时间段内没有从节点组内 的特定节点接收到包括对另一其他节点的所收集的本地状况信息的 新消息时,该节点可以与节点组中的 一 个或更多其他节点 一起执^f亍反 熵操作,以获得节点组中节点的被更新的状况信息。如果反熵操作没 有产生对特定节点的更新的状况信息,则节点可以确定特定的节点变 得离线。
在一个实施方式中,节点组中的节点可以比较此节点的收集的本 地状况信息与在来自其他节点的消息中接收的节点组中的至少一个 其他节点的本地状况信息。节点可以在对此节点决定本地节点状况中 4吏用该比较。
组成员资格和状况接口
下面根据一个实施方式描述可以被可搜索的数据服务的组状况 226组件暴露或预期的示例性接口 (例如外部和内部(对等)调用和 调回)。注意,这些接口是示例性的,而没有被规定为限制性的。其 他实施方式可包括其他接口,或可以不包括一个或更多这些接口。
调用
add(Group, Host)
add调用将特定的主机(节点)增加到特定的组。如果组不是已 存在的,则该调用可以导致组的创建。 del(Group, Host)
del调用从指定的组中删除指定的主机(节点)。如果删除的主 机是组中唯一的主机,则该调用可导致指定的组的删除。
gdel(Group) gdel调用删除指定的组。
status(Group)
status调用返回对指定组中所有节点的状态信息。包括组中的节 点名和每个被命名的节点上的状态信息的status结果在对象中,皮返 回。对每个节点的状态信息可以包括关于节点是否是已知的指示;也 就是说,通过先前接收的关于被命名节点的信息,节点对于请求者是 否是已知的;如果节点不是已知的,则关于特定节点的其他状态信息 可能是无效的。如果节点是已知的,则节点的状态信息可以包括是否 节点当前是有效的指示,并且也可包括关于节点的其他信息。
monitor(Group)
monitor调用通过一个或更多异步调回来把对指定组的状态的改 变返回给组。
unmonitor(Group)
unmonitor调用对指定的组关闭异步调回。该调用可以对指定的 组撤销monitor调用。
调回
update(Group, Host, Status)
update调回为指定的被监控组中的指定主机(节点)提供状态 改变的立即通知。 对等调用
heartbeat(Originator, OHgVtime, StatVec)
heartbeat对等调用传递心跳的流言。Originator指示发起心跳 的主机。OrigVtime指示心跳的虚拟时间。StatVec是包括关于一个 或更多命名的度量的统计和对统计的值的数组的对象,其中第一个元 素是标准化应力,而第二个元素是在应力中被估计的每个操作的改 变。可包括统计的示例性度量可以包括一个或更多下列项,但不限于 这些项
參CPU:CPU负载平均或一个时间段(例如, 一分钟)的运行队 列深度。
diskspace:磁盘空间利用百分比和4吏用(例如,以千兆字节为 单位)。
參diskio:磁盘1/0操作。
net:网络I/O操作。
mempage:存储器页面调度 管理控制台
可搜索的数据服务的一个实施方式可以提供管理控制台,其可允 许管理员监控可搜索的数据服务系统的行为。图18根据一个实施方 式示出了可搜索的数据服务系统中的管理控制台的高级别体系结构。 管理控制台400可以收集来自可搜索的数据服务系统中的主机410的 信息。在可搜索的数据服务系统实现中,单个事件(例如,查询或增 加)可以导致在系统中的很多主机相互通信。假设可以监控、捕获、 分析、总结和显示关于事件的信息的管理控制台400和在系统中在事 件后的行为(例如消息)的作为结果的级联在可搜索的数据服务系统 的不同阶段期间在系统监控、最优化和故障诊断中可能是有价值的。
管理控制台400可以在可搜索的数据服务系统的开发阶段被使 用,例如以理解系统行为、调试和检测可能需要优化的区域。在生产 阶段期间,管理控制台400可以用来例如监控系统的状况、识别问题, 并且在它们变得严重之前预测和处理问题。
在图18所示的实施方式中,可搜索的数据服务的管理可在分布 式体系结构中实现,分布式管理系统的组件驻留在一个或更多主机
上。远程管理402应用程序可以驻留在主机系统上(管理控制台400 )。 可搜索的数据服务系统中的一个或更多主机410每个都可以包括本地 管理412模块,其监控和收集关于可搜索的数据服务活动、状况4言息 和在主机410中的可搜索的数据服务组件414的通信的信息,包括在 该主机上的组件414之间和在不同主机410上的组件414之间的《且件 到组件的通信。
在一个实施方式中,远程管理402应用程序可在指定的可搜索的 数据服务主机(主机410 )上建立与本地管理412模块的通信信道(例 如,RPC(远程过程调用)或HTTP通信信道),并且请求监控一个或 更多可搜索的数据服务组件414。每个本地管理412模块可以接着建 立与被请求的可搜索的数据服务组件414的连接,并且请求那些可搜 索的数据服务组件414将用于监控的消息开始发送到本地管理412模 块。本地管理412模块将这些消息转发到远程管理402应用程序。
在一个实施方式中,远程管理402应用程序可以向人类客户例如 管理员提供交互式客户端接口 。客户端可通过客户端接口引导远程管 理402应用程序以连接到特定的(或所有)本地管理412模块,并且 可以通过远程管理402应用程序引导本地管理412模块,以启动/禁止 特定的可搜索的数据服务组件414的监控。
管理控制台400可以为客户端(例如,系统管理员)捕获、记录 /存储、执行所收集的信息以及所收集的信息的摘要的分析和图形或/ 或文本显示。在一个实施方式中,管理控制台400可以实现或执4亍一 个或更多下面的行动,但不限于这些行动(参考图6中所示的组件)。
參在可搜索的数据服务主机之间的捕获、记录和显示消息。这些 消息可以包括但不限于请求路由器202之间的消息,存储节点定位 器216之间的消息,查询节点定位器220之间的消息,eID更新管理 器230之间的消息,请求路由器202和查询TSAR212之间的消息, 请求路由器202和eID更新管理器230之间的消息,查询TSAR212 和查询处理器228之间的消息,分区管理器232和存储节点定位器216 之间的消息以及分区管理器232之间的消息。
參在可搜索的数据服务主机内的模块或组件之间的捕获、记录和
显示消息(例如RPC消息)。这些消息可以包括但不限于请求路 由器202 -查询节点定位器220消息,请求路由器202 -存储节点定 位器216消息,分区管理器232 -eID更新管理器230消息,查询 TSAR212-存储节点定位器216消息,存储节点定位器216-組成员 资格和状况226消息,查询节点定位器220 -组成员资格和状况226 消息,分区管理器232-组成员资格和状况226消息,存储节点定位 器216 -组通信222消息和查询节点定位器220 -组通信222消息。 *捕获并且显示eID存储器236和查询索引存储器234的内容。 參监控并且显示组成员资格信息(例如,snL主机,qtsar一主机等)。 參查看存储节点定位器216的状态在主机和分区复制之间的映射。
參查看查询节点定位器220的状态查询TSAR的一致的散列环。
*显示查询TSAR的查询高速緩冲存储器214的内容。
參查看请求路由器202的状态。
*查看分区管理器232的状态。
參修改组成员资格列表。
參在两个节点间发起反熵。
*从系统中增加或移除资源。
*临时或永久地停止一个或更多节点的处理。
再次参考图18,在一个实施方式中,远程管理402应用程序可 以提供一个或更多下列接口,但不限于这些接口。注意,这些接口是 示例性的,而没有被规定为限制性的。
readMsg(String msg)
readMsg从本地管理412模块接收消息。
startMon(String host, int port)
startMon在指定的主机端口连接到本地管理412模块,并且 为该本地管理412模块启用将被监控的所有组件414。 stopMon(String host, int port) stopMon在指定的主机端口停止所有组件414的监控,并且与 本地管理412模块分离。 stopAUMon()
stopAUMon停止所有组件414的监控,并且与所有当前连接的 本地管理412模块分离。
enableComp(String componentName)
enableComp开始监控所有3皮componentName i只别的4皮连接的 主机组件414。
enableAllComp()
enableAllComp能够在静态输入文件中找到的所有组件414上监控。
disableComp(String componentName)
disableComp 4亭止监控4皮componentName iP、别的所有4皮连接的 主机组件414。
disableAllComp()
disableAlIComp停止监控所有组件414,但是没有从当前连接的 本地管理412模块分离。 本地管理模块
在可搜索的数据服务主机410上的本地管理412模块用作远程管 理402应用程序和本地组件414之间的媒介。本地管理412模块等待 远程管理402连接,并且一旦连接到远程管理402应用程序就启用/ 禁止来自远程管理402应用程序的組件414请求。本地管理412才莫块 也可以将关于本地组件414中间的可搜索的数据服务消息的信息转发 到远程管理402应用程序。
下面是从本地管理412模块到远程管理402应用程序的可搜索的 数据服务监控消息的示例性消息格式,且没有被规定为限制性的。
<host/hostname/nodeID>: <Component> <sent/received> on <to/from who> <timestamp>: <msg>
在一个实施方式中,本地管理412模块可以提供一个或更多下面
的接口,但不限于这些接口。注意,这些接口是示例性的,而没有被 规定为限制性的。
monMsg(String msg)
当组件414发送/接收消息时,monMsg被組件414调用。 monBegin(String componentName)
monBegin在静态文件中查找命名的組件414的端口 ,连接到本 地主机端口,并且为组件414调用monEnable()。 inonBeginAll()
monBeginAll读取包括组件414和组件端口的列表的静态输入文 件,连接到文件中列出的组件414,并且为每个組件414调用 monEnable()。
monStop(String componentName)
monStop 4亭止监控命名的组件414。
monStopAll()
monSt叩All停止监控活动的所有当前的组件4U。 本地组件
本地组件414等待本地管理412连接。 一旦连接到本地管 理412模块,当本地组件414接收到来自本地管理412模块的操作请 求(这又出现在当本地管理412模块接收来自远程管理402应用程序的 启用请求时)时,本地组件414可以开始将用于监控的消息发送到本地 管理412模块。当本地組件414收到来自本地管理412模块的禁止请 求时,本地组件414可以停止发送用于监控的消息。
下面是从本地组件414到本地管理412模块的可搜索的数据服务 监控消息的示例性消息格式,且没有被规定为限制性的。
<Component><sent/received> on <to/from who> <timestamp>: <msg>
在一个实施方式中,本地组件414可以提供一个或更多下面的接 口,但不限于这些接口。注意,这些接口是示例性的,而没有被规定 为限制性的。
monDisable()
通过调用sendMsgToMon, monDisable开始向本地管理412模 块发送任何发送/接收的消息。 monDisable()
monDisable停止向本地管理412模块发送消息。 sendMsgToMon(String msg)
当监控被启用时,sendMsgToMon通过调用monMsg(String msg) 向本地管理412模块发送任何发送/接收消息。 可搜索的数据服务系统-物理实现
图19根据一个实施方式示出了在联网环境中的可搜索的数据服 务720的实现。例如,网络700可以表示万维网或互联网。可选地, 网络700可以表示局域网(LAN)和广域网(WAN)。可搜索的数 据服务720可以实现为跨越一个或更多数据中心710 (例如数据中心 710A和710B)。数据中心710可以表示计算装置的本地集合,其可 以包括但不限于服务系统和存储器装置。数据中心710在地理上可以 是分散的。注意,不是数据中心710中的所有计算装置都可以参与可 搜索的数据服务720。
分别在数据中心710A和710B内可搜索的数据服务主机 722A和722B代表托管可搜索的数据服务节点的实例的单独的计算机 系统(例如服务器系统),例如在图4中示出的协调器节点340、查 询TSAR节点350和存储节点360。在一个实施方式中,每个可搜索 的数据服务主机722可以托管一个且仅有一个可搜索的数据服务节 点。在该实施方式中,每个可搜索的数据服务主机722代表不同的可 搜索的数据服务节点,每个协调器节点340、查询TSAR节点350和 存储节点360例示在单独的计算机系统中。
在另 一个实施方式中,可搜索的数据服务主机722可以托管 一个或更多可搜索的数据服务节点。例如在数据中心内的一个可搜索 的数据服务主机722可以托管协调器节点340的实例,而另一个主机 722可以托管查询TSAR节点350和存储节点360的实例。
在一个实施方式中,可搜索的数据服务节点的组件可以被例示为
跨越两个或更多可搜索的数据服务主机722。在该实施方式中,两个 或更多计算机系统可以建立组成一个可搜索的数据服务节点。
可搜索的数据服务存储器724表示可以被可搜索的数据服 务持久地存储的各种数据,例如在图6中示出的elD存储器236、查 询索引存储器234、查询日志210、成员资格映射218和消息日志224。 注意,在一个实施方式中,虽然图12将存储器724显示为在主机722 的外部,可搜索的数据服务存储器724的至少一部分可以位于主机722 内的存储器上。在不同的实施方式中,可搜索的数据服务存储器724 可以被存储在主机722内、数据中心710内、远程地位于网络700的 其他地方的任何类型的持久存储装置或存储系统中或上面的一些组 合。注意,存储节点360逻辑上至少包括本地elD存储器236和查询 索引存储器234,连同被例示在可搜索的数据服务主机722上的组件。 类似地,协调器节点340和查询TSAR节点350在逻辑上包括存储在 可搜索的数据服务存储器724中的至少一些数据。
客户端系统730可以通过任何有线或无线网络连接机制连接到 网络700。客户端系统730可以通过如上所述的Web服务接口访问可 搜索的数据服务720,以建立和更新存储在数据存储器740中的数据 的可搜索的索引,和/或查询可搜索的索引以获得存储在数据存储器 740中实体的定位器。客户端系统730和存储数据存储器740的存储 设备可以位于网络700上的4壬何地方。Web服务接口可以由在连接到 网络700的一个或更多服务器系统上例示的Web服务平台来提供(例 如,见图6的Web月良务平台),Web月l务平台可以或可以不驻留在 包括其他可搜索的数据服务720硬件组件的数据中心710中。注意, Web服务平台可以提供硬件和软件中的冗余,以便Web服务平台对 可搜索的数据服务720不是单个失效点。
注意,可搜索的数据服务720的下层体系结构、实现和操作对客 户端系统730和客户端应用程序的开发者是不透明的,客户端应用程 序例示在客户端系统730上以通过杠杆作用影响可搜索的数据服务
720,作为对数据存储器740的搜索前端。开发者可以依据对可搜索 的数据服务的暴露的Web服务接口可对客户端应用程序的搜索前端 编程。
可搜索的数据服务720可以按比例调节成存储大量的数据。不需 要特殊的配置来按比例调节可搜索的数据服务720。不同种类的机器 可以被增加到系统,并且这些机器可以被检测并且被自动增加到可搜 索的数据服务720。按比例调节可以通过将额外的主机722和存储装 置增加到数据中心710,和/或通过将新的数据中心710增加到可搜索 的数据服务720来获得,而不仅仅通过增加较大的服务器。
可搜索的数据服务720可以通过增加额外的硬件以处理一 个或更多下列项来按比例调节,但不限于这些项
*可搜索的数据服务客户端的数量。
參对可搜索的数据服务用户的特定的可搜索的索引域的尺寸,和 /或对所有用户的所有域的总尺寸。
參在每个可搜索的数据服务对象中的属性的尺寸和数量。
參所服务的请求(读/写总处理能力)的数量。
*节点的数量(例如,可为负载平衡增加额外的协调器节点340 )。
參冗余要求(需要分区的多少复制)。
參大体上可用性、 一致性和性能。额外的节点可以被增加到数据 中心710,和/或额外的数据中心710可以被增加到可搜索的数据服务 720,以改善总系统的可用性、 一致性和性能。作为更具体的例子, 将分区复制到数据中心内的额外的存储节点360或另 一个新增加的数 据中心内的存储器节点360可提供附加的冗余,提高可用性,并且改 善负栽平衡。
不是需要可能昂贵的硬件(例如服务器系统)的特定模块, 或来自特定卖方的硬件/软件服务器解决方案,可搜索的数据服务720 可在数据中心710内在来自一个或更多卖方的相对便宜、不同种类的 商品硬件上实现。来自不同卖方的不同类型的系统在可搜索的数据服 务基础设施中用作具有不同的磁盘大小、执行能力、不同的CPU能
力,RAM能力等的主机722,只要系统与在数据中心710中的其他系 统一般兼容。在一个实施方式中,对主机722的一个或更多最小要求 可以被建立,但是满足最小要求的任何兼容的系统可以用作主机722。
实施方式可以支持两接触(two-touch )数据中心维护模式,由 此,主机722可以不被修复,而相反, 一旦它们失效可,皮替换。通过 使用相对便宜、不同种类的硬件,可搜索的数据服务720可以被廉价 和快速地按比例调节。
从客户端的观点来看,可搜索的数据服务720的功能性和性能应 该不受系统故障例如主机722、网络或甚至数据中心710失效的影响。 如这里所描述的,可搜索的数据服务720的逻辑和物理体系结构没有 单个故障点。可搜索的数据服务720可以经得起数据中心710或甚至 整个数据中心710内机器的暂时或永久的损失,而不影响客户端功能。 可搜索的数据服务720可以经得起主机722、联网硬件或甚至整个数 据中心710的随机故障,而对客户端730没有重大的影响。可搜索的 数据服务720可以经得起在单个数据中心710中的一个或更多主机 722的故意关闭,而不明显影响可搜索的数据服务720的总操作,同 时例如如果有必要或期望,这允许数据中心710内的一组主机722 ,皮 升级。
在一个实施方式中,可搜索的数据服务720可在网络700上提供 全球可访问性。在提供全球可访问性中,可搜索的数据服务720可以 向客户端系统730提供相似的等待时间和总处理能力性能,而不考虑 客户端系统730的地理位置如何。注意,客户端系统730可通过任何 有线或无线网络连接机制与网络700相连接。为了帮助为客户端系统 730提供具有类似的性能经验的全球可访问性而不考虑客户端系统 730的位置,可搜索的数据服务720可以跨越在地理上广泛分散的数 据中心710而被实现。可能需要全球可访问性的用户的可搜索的索引 (域)可以接着跨越在地理上分布和远距离的数据中心710#皮复制。 注意,当越过数据中心730同步数据时,地理上分布的域可能导致在 等待时间的微小增加。
示例性系统
在一个实施方式中,如在这里所描述的实现可搜索的数据服务的
一个或更多组件的主机系统可以包括通用计算机系统,如在图20中 示出的主机系统900,通用计算机系统包括或配置成访问一个或更多 计算机可访问的介质。在所示实施方式中,主机系统900包括通过一 个输入/输出(I/O)接口 930连接到系统存储器920的一个或更多处 理器910。计算机系统900进一步包括连接到1/0接口 930的网络接 口 940。
在不同的实施方式中,计算机系统900可以是包括一个处理 器910的单处理器系统,或者是包括几个处理器910 (例如2、 4、 8 或是另一个适合的数字)的多处理器系统。处理器910可以是能够执 行指令的任何适当的处理器。例如,在不同的实施方式中,处理器910 可以是通用或嵌入式处理器,其实现各种指令集体系结构(ISA)中 的任一个,例如x86、 PowerPC、 SPARC或MIPS ISA或任何其它适 合的ISA。在多处理器系统中,每个处理器910可以通常但不是必须 实现相同的ISA。
系统存储器920可以配置为存储由处理器910可访问的指令和数 据。在不同的实施方式中,系统存储器920可以使用任何适当的存储 器技术来实现,例如静态随机访问存储器(SRAM)、同步动态 RAM(SDRAM)、非易失性/闪烁类型的存储器、或任何其他类型的存 储器。在所示实施方式中,实现期望功能的程序指令和数据,例如上 面为可搜索的数据服务的不同节点描述的那些方法和技术被显示为 作为代码925存储在系统存储器920中。此外,可搜索的数据服务存 储器724C代表可以被可搜索的数据服务持久地存储的各种数据,例 如在图6中示出的eID存储器236、查询索引存储器234、查询日志 210、成员资格映射218和消息日志224,其在一个实施方式中可以存 储在主机900的系统存储器920中的至少一部分上。
在一个实施方式中,1/0接口 930可以配置为协调处理器910、 系统存储器920和装置内任何外围装置之间的1/0业务,包括网络接
口 940或其他外围接口。在一些实施方式中,1/0接口 930可以执行 任何必要的协议、计时或其他数据转换,以将来自一个组件(例如系 统存储器920 )的数据信号转换成适合于由另一个组件(例如处理器 910)使用的格式。在一些实施方式中,1/0接口 930可以包括对通过 不同类型的外围总线连接的装置的支持,例如外围组件互连(PCI)总线 标准或通用串行总线(USB)标准的变形。在一些实施方式中,I/O 接口 930的功能可以分成两个或更多单独的组件,例如北桥和南桥。 此外,在一些实施方式中,I/O接口 930的一些或全部功能,例如对 系统存储器920的接口可以直接合并到处理器910中。
网络接口 940可以配置为允许数据在托管在可搜索的数据服务 节点的主机系统900和连接到网络的其它装置之间交换,例如托管其 他可搜索的数据服务节点的其他主机系统900和可用来存储可搜索的 数据服务存储器724D的至少一部分的存储装置或系统。特别是,网 络接口 940可以配置为允许在主机系统900和网络上托管Web服务 平台840的其他计算机系统之间的通信,该Web服务平台840通过 网络700向客户端系统730提供可搜索的数据服务的Web服务接口。 网络接口 940通常可以支持一个或更多有线或无线联网协议(例如 Wi-Fi/IEEE 802.11,或另一无线联网标准)。在不同的实施方式中, 网络接口 940可以通过任何适合的有线或无线普通数据网络支持通 信,例如其他类型的以太网。此外,网络接口 940可以通过电信/电话 网例如模拟语音网络或数字纤维通信网络、通过存储区域网络例如纤 维通道SAN、或通过任何其他适合类型的网络和/或协议来支持通信。
在一些实施方式中,系统存储器920可以为计算机可访问的存储 介质的一个实施方式,计算机可访问的存储介质配置为存储如上所述 的用于实现可搜索的数据服务的一个或更多组件的如上所迷的程序 指令和数据。然而,在其他实施方式中,程序指令和数据可以被接收、 发送或存储在不同类型的计算机可访问的介质上。 一般而言,计算机 可访问的存储介质可以包括存储介质或存储器介质,例如磁或光介 质,例如通过I/0接口 930连接到计算机系统900的磁盘或DVD/CD。
计算机可访问的存储介质也可以包括任何易失性或非易失性介质,例
如RAM(例如SDRAM 、 DDR SDRAM 、 RDRAM 、 SRAM等)、ROM 等,其可包括在计算机系统900的一些实施方式中作为系统存储器920 或另一种类型的存储器。进一步地,计算机可访问的存储介质可以包 括发送介质或信号,例如通过通信介质如网络和/或无线链接来发送的 电、电磁或数字信号,所述网络和/或无线链接例如可以通过网络接口 940来实现。 结论
不同的实施方式可以进一步包括接收、发送或存储根据对计算机 可访问的存储介质的前述描述来实现的指令和/或数据。 一般而言,计 算机可访问的存储介质可以包括存储介质或存储器介质,例如磁或光 介质,例如磁盘或DVD/CD-ROM、易失性或非易失性介质,例如 RAM(例如SDRAM 、 DDR、 RDRAM 、 SRAM等)、ROM等。以及 发送介质或信号,例如用光通信介质如网络和/或无线链接来发送的 电、电磁或数字信号。
在图中示出和在这里描述的各种方法表示了方法的示例性实施 方式。这些方法可以在软件、硬件或其组合中实现。方法的顺序可以 改变,并且不同的元素可以被增加、重新排序、合并、省略、修改等。
可进行具有本公开的益处的各种修改和变化,如对本领域的技术 人员显而易见的。意图是本发明包括所有这样的修改和改变,因此, 上面的描述在例证的而不是限制的意义上考虑。
权利要求
1、一种系统,包括Web服务平台,其配置为向可搜索的数据服务提供Web服务接口,其中所述Web服务平台配置为根据所述Web服务接口从客户端应用程序接收服务请求,并且其中所述服务请求包括查询请求和存储请求;以及多个节点,其配置为参与所述可搜索的数据服务,以在被所述客户端应用程序使用的数据存储器的可搜索的索引中存储在接收到的存储请求中指定的可搜索的数据服务对象,其中每个可搜索的数据服务对象都指定在所述数据存储器中的特定实体的两个或更多属性,并且其中所述属性包括用于在所述数据存储器中定位所述特定实体的唯一的实体标识符;定位来自所述可搜索的索引中的满足接收到的查询请求的一个或更多可搜索的数据服务对象的组;根据所述Web服务接口至少将所述实体标识符从满足所述查询请求的一个或更多可搜索的数据服务对象的所述组返回到所述客户端应用程序。
2、 如权利要求1所述的系统,其中每个属性被表示为{名称,值}对。
3、 如权利要求l所述的系统,其中所述多个节点包括配置为持 久地存储所述可搜索的索引的一个或更多存储节点。
4、 如权利要求l所述的系统,其中所述多个节点包括一个或更 多查询节点,每个查询节点都配置为维持对先前查询请求的响应的本 地查询高速緩冲存储器。
5、 如权利要求l所述的系统,其中所述多个节点包括 一个或更多存储节点,其配置为持久地存储所述可搜索的索引; 一个或更多查询节点,其配置为维持对先前查询请求的响应的本地查询高速緩冲存储器;以及一个或更多协调器节点,每个都配置为 从所述Web服务平台接收服务请求;将每个存储请求转发到适当的一个或更多所述存储节点;以及 将每个查询请求转发到适当的一个或更多所述查询节点。
6、 如权利要求5所述的系统,其中所述一个或更多存储节点中 的每个都配置为从协调器节点接收存储请求;以及将在所述存储请求中指定的可搜索的数据服务对象增加到所述 可搜索的索引。
7、 如权利要求5所述的系统,其中所述一个或更多存储节点中 的每个都配置为从协调器节点接收存储请求;以及修改存储在所述可搜索的索引中的可搜索的数据服务对象,如在 所述存储请求中指定的。
8、 如权利要求5所述的系统,其中所述一个或更多存储节点中 的每个都配置为从协调器节点接收存储请求;以及从所述可搜索的索引中删除可搜索的数据服务对象的至少一个 部分,如在所述存储请求中指定的。
9、 如权利要求5所述的系统,其中每个所述查询节点都配置为 从协调器节点接收查询请求;访问在所述查询节点上的所述本地查询高速緩冲存储器以确定 是否所述查询请求可从所述本地查询高速緩冲存储器中被满足;如果所述查询请求可从所述本地查询高速緩沖存储器中被满足, 则根据所述Web服务接口至少将来自所述本地查询高速緩冲存储器 的所述实体标识符从满足所述查询请求的一组一个或更多可搜索的 数据服务对象返回到所述客户端应用程序;如果所述查询请求不能从所述本地查询高速緩冲存储器中被满 足,则将所述查询请求转发到适当的一个或更多所述查询节点。
10、 如权利要求9所述的系统,其中所述一个或更多存储节点的 每个都配置为从查询节点接收查询请求;搜索被所述存储节点持久地存储的所述可搜索的索引的分区,以 定位在可搜索的索引中的满足所述查询请求的一组一个或更多可搜 索的数据服务对象;以及根据所述Web服务接口至少将所述实体标识符从满足所述查询 请求的一个或更多可搜索的数据服务对象的所述组返回到所述客户 端应用程序。
11、 如权利要求5所述的系统,其中每个查询节点都配置为 从协调器节点接收查询请求;所述查询请求转发到两个或更多所述存储节点,每个所述存储节 点都持久地存储所述可搜索的索引的不同分区,其中所述不同分区在 所述查询请求的范围之内;从所述查询请求被转发到的所述两个或更多所述存储节点的每 个接收来自所述可搜索的索引的满足所述查询请求的可搜索的数据 服务对象的不同组;合并可搜索的数据服务对象的所述不同组;以及根据所述Web服务接口至少将所述实体标识符从可搜索的数据 服务对象的所合并的组返回到所述客户端应用程序。
12、 如权利要求5所迷的系统,其中每个所迷查询节点都配置为 从协调器节点接收查询请求; 将所述查询请求转发到一个或更多所述存储节点; 从所述查询请求被转发到的所述一个或更多存储节点中的至少一个接收来自所述可搜索的索引的满足所述查询请求的可搜索的数 据服务对象;根据在所述查询请求中的分类具体要求对接收到的可搜索的数 据服务对象分类;以及根据所述Web服务接口并按分类的顺序至少将所述实体标识符从被分类的可搜索的数据服务对象返回到所述客户端应用程序。
13、 如权利要求l所述的系统,其中所述多个节点包括两个或更 多存储节点,每个存储节点都配置为持久地存储所述可搜索的索引的分区;重新划分所述分区以在所述存储节点上产生两个或更多新分区, 其中所述两个或更多新分区中的每个都包括存储在所述可搜索的索 引中的所述可搜索的数据服务对象的不同子集;与其他所述存储节点通信,以定位自愿接收所述两个或更多新分 区中的一个新分区的另一个存储节点;以及与所述另一个存储节点合作,以将所述两个或更多新分区中的一 个移动到所述另一个存储节点。
14、 如权利要求l所述的系统,其中所述多个节点包括两个或更 多存储节点,每个存储节点都配置为持久地存储所述可搜索的索引的分区;与一个或更多其他所述存储节点通信,以定位自愿接收所述分区 的复制的另一个存储节点;以及与所述另 一个存储节点合作,以将所述分区复制到所述另 一个存 储节点。
15、 如权利要求l所述的系统,其中所述多个节点包括两个或更 多存储节点,每个存储节点都配置为持久地存储所述可搜索的索引的分区; 根据反熵协议将所述分区复制到另一个存储节点;以及另一个存储节点,以在所述另一个存储节点上更新所述,分区的复制y
16、 如权利要求l所述的系统,其中为了对所迷可搜索的数据服 务的客户端应用程序执行所述可搜索的数据服务的操作,所述Web 服务接口暴露多个服务请求,其中所述服务请求包括增加请求,其将指定的可搜索的数据服务对象增加到指定的可搜 索的索引;替换请求,其替换在指定的可搜索的索引中的指定的可搜索的数据服务对象的指定部分或全部;删除请求,其从指定的可搜索的索引中删除指定的可搜索的数据 服务对象的至少一个部分;列表属性请求,其返回在指定的可搜索的索引中的一个或更多指定的可搜索的数据服务对象的属性的列表;以及查询请求,其返回在指定的可搜索的索引中的与在所述查询请求 中指定的查询表达式匹配的可搜索的数据服务对象的一组实体标识符。
17、 如权利要求l所述的系统,其中为了给所述可搜索的数据服述服;接口暴露多个服务请求:i中暴露的多个服务请求配置为用于为客户端应用程序实现数据存储器的搜索前端。
18、 如权利要求l所述的系统,其中每个查询请求包括 存储桶标识符,其识别在所述可搜索的数据服务中的特定的可搜索的索引,其中,存储桶定义对所述可搜索的数据服务的查询请求的 范围;以及查询表达式,其指定将应用于被所述存储桶标识符识别的所述可 搜索的索引的指定属性的一个或更多搜索标准,以定位满足所述查询 表达式的可搜索的数据服务对象。
19、 如权利要求18所述的系统,其中每个查询请求进一步包括 唯一地识别所述可搜索的数据服务的特定用户的用户标识符,其中每 个用户标识符都与所述可搜索的数据服务中的一个或更多存储桶标 识符相关联,并且其中每个存储桶标识符都与一个用户确切地关联。
20、 如权利要求18所述的系统,其中查询表达式包括 在所述可搜索的索引中的可搜索的数据服务对象的一个或更多属性;以及一个或更多操作符,其将应用于所述查询表达式中的一个或更多 属性,以定位在所述可搜索的索引中满足所述查询表达式的一组可搜索的数据服务对象。
21、 如权利要求20所述的系统,其中所述操作符包括一个或更 多布尔操作符。
22、 如权利要求20所述的系统,其中所述操作符包括一个或更 多算术操作符。
23、 如权利要求20所述的系统,其中所述操作符包括一个或更 多字符串比较操作符。
24、 如权利要求1所述的系统,其中所述多个节点进一步配置为 对来自满足所述查询请求的一个或更多可搜索的数据服务对象的所述组的所述实体标识符的列表标页数,以产生满足所述查询请求 的实体标识符的两页或更多页;以及在两个或更多响应消息中将实体标识符的所述两页或更多页返 回到所述客户端应用程序,其中每个响应消息包括实体标识符的一 页。
25、 如权利要求l所述的系统,其中所述多个节点分布在两个或 更多数椐中心当中。
26、 如权利要求25所迷的系统,其中所述数据中心在地理上是 分散的。
27、 如权利要求25所述的系统,其中每个数据中心都包括所述 多个节点中的一个或更多存储节点,其配置为持久地存储所述可搜索的索引的 至少一部分;一个或更多查询节点,每个都配置为维持对先前查询请求的响应 的本地查询高速緩冲存储器;至少一个协调器节点,其配置为 从所述Web服务平台接收服务请求;将每个存储请求转发到在所述数据中心内的适当的一个或更多所述存储节点;以及将每个查询请求转发到在所述数据中心内的适当的一个或更多所述查询节点。
28、 如权利要求l所述的系统,其中所述多个节点包括多个存储 节点,其中所述多个存储节点分布在两个或更多数据中心当中,其中每个数据中心都包括所述多个存储节点中的两个或更多;其中在数据中心内的至少两个所述存储节点持久性地存储所述可搜索的索引的分区的复制;以及其中在至少一个其他数据中心内的至少两个其他存储节点持久性地存储所述可搜索的索引的所述分区的复制。
29、 如权利要求l所述的系统,其中所述多个节点中的每一个都配置为根据闲聊协议将可搜索的数据服务信息传播到所述多个节点 中的其他节点。
30、 如权利要求29所述的系统,其中所传播的可搜索的数据服 务信息包括对复制到所述多个节点中的两个或更多节点的所述可搜 索的索引的分区的更新信息。
31、 如权利要求29所述的系统,其中所传播的可搜索的数据服 务信息包括所述多个节点中的每个节点的本地状况和状态信息。
32、 如权利要求29所述的系统,其中所述多个节点配置为組织 成节点组,每个节点组都包括所述多个节点的子集,且其中每个节点 组配置为根据闲聊协议在所述组中传播可搜索的数据服务信息。
33、 如权利要求l所述的系统,其中所述Web服务平台进一步 包括对所述可搜索的数据服务执行测量、计帐、认证和用户的访问控 制的一个或更多服务,其中用户是与一个或更多客户端应用程序相关 联的实体,每个客户端应用程序都配置为通过所述Web服务接口访 问所述可搜索的数据服务,作为对由所述客户端应用程序使用的 一个 或更多数据存储器的搜索前端。
34、 如权利要求l所述的系统,其中所述Web服务平台进一步 配置为根据对所述可搜索的数据服务的所述Web服务接口从多个客 户端应用程序接收服务请求。
35、 如权利要求l所述的系统,其中所述多个节点进一步配置为存储多个可搜索的索引,每个可搜索的索引都配置为存储由多个客户 端应用程序中的一个或更多所使用的分离和不同的数据存储器的可 搜索的数据服务对象。
36、 如权利要求l所述的系统,其中所述多个节点中的至少两个 配置成参与在不同种类的装置上实现的所述可搜索的数据服务。
37、 一种方法,包括在可搜索的数据服务的Web服务接口上从客户端应用程序接收 服务请求,其中所述服务请求包括查询请求和存储请求;从所述Web服务接口将每个服务请求都转发到配置为参与所迷 可搜索的数据服务的多个节点中的一个;在所述多个节点上处理接收的存储请求,以在所述客户端应用程 序使用的数据存储器的可搜索的索引中存储在所述存储请求中指定 的可搜索的数据服务对象,其中每个可搜索的数据服务对象指定在所 述数据存储器中的特定实体的两个或更多属性,且其中所述属性包括 用于在所述数据存储器中定位所述特定实体的唯一的实体标识符;在所述多个节点上处理每个接收的查询请求,以定位来自可搜索 的索引的满足所述查询请求的一组一个或更多可搜索的数据服务对 象;以及根据所迷Web服务接口至少将所迷实体标识符从满足所述查询 请求的一个或更多可搜索的数据服务对象的所述组返回到所述客户 端应用程序。
38、 如权利要求37所述的方法,其中每个属性被表示为{名称, 值}对。
39、 如权利要求37所述的方法,其中所述多个节点包括配置为 持久地存储所述可搜索的索引的一个或更多存储节点。
40、 如权利要求37所述的方法,其中所述多个节点包括一个或 更多查询节点,每个查询节点都配置为维持对先前查询请求的响应的 本地查询高速緩冲存储器。
41、 如权利要求37所述的方法,其中所述多个节点包括一个或更多存储节点,其配置为持久地存储所述可搜索的索引; 一个或更多查询节点,其配置为维持对先前查询请求的响应的本地查询高速緩冲存储器;一个或更多协调器节点,其配置为将服务请求按规定路线发送到所述多个节点中的其他节点。
42、 如权利要求41所述的方法,进一步包括 在协调器节点上从所述Web服务接口接收所述服务请求; 将每个存储请求从所述协调器节点转发到适当的一个或更多所述存储节点;以及将每个查询请求从所述协调器节点转发到适当的一个或更多所 述查询节点。
43、 如权利要求42所述的方法,进一步包括 在存储节点上从所述协调器节点接收存储请求;以及 在所述存储节点上将在所述存储请求中指定的可搜索的数据服务对象增加到所述可搜索的索引。
44、 如权利要求42所述的方法,进一步包括 在存储节点上从所述协调器节点接收存储请求;以及 在所述存储节点上修改存储在所述可搜索的索引中的可搜索的数据服务对象,如在所迷存储请求中指定的。
45、 如权利要求42所述的方法,进一步包括 在存储节点上从所述协调器节点接收存储请求;和 从所述可搜索的索引中删除可搜索的数据服务对象的至少一部分,如在所述存储请求中指定的。
46、 如权利要求42所述的方法,进一步包括 在查询节点上从所述协调器节点接收查询请求; 访问在所述查询节点上的本地查询高速緩冲存储器,以确定是否所述查询请求可从所述本地查询高速緩沖存储器中被满足;如果所述查询请求可从所述本地查询高速緩冲存储器中被满足, 则根据所述Web服务接口至少将来自所述本地查询高速緩沖存储器的所述实体标识符从满足来自所述查询节点的所述查询请求的一组一个或更多可搜索的数据服务对象返回到所述客户端应用程序;如果所述查询请求不能从所述本地查询高速援冲存储器中被满 足,则将所述查询请求从所述查询节点转发到适当的一个或更多所述 存储节点。
47、 如权利要求46所述的方法,进一步包括 在存储节点上从所述查询节点接收存储请求; 搜索被所述存储节点持久地存储的所述可搜索的索引的分区,以定位所述可搜索的索引中满足所述查询请求的一组一个或更多可搜 索的数据服务对象;以及根据所述Web服务接口至少将所述实体标识符从满足所述查询 请求的一个或更多可搜索的数据服务对象的所述组返回到所述客户 端应用程序。
48、 如权利要求42所述的方法,进一步包括 在查询节点上从协调器节点接收查询请求; 将所述查询请求转发到两个或更多所述存储节点,每个存储节点都持久地存储来自所述查询节点的所述可搜索的索引的不同分区,其 中所述不同分区在所述查询请求的范围之内;在所述查询节点上从所述查询请求被转发到的两个或更多所述 存储节点的每个接收来自可搜索的索引的满足所迷查询请求的可搜 索的数据服务对象的不同组;在所述查询节点上合并可搜索的数据服务对象的所述不同组;以及根据所述Web服务接口至少将所述实体标识符从可搜索的数据 服务对象的所合并的组返回到所述客户端应用程序。
49、 如权利要求42所述的方法,进一步包括 在查询节点上从协调器节点接收查询请求; 将所述查询请求转发到一个或更多所述存储节点; 在所述查询节点上从所述查询请求被转发到的一个或更多所述存储节点中的至少一个接收来自所述可搜索的索引的满足所述查询请求的可搜索的数据服务对象;根据在所述查询请求中的分类具体要求对所接收到的可搜索的 数据服务对象分类;以及根据所述Web服务接口并按分类的顺序至少将所述实体标识符
50、 如权利要求37所述的方法,其中所述多个节点包括两个或 更多存储节点,且其中所述方法进一步包括对被一个所述存储节点持久地存储的所述可搜索的索引的分区 重新划分,以在所述存储节点上产生两个或更多新分区,其中所迷两 个或更多新分区中的每个都包括存储在所述可搜索的索引中的所述 可搜索的数据服务对象的不同子集;在所述存储节点与存储节点中的一个或更多其他存储节点之间 通信,以定位自愿接收所述两个或更多新分区中的一个的另一个存储 节点;执行所述存储节点与另 一个存储节点之间的合作操作,以将所述 两个或更多新分区中的一个移动到所述另一个存储节点。
51、 如权利要求37所述的方法,其中所述多个节点包括两个或 更多存储节点,以及其中所述方法进一步包括在所述存储节点之间通信以定位自愿者存储节点,所述自愿者存 储节点自愿接收被一个所述存储节点持久地存储的所述可搜索的索 引的分区的复制;以及执行所述存储节点与所述自愿者存储节点之间的合作操作,以将 所述分区复制到所述另一个存储节点。
52、 如权利要求37所述的方法,其中所述多个节点包括两个或 更多存储节点,以及其中所述方法进一步包括执行在一个所述存储节点与另一个所述存储节点之间的合作操 作,以根据反熵协议把被所述存储节点持久地存储的所述可搜索的索 引的分区复制到所述另一个存储节点;以及根据闲聊协议把对所复制的分区的随后的存储请求从所述存储 节点传送到所述另一个存储节点,以在所述另一个存储节点上更新所 述分区的复制。
53、 如权利要求37所迷的方法,进一步包括为了通过所述Web 服务接口来对所述可搜索的数据服务的客户端应用程序执行所述可 搜索的数据服务的操作,暴露多个服务请求,其中通过所述Web服 务接口暴露的所述服务请求包括增加请求,其将指定的可搜索的数据服务对象增加到指定的可搜 索的索引;替换请求,其在指定的可搜索的索引中替换指定的可搜索的数据 服务对象的指定部分或全部;删除请求,其从指定的可搜索的索引中删除指定的可搜索的数据服务对象的至少一部分;列表属性请求,其返回在指定的可搜索的索引中的一个或更多指定的可搜索的数据服务对象的属性的列表;以及查询请求,其返回在指定的可搜索的索引中与在所述查询请求中指定的查询表达式匹配的可搜索的数据服务对象的一组实体标识符。
54、 如权利要求37所述的方法,进一步包括为了通过所述Web 服务接口给所述可搜索的数据服务的客户端应用程序的开发者执行 所述可搜索的数据服务的操作,暴露多个服务请求,其中被暴露的多 个服务请求配置为用于为所述客户端应用程序实现数据存储器的搜 索前端。
55、 如权利要求37所述的方法,其中每个查询请求包括 存储桶标识符,其识别在所述可搜索的数据服务中的特定的可搜索的索引,其中,存储桶定义对所述可搜索的数据服务的查询请求的 范围;以及查询表达式,其指定将应用于被所述存储桶标识符识别的所述可 搜索的索引的指定属性的一个或更多搜索标准,以定位满足所述查询 表达式的可搜索的数据服务对象。
56、 如权利要求55所述的方法,其中每个查询请求进一步包括 唯一地识别所述可搜索的数据服务的特定用户的用户标识符,其中每 个用户标识符都与所述可搜索的数据服务中的一个或更多存储桶标 识符相关联,并且其中每个存储桶标识符都与 一个用户确切地相关联。
57、 如权利要求55所述的方法,其中查询表达式包括 在所述可搜索的索引中的可搜索的数据服务对象的一个或更多属性;一个或更多操作符,其将应用于在所述查询表达式中的一个或更 多属性,以定位在所述可搜索的索引中满足所述查询表达式的一组可 搜索的数据服务对象。
58、 如权利要求57所述的方法,其中所述操作符包括一个或更 多布尔操作符。
59、 如权利要求57所述的方法,其中所迷操作符包括一个或更 多算术操作符。
60、 如权利要求57所述的方法,其中所述操作符包括一个或更 多字符串比较操作符。
61、 如权利要求37所述的方法,进一步包括 对来自满足所述查询请求的一个或更多可搜索的数据服务对象的所述组的实体标识符的列表标页数,以产生满足所述查询请求的实 体标识符的两页或更多页;以及在两个或更多响应消息中将实体标识符的所述两页或更多页返 回到所述客户端应用程序,其中每个响应消息包括实体标识符的一 页。
62、 如权利要求37所述的方法,其中所述多个节点分布在两个 或更多数据中心当中。
63、 如权利要求62所述的方法,其中所述数据中心在地理上是 分散的。
64、 如权利要求62所述的方法,其中每个数据中心包括所述多个节点中的一个或更多存储节点,其配置为持久地存储所述可搜索的索引的 至少一部分;一个或更多查询节点,其配置为维持对先前查询请求的响应的本 地查询高速緩冲存储器;以及 至少一个协调器节点; 其中所述方法进一步包括在数据中心内的协调器节点上从所述Web服务接口接收服务请求;将每个存储请求从所述协调器节点转发到在所述数据中心中的 适当的一个或更多所述存储节点;以及将每个查询请求从所述协调器节点转发到在所述数据中心中的 适当的一个或更多所述查询节点。
65、 如权利要求37所述的方法,其中所述多个节点包括多个存 储节点,其中所述多个存储节点分布在两个或更多数据中心当中,其 中每个数据中心包括所述多个存储节点中的两个或更多其中在数据中心内的至少两个所述存储节点持久性地存储所述 可搜索的索引的分区的复制;以及其中在至少一个其他数据中心内的至少两个其他存储节点持久 性地存储所述可搜索的索引的所述分区的复制。
66、 如权利要求37所述的方法,进一步包括根据闲聊协议将至少一些可搜索的数据服务信息从所述多个节点中的每个传播到所述 多个节点中的其他节点。
67、 如权利要求66所述的方法,其中所传播的可搜索的数据服 务信息包括对复制到所述多个节点中的两个或更多节点的所迷可搜 索的索引的分区的更新信息。
68、 如权利要求66所述的方法,其中所传播的可搜索的数据服 务信息包括所述多个节点中的每个节点的本地状况和状态信息。
69、 如权利要求66所述的方法,进一步包括将所述多个节点组织成节点组,每个节点组包括所述多个节点的一个子集;以及根据闲聊协议在每个节点组中传播可搜索的数据服务信息。
70、 如权利要求37所述的方法,其中所述Web服务接口由Web 服务平台提供,以及其中所述Web服务平台进一步包括对所述可搜 索的数据服务执行测量、计帐、认证和用户的访问控制的一个或更多 服务,其中用户是与一个或更多客户端应用程序相关联的实体,每个 客户端应用程序都配置为通过所述Web服务接口访问所述可搜索的 数据服务,作为被所述客户端应用程序使用的一个或更多数据存储器 的搜索前端。
71、 如权利要求37所述的方法,进一步包括在所述Web服务接 口上从多个客户端应用程序接收服务请求。
72、 如权利要求37所述的方法,进一步包括在所述多个节点上 存储多个可搜索的索引,每个可搜索的索引配置为存储被多个客户端 应用程序中一个或更多使用的分离和不同的数据存储器的可搜索的 数据服务对象。
73、 一种包括程序指令的计算机可访问的存储介质,其中所述程 序指令配置为在多个节点上执行可搜索的数据服务,其中所述可搜索 的数据服务配置为通过配置成向所述可搜索的数据服务提供Web服务接口的Web 服务平台来从客户端应用程序接收服务请求,其中所述服务请求包括 查询请求和存储请求;在所述多个节点上处理接收的存储请求,以在被所述客户端应用 程序使用的数据存储器的可搜索的索引中存储在所述存储请求中指 定的可搜索的数据服务对象,其中每个可搜索的数据服务对象指定在 所述数据存储器中的特定实体的两个或更多属性,并且其中所述属性 包括用于在所述数据存储器中定位所述特定实体的唯一的实体标识符;在所述多个节点上处理接收的查询请求,其中处理每个接收的查询请求以定位来自所述可搜索的索引的满足所述查询请求的一组一个或更多可搜索的数据服务对象;以及根据所述Web服务接口至少将所述实体标识符从满足所述查询 请求的一个或更多可搜索的数据服务对象的所述组返回到所述客户 端应用程序。
74、 如权利要求73所述的计算机可访问的存储介质,其中每个 属性被表示为{名称,值}对。
75、 如权利要求73所述的计算机可访问的存储介质,其中所述 多个节点包括配置为持久地存储所述可搜索的索引的一个或更多存 储节点。
76、 如权利要求73所述的计算机可访问的存储介质,其中所述 多个节点包括一个或更多查询节点,每个查询节点都配置为维持对先 前查询请求的响应的本地查询高速緩冲存储器。
77、 如权利要求73所述的计算机可访问的存储介质,其中所述 程序指令配置为在所述多个节点上将可搜索的数据服务实现为一个或更多存储节点,其配置为持久存储所述可搜索的索引; 一个或更多查询节点,其配置为维持对先前查询请求的响应的本 地查询高速緩冲存储器;以及一个或更多协调器节点,每个都配置为 从接所述Web服务平台接收服务请求;将每个存储请求转发到适当的一个或更多所述存储节点;以及 将每个查询请求转发到适当的一个或更多所述查询节点。
78、 如权利要求77所述的计算机可访问的存储介质,其中所述 一个或更多存储节点的每个都配置为从协调器节点接收存储请求;以及将在所述存储请求中指定的可搜索的数据服务对象增加到所迷 可搜索的索引。
79、 如权利要求77所述的计算机可访问的存储介质,其中所述 一个或更多存储节点的每个都配置为从协调器节点接收存储请求;以及修改存储在所述可搜索的索引中的可搜索的数据服务对象,如在 所述存储请求中指定的。
80、 如权利要求77所述的计算机可访问的存储介质,其中所述一个或更多存储节点的每个都配置为 从协调器节点接收存储请求;以及从所述可搜索的索引中删除可搜索的数据服务对象的至少一部 分,如在所述存储请求中指定的。
81、 如权利要求77所述的计算机可访问的存储介质,其中每个 所述查询节点都配置为从协调器节点接收查询请求;访问在所述查询节点上的所述本地查询高速緩冲存储器,以确定 是否所述查询请求可从所述本地查询高速緩冲存储器中被满足;如果所述查询请求可从所述本地的查询高速緩沖存储器中被满 足,则根据所述Web服务接口至少将来自所述本地查询高速緩冲存 储器的所述实体标识符从满足所迷查询请求的一组一个或更多可搜 索的数据服务对象返回到所述客户端应用程序;如果所述查询请求不能从所述本地查询高速緩沖存储器中被满 足,则将所述查询请求转发到适当的一个或更多所述存储节点。
82、 如权利要求81所述的计算机可访问的存储介质,其中一个 或更多所述存储节点的每个都配置为从查询节点接收存储请求;搜索被所述存储节点持久地存储的所述可搜索的索引的分区,以 定位在所述可搜索的索引中的满足所述查询请求的一组一个或更多 可搜索的数据服务对象;以及根据所述Web服务接口至少将所述实体标识符从满足所述查询 请求的一个或更多可搜索的数据服务对象的所述组返回到所述客户 端应用程序。
83、 如权利要求77所述的计算机可访问的存储介质,其中每个所述查询节点都配置为从协调器节点接收查询请求;将所述查询请求转发到两个或更多所述存储节点,每个所述存储 节点都持久地存储所述可搜索的索引的不同分区,其中所述不同分区 在所述查询请求的范围之内;从所述查询请求被转发到的两个或更多所述存储节点的每个接 收来自可搜索的索引中的满足所述查询请求的可搜索的数据服务对 象的不同组;合并可搜索的数据服务对象的所述不同组;以及 根据所述Web服务接口至少将所述实体标识符从可搜索的数据 服务对象的所合并的组返回到所述客户端应用程序。
84、 如权利要求77所述的计算机可访问的存储介质,其中每个 所述查询节点都配置为从协调器节点接收查询请求; 将所述查询请求转发到一个或更多所述存储节点; 从所述查询请求被转发到的一个或更多所述存储节点中的至少一个接收来自所述可搜索的索引中的满足所述查询请求的可搜索的数据服务对象;根据在所迷查询请求中的分类具体要求对接收到的可搜索的数 据服务对象分类;以及根据Web服务接口并按分类的顺序至少将所述实体标识符从所 分类的可搜索的数据服务对象返回到所述客户端应用程序。
85、 如权利要求73所述的计算机可访问的存储介质,其中所述 程序指令配置为将所述多个节点中的两个或更多实现为存储节点,每 个存储节点都配置为持久地存储所述可搜索的索引的分区;重新划分所述分区以产生两个或更多新分区,其中所述两个或更 多新分区中的每个都包括存储在所述可搜索的索引中的所述可搜索 的数据服务对象的不同子集;与其他存储节点通信以定位自愿接收所述两个或更多新分区中的一个新分区的另一个存储节点;以及与所述另一个存储节点合作以将所述两个或更多新分区中的一 个移动到所述另一个存储节点。
86、 如权利要求73所述的计算机可访问的存储介质,其中所述 程序指令配置为将所述多个节点的两个或更多实现为存储节点,每个存储节点都配置为持久地存储所述可搜索的索引的分区;与一个或更多所述其他存储节点通信以定位自愿接收所迷分区 的复制的另一个存储节点;以及与所述另一个存储节点合作以将所述分区复制到所述另一个存 储节点。
87、 如权利要求73所述的计算机可访问的存储介质,其中所述 程序指令配置为将所述多个节点的两个或更多实现为存储节点,每个存储节点都配置为持久地存储所述可搜索的索引的分区;根据反熵协议将所述分区复制到另一个存储节点;以及根据闲聊协议把对所复制的分区的随后的存储请求传送到所述另一个存储节点,以在所述另一个存储节点上更新所述分区的复制。
88、 如权利要求73所述的计算机可访问的存储介质,其中为了服务的操作,所述Web服务接口暴露多个服务请求,其中所述服务 请求包括增加请求,其将指定的可搜索的数据服务对象增加到指定的可搜 索的索引;替换请求,其在指定的可搜索的索引中替换指定的可搜索的数据服务对象的指定部分或全部;删除请求,其从指定的可搜索的索引中删除指定的可搜索的数据 服务对象的至少一部分;列表属性请求,其返回在指定的可搜索的索引中的一个或更多指定的可搜索的数据服务对象的属性的列表;以及查询请求,其返回在指定的可搜索的索引中与在所述查询请求中指定的查询表达式匹配的可搜索的数据服务对象的一组实体标识符。
89、如权利要求73所述的计算机可访问的存储介质,其中为了索的数据服务的操作,所述Web服务接口暴露多个服务请求,其中 所暴露的多个服务请求配置为用于为所述客户端应用程序实现数据 存储器的搜索前端。
90、 如权利要求73所述的计算机可访问的存储介质,其中每个 查询请求包括存储桶标识符,其识别在所述可搜索的数据服务中的特定的可搜 索的索引,其中,存储桶定义对所述可搜索的数据服务的查询请求的 范围;以及查询表达式,其指定将应用于被所迷存储桶标识符识别的所述可 搜索的索引的指定属性的一个或更多搜索标准,以定位满足所述查询 表达式的可搜索的数据服务对象。
91、 如权利要求90所述的计算机可访问的存储介质,其中每个 查询请求进一步包括唯一地识别所述可搜索的数据服务的特定用户 的用户标识符,其中每个用户标识符都与所述可搜索的数据服务中的 一个或更多存储桶标识符相关联,并且其中每个存储桶标识符都与一 个用户确切地相关联。
92、 如权利要求90所述的计算机可访问的存储介质,其中查询 表达式包括在所述可搜索的索引中的可搜索的数据服务对象的一个或更多 属性;以及一个或更多操作符,其将应用于在所述查询表达式中的一个或更 多属性,以定位在所述可搜索的索引中满足所述查询表达式的一组可 搜索的数据服务对象。
93、 如权利要求92所述的计算机可访问的存储介质,其中所述 操作符包括一个或更多布尔操作符。
94、 如权利要求92所述的计算机可访问的存储介质,其中所述 操作符包括一个或更多算术操作符。
95、 如权利要求92所述的计算机可访问的存储介质,其中所述 操作符包括一个或更多字符串比较操作符。
96、 如权利要求73所述的计算机可访问的存储介质,其中所述 可搜索的数据服务进一步配置为对来自满足所述查询请求的一个或更多可搜索的数据服务对象 的所述组的所述实体标识符的列表标页数,以产生满足所述查询请求 的实体标识符的两页或更多页;以及在两个或更多响应消息中将实体标识符的所述两页或更多页返 回到所述客户端应用程序,其中每个响应消息包括实体标识符的一 页。
97、 如权利要求73所述的计算机可访问的存储介质,其中所述 多个节点分布在两个或更多数据中心当中。
98、 如权利要求97所述的计算机可访问的存储介质,其中所述 数据中心在地理上是分散的。
99、 如权利要求97所述的计算机可访问的存储介质,其中所述 程序指令配置为在每个数据中心内实现一个或更多存储节点,其配置为持久地存储所述可搜索的索引的 至少一部分;一个或更多查询节点,其配置为维持对先前查询请求的响应的本 地查询高速緩冲存储器;至少一个协调器节点配置为 从所述Web服务平台接收服务请求;将每个存储请求转发到在所述数据中心中的适当的一个或更多 所述存储节点;以及将每个查询请求转发到在所述数据中心中的适当的一个或更多所述查询节点。
100、 如权利要求73所述的计算机可访问的存储介质,其中所述 程序指令配置为实现所述可搜索的数据服务的多个存储节点,其中所 述多个存储节点分布在两个或更多数据中心当中,其中每个数据中心 包括所述多个存储节点中的两个或更多;其中在数据中心内的至少两个所述存储节点持久性地存储所述可搜索的索引的分区的复制;以及其中在至少一个其他数据中心内的至少两个其他存储节点持久 性地存储所述可搜索的索引的所述分区的复制。
101、 如权利要求73所述的计算机可访问的存储介质,其中所述多个节点中的每个都配置为根据闲聊协议将可搜索的数据服务信息 传播到所述多个节点中的其他节点。
102、 如权利要求101所述的计算机可访问的存储介质,其中所 传播的可搜索的数据服务信息包括对复制到所述多个节点中的两个 或更多节点的所述可搜索的索引的分区的更新信息。
103、 如权利要求101所迷的计算机可访问的存储介质,其中所 传播的可搜索的数据服务信息包括所述多个节点中的每个节点的本 地状况和状态信息。
104、 如权利要求101所述的计算机可访问的存储介质,其中所 述多个节点配置为组织成节点组,每个节点组包括所述多个节点的子集,且其中每个节点组配置为根据闲聊协议在所述组中传播可搜索的 数据服务信息。
105、 如权利要求73所述的计算机可访问的存储介质,其中所述 Web服务平台进一步包括配置成对所述可搜索的数据服务执行测量、 计帐、认证和用户的访问控制的一个或更多服务,其中用户是与一个或更多客户端应用程序相关联的实体,每个客户端应用程序配置为, 通过所述Web服务接口访问所述可搜索的数据服务,作为被所述客 户端应用程序使用的一个或更多数据存储器的搜索前端。
106、 如权利要求73所述的计算机可访问的存储介质,其中所述Web服务平台进一步配置为根据对所述可搜索的数据服务的所述 Web服务接口从多个客户端应用程序接收服务请求。
107、 如权利要求73所述的计算机可访问的存储介质,其中所述 可搜索的数据服务进一步配置为存储多个可搜索的索引,每个可搜索 的索引配置为存储由多个客户端应用程序中的一个或更多使用的分 离和不同的数据存储器的可搜索的数据服务对象。
108、 一种可搜索的数据服务节点,包括 一个或更多处理器;网络接口,其配置为可通信地连接到网络;以及存储器,其包括程序指令,其中所述程序指令可以被所述一个或 更多处理器执行,以根据Web服务接口通过所述网络从客户端应用程序接收可搜索 的数据服务请求,其中所述可搜索的数据服务请求包括查询请求;定位来自被所述客户端应用程序使用的数据存储器的可搜索的 索引中的满足所接收的查询请求的一个或更多可搜索的数据服务对 象的组,其中每个可搜索的数据服务对象都指定在所述数据存储器中 的特定实体的两个或更多属性,并且其中所述属性包括用于在所述数据存储器中定位所述特定实体的唯一的实体标识符;根据所述Web服务接口通过所述网络至少将所述实体标识符从 满足所述查询请求的一个或更多可搜索的数据服务对象的所述組返 回到所述客户端应用程序。
109、 如权利要求108所述的可搜索的数据服务节点,其中所述 可搜索的数据服务请求进一步包括存储请求,并且其中所述程序指令 进一步可被所述一个或更多处理器执行,以在被所述客户端应用程序 使用的所述数据存储器的所述可搜索的索引中存储在接收的存储请 求中指定的可搜索的数据服务对象。
110、 如权利要求109所述的可搜索的数据服务节点,其中所述 可搜索的数据服务节点是可搜索的数据服务协调器节点;其中,为了在所述可搜索的索引中存储在接收的存储请求中指定的可搜索的数据服务对象,所述程序指令进一步可被所述一个或更多 处理器执行,以将每个存储请求转发到合适的一个或更多可搜索的数据服务存储节点;以及其中,为了定位来自所述可搜索的索引的满足接收的查询请求的 一个或更多可搜索的数据服务对象的组,所述程序指令进一步可被所 述一个或更多处理器执行,以将每个查询请求转发到合适的一个或更 多可搜索的数据服务查询节点。
111、 如权利要求108所述的可搜索的数据服务节点,其中每个 属性被表示为{名称,值}对。
112、 如权利要求108所述的可搜索的数据服务节点,其中所述 可搜索的数据服务节点是进一步包括一个或更多数据存储装置的可 搜索的数据服务存储节点,并且其中所述程序指令进一步可被所述一 个或更多处理器执行,以在所述一个或更多数据存储装置上持久地存 储所述可搜索的索引的至少一个分区。
113、 如权利要求112所述的可搜索的数据服务节点,其中所述 程序指令进一步可被所迷一个或更多处理器执行,以重新划分存储在所述一个或更多数据存储装置上的所述可搜索 的索引的分区,以在所述一个或更多数据存储装置上产生两个或更多 新分区,其中所述两个或更多新分区中的每个都包括存储在所述可搜 索的索引中的所述可搜索的数据服务对象的不同子集;与一个或更多其他可搜索的数据服务存储节点通信,以定位另一 个可搜索的数据服务存储节点来接收所述两个或更多新分区中的一 个;以及与所述另 一个可搜索的数据服务存储节点合作,以将所述两个或 更多新分区中的一个移动到所述另一个可搜索的数据服务存储节点。
114、 如权利要求112所述的可搜索的数据服务节点,其中所述 程序指令进一步可被所述一个或更多处理器执行,以与一个或更多其他可搜索的数据服务存储节点通信,以定位另一 个可搜索的数据服务存储节点来接收存储在所述一个或更多数据存储装置上的所述可搜索的索引的分区的复制;与所述另 一个可搜索的数据服务存储节点合作,以将所述分区复 制到所述另一个可搜索的数据服务存储节点。
115、 如权利要求108所述的可搜索的数据服务节点,其中所述 程序指令进一步可被所述一个或更多处理器执行,以根据反熵协议将存储在所述一个或更多数据存储装置上的所述 可搜索的索引的分区复制到另一个可搜索的数据服务存储节点;以及根据闲聊协议把对被复制的分区的随后的存储请求传送到另一 个可搜索的数据服务存储节点,以更新在所述另 一个可搜索的数据服 务存储节点上的所述分区的复制。
116、 如权利要求108所述的可搜索的数据服务节点,其中所述 可搜索的数据服务节点是可搜索的数据服务查询节点,并且其中所述 程序指令进一步可被所述一个或更多处理器执行,以维持对先前查询 请求的响应的本地查询高速緩冲存储器。
117、 如权利要求116所述的可搜索的数据服务节点,其中,为 了定位来自所述可搜索的索引的满足所接收的查询请求的一个或更 多可搜索的数据服务对象的组,所述程序指令进一步可被所述一个或 更多处理器执行,以接收查询请求;访问在所述查询节点上的所述本地查询高速緩冲存储器,以确定 是否所述查询请求可从所迷本地查询高速緩冲存储器中被满足;如果所述查询请求可从所述本地查询高速緩冲存储器中被满足, 则根据所述Web服务接口至少将来自所述本地查询高速緩冲存储器 中的所述实体标识符从满足所述查询请求的一组一个或更多可搜索 的数据服务对象返回到所述客户端应用程序;如果所述查询请求不能从所述本地查询高速緩冲存储器中被满 足,则将所述查询请求转发到适当的一个或更多可搜索的数据服务存 储节点。
118、 如权利要求108所述的可搜索的数据服务节点,其中每个查询请求包括存储桶标识符,其识别在所述可搜索的数据服务中的特定的可搜 索的索引,其中存储桶定义对所述可搜索的数据服务的查询请求的范 围;以及查询表达式,其指定将应用于被所述存储桶标识符识别的可搜索 的索引的指定属性的一个或更多搜索标准,以定位满足所述查询表达 式的可搜索的数据服务对象。
119、 如权利要求108所述的可搜索的数据服务节点,其中所述 程序指令进一步可被所述一个或更多处理器执行,以根据闲聊协议将 可搜索的数据服务信息传播到所述一个或更多其他可搜索的数据服 务节点。
120、 如权利要求119所述的可搜索的数据服务节点,其中所传 播的可搜索的数据服务信息包括复制到两个或更多所述可搜索的数 据服务节点的所述可搜索的索引的一个或更多分区的更新信息。
121、 如权利要求108所述的可搜索的数据服务节点,其中所传 播的可搜索的数据服务信息包括所述可搜索的数据服务节点的本地 状况和状态信息。
122、 一种方法,包括在可搜索的数据服务的Web服务接口上从客户端应用程序接收 查询请求;将来自所述Web服务接口的每个查询请求转发到配置为参与所 述可搜索的数据服务的多个节点中的至少一个,其中每个查询请求都 包括查询标准;从所述多个节点的相应的一个接收对每个查询请求的查询结果, 其中每个查询结果包括来自所述可搜索的数据服务的可搜索的索引的满足所述查询请求的所述搜索标准的一个或更多可搜索的数据服 务对象中的每个的实体标识符;以及根据所述Web服务接口至少将所述实体标识符从满足所述查询 请求的所述一个或更多可搜索的数据服务对象中的每个返回到所述客户端应用程序,其中每个实体标识符在被所述客户端应用程序使用 的数据存储器中定位特定实体。
123、 如权利要求122所述的方法,进一步包括 在所述可搜索的数据服务的所述Web服务接口上从所述客户端应用程序接收存储请求;将每个存储请求从所述Web服务接口转发到配置为参与所述可 搜索的数据服务的多个节点中的至少一个,其中每个存储请求指定对 所述可搜索的索引的更新操作;从所述多个节点中的相应的一个接收对每个存储请求的更新结果;根据所述Web服务接口把对每个存储请求的更新响应返回到所 述客户端应用程序,其中每个更新响应包括被所述相应的更新请求指 定的更新操作的更新结果。
124、 如权利要求122所述的方法,其中在所述数据存储器中每 个可搜索的数据服务对象指定特定实体的两个或更多属性,并且其中 所述属性包括用于在所述数据存储器中定位所述特定实体的唯一的 实体标识符。
125、 如权利要求122所述的方法,其中所述多个节点包括 一个或更多存储节点,其配置为持久地存储所述可搜索的索引并满足查询请求;一个或更多查询节点,每个查询节点都配置为从对先前查询请求 的响应的本地查询高速緩冲存储器中满足查询请求,并且将不满足的查询请求转发到所述存储节点;以及一个或更多协调器节点,其配置为将包括从所述Web服务接口 收到的查询请求的请求按规定路线发送到所述多个节点中的其他节 点。
126、 如权利要求122所述的方法,进一步包括为了通过所述 Web服务接口对所述可搜索的数据服务的客户端应用程序执行所述 可搜索的数据服务的操作,暴露多个服务请求,其中通过所述Web 服务接口暴露的所迷服务请求包括增加请求,其将指定的可搜索的数据服务对象增加到指定的可搜 索的索引;替换请求,其替换在指定的可搜索的索引中的指定的可搜索的数 据服务对象的指定部分或全部;删除请求,其从指定的可搜索的索引中删除指定的可搜索的数据 服务对象的至少一部分;列表属性请求,其返回在指定的可搜索的索引中的一个或更多指 定的可搜索的数据服务对象的属性的列表;以及查询请求,其返回在指定的可搜索的索引中的与所述查询请求中 指定的查询表达式匹配的一组可搜索的数据服务对象的实体标识符。
127、 如权利要求122所述的方法,进一步包括为了通过所述 Web服务接口给所述可搜索的数据服务的客户端应用程序的开发者 执行可搜索的数据服务的操作,暴露多个服务请求,其中所暴露的多 个服务请求配置为用于为所述客户端应用程序实现数据存储器的搜 索前端。
128、 如权利要求122所述的方法,其中每个查询请求包括 存储桶标识符,其识别在所述可搜索的数据服务中的特定的可搜索的索引,其中,存储桶定义对所述可搜索的数据服务的查询请求的 范围;以及查询表达式,其指定将应用于被所述存储桶标识符识别的所述可 搜索的索引的指定属性的一个或更多搜索标准,以定位满足所述查询 表达式的可搜索的数据服务对象。
129、 如权利要求122所迷的方法,其中所述Web服务接口由 Web服务平台提供,且其中所述Web服务平台进一步包括执行对所 述可搜索的数据服务的测量、计帐、认证和用户的访问控制的一个或 更多服务,其中用户是与一个或更多客户端应用程序相关联的实体, 每个客户端应用配置为通过所迷Web服务接口访问所述可搜索的数 据服务,作为对被客户端应用使用的一个或更多数据存储器的搜索前端。
130、如权利要求122所述的方法,进一步包括在所述Web服务 接口上从多个客户端应用程序接收查询请求。
全文摘要
可搜索的数据服务的实现可以包括但不限于Web服务平台(200)、一个或更多协调器节点(350)、称为查询TSAR(顶部搜索集合器)节点(360)的一个或更多查询节点、以及一个或更多存储节点(370)。每个协调器节点(350)可以包括但不限于请求路由器(202)的至少一个实例。客户端系统(330)可以通过互联网(334)根据Web服务平台(200)的Web服务接口提交对可搜索的数据服务的服务请求(查询节点请求和/或存储节点请求)。Web服务平台(200)可将服务请求按规定路线发送到协调器节点(350)。协调器节点350将服务请求按规定路线发送到合适的节点,收集结果,并将结果发送回Web服务平台(200)。在协调器节点(350)上的请求路由器可以接收来自Web服务平台(200)的服务请求,并且确定每个服务请求是存储节点请求还是查询节点请求。
文档编号G06F17/30GK101395602SQ200680053521
公开日2009年3月25日 申请日期2006年11月30日 优先权日2005年12月29日
发明者A·V·马丁诺夫, J·R·科利特, J·S·拉森, P·W·兰西尔, P·撒哈, R·W-C·楚 申请人:亚马逊科技公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1