CN101395602A - 用于分布式文件存储和索引服务的方法和装置 - Google Patents
用于分布式文件存储和索引服务的方法和装置 Download PDFInfo
- Publication number
- CN101395602A CN101395602A CNA2006800535217A CN200680053521A CN101395602A CN 101395602 A CN101395602 A CN 101395602A CN A2006800535217 A CNA2006800535217 A CN A2006800535217A CN 200680053521 A CN200680053521 A CN 200680053521A CN 101395602 A CN101395602 A CN 101395602A
- Authority
- CN
- China
- Prior art keywords
- data
- searching
- services
- node
- nodes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
- G06F16/24557—Efficient disk access during query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3433—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment for load management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/282—Hierarchical databases, e.g. IMS, LDAP data stores or Lotus Notes
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99933—Query processing, i.e. searching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
可搜索的数据服务的实现可以包括但不限于Web服务平台(200)、一个或更多协调器节点(350)、称为查询TSAR(顶部搜索集合器)节点(360)的一个或更多查询节点、以及一个或更多存储节点(370)。每个协调器节点(350)可以包括但不限于请求路由器(202)的至少一个实例。客户端***(330)可以通过互联网(334)根据Web服务平台(200)的Web服务接口提交对可搜索的数据服务的服务请求(查询节点请求和/或存储节点请求)。Web服务平台(200)可将服务请求按规定路线发送到协调器节点(350)。协调器节点350将服务请求按规定路线发送到合适的节点,收集结果,并将结果发送回Web服务平台(200)。在协调器节点(350)上的请求路由器可以接收来自Web服务平台(200)的服务请求,并且确定每个服务请求是存储节点请求还是查询节点请求。
Description
技术领域
本发明涉及数据存储和取回,更具体地涉及用于数据存储器的可搜索的索引。
背景技术
有时候被简称为“网络”的互联网是计算机网络的世界范围内的***,其中在任何一个计算机的客户端可以在允许的情况下从任何其他计算机获取信息。互联网的最广泛使用的部分是通常被简写为“WWW”的万维网,其通常被称为“Web”。Web可以被定义为所有的资源(例如网页和网站)和在互联网上使用超文本传输协议(HTTP)或其变化形式来访问资源的客户端。网站是包括被称为主页的开始文件的Web文件的有关集合。从主页中,客户端可以导航到网站上的其他网页。Web服务器程序是使用客户端/服务器模型和HTTP来对Web客户端提供形成网站的网页的文件的程序,Web客户端的计算机包括转发请求并且显示响应的HTTP客户端程序(例如Web浏览器)。Web服务器程序可以托管一个或更多网站。
数据存储
通过各种应用来存储用于访问的不同类型的数据对象的数据存储器在计算机***和应用、联网、互联网和相关的技术领域中是所关心的和开发的主要领域。按照惯例,开发者创建其自己的数据存储解决方案来存储数据对象,用杠杆作用影响现货供应的数据库产品如Oracle/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示出了根据一个实施方式通过复制分区的数据复制。
图10示出了根据一个实施方式在复制组中的分区的分离。
图11示出了根据一个实施方式的示例性存储节点及其组件。
图12示出了根据一个实施方式的可搜索的数据服务的不同组件并且进一步示出了组件中间的数据流,该组件可以组成查询子***或与查询子***相互作用以执行来自可搜索的数据服务的客户端的查询服务。
图13示出了根据一个实施方式的标识符环。
图14示出了根据一个实施方式的单个存储节点的示例性结构。
图15是根据一个实施方式的可搜索的数据服务的应力管理方法的流程图。
图16示出了根据一个实施方式在可搜索的数据服务中的复制组的生存周期。
图17示出了根据一个实施方式用于监控在可搜索的数据服务中的组成员资格和状况的方法。
图18示出了根据一个实施方式在可搜索的数据服务中的管理控制台的高级别体系结构。
图19示出了根据一个实施方式在网络环境中的可搜索的数据服务的实现。
图20是示出了可以实现实施方式的计算机***的示例性实施方式的结构图。
虽然本发明在这里作为例子对几个实施方式和原理图进行了描述,但本领域的技术人员应认识到,本发明不限于所描述的实施方式和附图。应理解,这些附图和对其的详细描述并不是用来将本发明限制到所公开的特定形式,而是相反,本发明覆盖落入本发明的实质和范围内的所有修改、等效和备选方案,如被附加的权利要求定义的。在这里使用的标题仅仅是用于组织的目的,而不意味着用于限制说明书或权利要求的范围。如在整个申请中使用的,词“可以(may)”以许可的含义(即,意味着有可能),而不是强制的含义(即,意味着必须)使用。类似地,词“包括(include)”,“including”,“includes”意味着包括但不限于。
具体实施方式
描述了用于通用的可搜索的数据服务的方法和装置的不同实施方式。在一个实施方式中,可搜索的数据服务可以实现为Web服务,该Web服务允许开发者存储表示为{名称,值}对的属性,{名称,值}对与在数据存储器中的数据对象(实体)相关。与实体相关的属性可被自动编索引以用在搜索中。搜索表达式可以对属性执行逻辑和算术操作,以找到和取回数据对象或被实体的***(也称为实体标识符或eID)识别的实体。可搜索的数据服务的实施方式可以依据这里所描述的体系结构来实现,开发者可以通过Web服务接口来访问该体系结构以为容易实现的数据存储器提供客户端应用程序的搜索前端,并且为可靠、快速和可升级的数据存储器建立和更新可搜索的索引。
可搜索的数据服务的实施方式可以提供对后端数据存储器的可搜索的索引以及建立和查询可搜索的索引的接口,所述可搜索的索引使客户端应用程序能够按照与每个***相关的属性列表来搜索和取回在后端数据存储器中存储的数据的***(在数据存储器中数据的单位或数据对象在这里可以称为实体)。后端数据存储器可以实现为任何类型的数据存储***并且可以存储任何类型的数据对象(实体),其中***可以用来定位和取回实体。在可搜索的数据服务中,实体可以通过数据存储器中实体的***来描述,该***可以被称为实体标识符或eID。每个***或eID可以具有被表示为{名称,值}对的相关的实体属性组。注意,***或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可以在与互联网100相连的服务器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可以通过互联网100向Web服务接口106发送请求消息。这个请求消息通过网络和互联网基础设施,穿过Web服务客户端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服务调用,通过该调用开发者可以增加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)来执行。注意,其他实施方式可以对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编码字符串,以便属性可以容易地用在UTF-8编码查询表达式字符串中。
●索引:与eID相关联的每个属性都可以有或被提供可以被查询的索引,以取回满足查询表达式的eID的列表。
●序列ID:确认更新请求的接收并允许更新的状态被追踪的可搜索的数据服务产生的唯一的标识符。在一个实施方式中,序列ID可以用来排序和维持更新请求的一致性;具有较高序列ID的请求整体取代具有较低序列ID的请求。注意,在一个实施方式中,序列ID可能没有暴露给客户端。
●客户端(例如图2中的客户端330):术语客户端可以用于表示由希望使用可搜索的数据服务***的可搜索的数据服务用户开发的任何应用程序、脚本、软件片段等。
●用户:可搜索的数据服务用户可为了记账、计量和可能其他目的而唯一地由用户标识符识别。每个可搜索的数据服务用户可以有使用相同的用户标识符访问其在可搜索的数据服务中的数据的多个客户端。用户标识符可以用在可搜索的数据服务中以定位存储在可搜索的数据服务中的用户的eID数据。用户可以是一个或更多存储桶的拥有者。用户也可以被称为客户。
●可搜索的数据服务请求:指客户端通过Web服务接口发送到可搜索的数据服务以执行这里描述的一个或更多可搜索的数据服务操作的调用(包括数据)。
●可搜索的数据服务响应:指当可搜索的数据服务处理由客户端发送的可搜索的数据服务请求时,可搜索的数据服务发送回客户端的响应。
●存储桶:指用户可能为了语义或其它原因而希望保持在一起的可搜索的数据服务对象的组。查询穿过一个存储桶而被应用。存储桶也可以被称为域或可搜索的索引。每个存储桶都由存储桶标识符识别。在一个实施方式中,每个用户标识符可以与一个或更多存储桶标识符关联,但是存储桶标识符可与一个且只有一个用户标识符相关联。
下面示出了用户、存储桶、实体标识符(eID)之间的关系。
用户->存储桶->eID
在一个实施方式中,可搜索的数据服务逻辑上为每一个用户存储桶维持eID->属性表。下面是示例性eID->属性表的表示。
eID 属性
k1 {{名称,值}},{{名称,值}}...
k2 {{名称,值}},{{名称,属值}}...
K3 {{名称,值}},{{名称,值}}...
……………………
在一个实施方式中,每一个eID在表中(在存储桶中)都是唯一的;eID因此可以被视为用户提供的实体键。在一个实施方式中,eID可以主要由可印刷的字符组成。
关于属性和{名称,值}对之间的关系,属性可以一般由一个{名称,值}对来表示。然而,在一个实施方式中,在上面的表中在任一行上有具有相同名称的多个{名称,值}对是可能的,指示该名称的多值属性。例如,下面来自eID->属性表的示例性的行示出对于被指定为eID的特定URL,关键字属性是多值的。
eID 属性
<url> (名称="keywords",值="xxx"),(名称="keywords",值="yyy"),...
在一个实施方式中,在{名称,值}中的所有值被表示为字符串。为了使字符串的比较操作符返回相同的真值作为数字,数字可以是零填充的。例如,当“>”符号是比较的字符串时,“21”>“100”为真,但当它是比较的数字时为假;然而,当作为字符串或数字比较时,“021”和“100”具有相同的真值。在一个实施方式中,格式例如ISO8601可以用来允许日期-时间值作为字符串被正确地比较。
在一个实施方式中,eID->属性表中的每一行可以被认为是可搜索的数据服务对象。可搜索的数据服务对象可以表示为:
用户->存储桶->eID->{属性列表}
当用户希望建立索引时可创建可搜索的数据服务对象,该索引可用于搜索被客户端应用程序使用并被实体标识符(eID)识别的数据存储器中的实体。当创建可搜索的数据服务对象时,用户可至少提供下列输入:
●用户ID
●存储桶标识符-识别域
●eID
●属性列表-与实体相关联的{名称,值}对的列表
在一个实施方式中,对于可搜索的服务对象,可搜索的数据服务可以自动提供也表示为{名称,值}对的一个或更多其他的属性。除了用户提供的属性的列表之外,这些其他属性也可以被编索引和搜索。这些属性可以被称为基本属性。在一个实施方式中,所有域中和对所有用户的所有可搜索的数据服务对象可以包括这些基本属性。在另一个实施方式中,这些基本属性中的一个或更多可以是可选的。基本属性可以包括一个或更多下列项但不限于下列项:
●建立时间/日期-指示可搜索的数据服务对象何时被建立的时间戳。
●最近修改的时间/日期-指示可搜索的数据服务对象何时被最后修改的时间戳。最初可与建立时间/日期相同。
●最近访问的时间/日期-指示可搜索的数据服务对象何时被最后访问的时间戳。
●被谁建立-指示建立这个可搜索的数据服务对象的特定用户/客户端。
●最近被谁修改-指示最近修改这个可搜索的数据服务对象的特定用户/客户端。
●尺寸-指示这个可搜索的数据服务对象的尺寸(例如,以字节为单位)。
●访问权利-指示对这个可搜索的数据服务对象的访问权利。
当用户指定的所有属性以及基本属性被编索引并且eID被持久地存储时,可搜索的数据服务对象可被认为成功地创建。当可搜索的数据服务对象没有被成功地创建时,可指示对象为什么不可被建立的原因的错误代码和消息可被返回给用户。
在一个实施方式中,用户通过可搜索的数据服务可以读取可搜索的数据服务对象和与对象相关的基本属性。在一个实施方式中,可搜索的数据服务对象可通过指定用户标识符、存储桶标识符和可搜索的数据服务对象的eID来从可搜索的数据服务中被读取。
在一个实施方式中,用户可以通过提供待更新的可搜索的数据服务对象的用户标识符、存储桶标识符和eID连同更新信息一起来更新可搜索的数据服务对象。在一个实施方式中,用户可以增加或删除eID,增加或删除eID的属性,并且修改与现有的属性相关联的值。在一个实施方式中,可能不允许用户增加、删除、或修改至少一些基本属性。然而,当用户修改可搜索的数据服务对象时,与对象修改相关联的一个或更多基本属性可被更新。
在一个实施方式中,仅当用户希望按在请求消息中所指定的来修改的所有eID和属性,包括与属性相关联的索引被更新时,可搜索的数据服务对象才可以被认为成功地更新。在一个实施方式中,部分的更新可能不被允许。例如,如果请求指定需要被修改的多个属性,并且一个修改不能被执行,则整个更新请求可能会失败,而没有一个修改被执行。当可搜索的数据服务对象没有被成功地更新时,指示对象为什么不可被更新的原因的错误代码和消息可返回给用户。
在一个实施方式中,用户可通过提供待删除的对象的用户标识符、存储桶标识符和eID来从域中删除现有的可搜索的数据服务对象。在一个实施方式中,仅当不再有具有与对象相关联的eID的对象可被访问的保证时,并且当此对象不再是可搜索的时,可搜索的数据服务对象才被成功地删除。在一个实施方式中,在可搜索的数据服务对象被删除之后,可能有eID仍然可用来访问对象的一段时间。此外,对象可在一段时间为可搜索的是可能的。如果可搜索的数据服务对象及其关联的索引不能被删除,则删除请求失败,并且可通过错误代码和消息通知用户失败。在一个实施方式中,一旦可搜索的数据服务对象从域中被删除,eID就可以在域中被用户重新使用。
在一个实施方式中,用户可以请求用户域(存储桶)、编入索引的属性、可搜索的数据服务对象以及eID的列表。连同可搜索的数据服务对象和用户提供的属性一起,用户可在列出可搜索的数据服务对象时访问由可搜索的数据服务提供的基本属性。在一个实施方式中,用户可以执行一个或更多下面的列表操作但不限于这些列表操作:
●列出与指定前缀匹配的所有可搜索的数据服务对象和/或eID;
●列出与用户关联并由唯一的用户标识符识别的所有域(存储桶);
●列出在域下(存储桶内)被编入索引的所有属性;
●列出在域下的所有可搜索的数据服务对象和/或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的属性。这在上面的表中可被显现为从左到右进行—例如,如果给定“k1”作为变元,则在“k1”右边的所有{名称,值}对被返回。
●查询-eID。给定查询表达式,从存储桶返回满足该表达式的所有eID。这在上面的表中可被显现为从右到左进行。在一个实施方式中,查询表达式是使用布尔操作符(例如非、与、或)合并的谓词(predicate)的集合。谓词表示对属性列表的名称和/或值域必须保持真的条件。
更新操作
这些可搜索的数据服务操作可以被客户端通过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和相关的属性的请求),或是查询节点请求(取回一个或更多eID和/或相关的属性的请求)。
●如果服务请求是存储节点请求,则请求路由器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的变化,例如查询节点的增加或去除可以被传递到查询节点***。在一个实施方式中,一个本地节点***可以响应于变化而被最初更新,并且依照闲聊协议该变化可以从该节点***传播到其他节点上的其它节点***。
可搜索的数据服务可包括在不同的节点和部件中间的通信机制,该机制例如允许存储和查询节点***监控在可搜索的数据服务实施方式中的变化(例如增加或除去的节点、对存储子***206的复制、分区、写入等),并且因此根据通信的更新信息来更新存储在相应的表中的信息。在一个实施方式中,通信机制可以按照闲聊或流行(epidemic)协议来实现。该通信机制可以允许一个节点上的变化传播到可能需要该信息的可搜索的数据服务实施方式的所有节点和部件。在一个实施方式中,通信机制提供微弱地一致的更新;通信机制传播信息,所以不提供对所有节点的立即更新。然而,通信***可足够快地传播更新,以在可追踪该信息的不同节点和部件中间维持弱的一致性。在一个实施方式中,通信机制传播更新信息,以便传递的信息不完全覆盖***的通信带宽。在一个实施方式中,这可以通过背负式输送(piggyback)关于其他部件之间或节点之间通信的至少一些更新信息来完成。
在一个实施方式中,在存储子***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最初驻留在单个存储节点上。因为数据集可以无限地增长,分区可以超过存储节点上磁盘的物理容量。为了允许这种可能性,在一个实施方式中,存储桶中的数据可以被分离到两个或更多分区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之间变化。
图10示出了根据一个实施方式在复制组中分区的分割。在该实施方式中,存储桶254中分区254的数量可以通过在复制组256中分割分区254而增加。复制组256对给定的散列后缀变成相应于可通过给该后缀增加一个或更多位而形成的两个后缀的两个分区(两个复制组)。在图10中示出的实施例中,散列后缀_10的复制组256N被分割为由后缀_010和_110标识的两个分区(复制组256N_0和复制组256N_1)。
使用该机制,两个新复制组256N_0和256_1的初始成员资格可确切地与被分割的复制组256N的成员资格相同。最初没有数据迁移出现,并且查询和更新可以如分割前一样被分配。然而,当新的存储节点被增加到一个分割的复制组256(在这个例子中,复制组256_0)时,复制组有多于所需要数量的成员。有应力的主机可以接着离开复制组256_0(同时保留在复制组256_1中),在这种情况下,通过删除其数据的一半(复制组256_0中的一半),因而减轻了主机上的应力。因此,将单个节点增加到存储桶252可以减轻在存储子***上的至少一些应力。
注意,如果所有的主机都有相同数量的磁盘空间(即,在磁盘空间方面相似),并且如果数据在分区254中间被或多或少均匀地划分,则在存储桶252内的所有主机可能趋向于在大约相同的时间用完空间,这可能要求每当存储桶需要重新分区时存储桶252中主机的数量加倍。
当使用同类主机时,为了帮助避免每当存储桶需要分区时必须加倍存储桶252中的主机,可搜索的数据服务的实施方式可以使用可或多或少地随机增加主机的一个或更多机制,被增加到有应力的复制组256的主机的概率与复制组256上被测量的应力成比例地增加。使用这些机制,复制组256的分割可以在复制组上的存储应力变为临界值之前被执行。当应力较低时,一个或更多新主机可以提早增加到分割的复制组256,当被测量的应力水平增加时,新主机增加得更频繁。
分区管理器接口
在一个实施方式中,分区管理器232可根据API与eID更新管理器230相互作用。下面是示例性API,其可以被分区管理器232使用,并且可以包括一个或更多所描述的示例性调用和返回,但不限于这些调用和返回。
setpartitions(Subscriber,Bucket,AcceptPartitionList,DropPartitionList)
AcceptPartitionList和DropPartitionList是字符串数组,其中每个字符串都表示分区掩码。eID更新管理器230记住新的接受分区列表,并且使用该列表来过滤进入的操作。eID更新管理器230可接着进入数据存储器以移除项目,这些项目的散列eID与撤销分区类表中的模式相匹配。接受分区列表或撤销分区类表可以为空的。当存储节点引导时,其接受分区列表可为空的,并且可以使用来自分区管理器232的调用而被初始化。
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上被编辑的查询索引234。也要注意,在一个实施方式中,所示组件的实例可以驻留在可搜索的数据服务实施方式中的每个存储节点270上。
在一个实施方式中,本地eID存储器236和本地eID更新管理器230可以一起运行,以提供一个或更多下面的功能,但不限于这些功能:
●支持列表属性API:在客户端提交更新后,客户端可以读回与eID相关的属性。
●支持查询索引234的建立和重新建立:eID存储器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的指示,eID更新管理器230应该维持该指示,且如果有,它应除去该指示。
注意,存储节点270可以包括一个或更多存储桶分区254。在一个实施方式中,分区决定在eID更新管理器230的范围之外。然而,eID更新管理器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可以形成为"p12_client1bucket1/photos/xy.jpg",其指示用户标识符("client1")与用户的一个存储桶("bucket1")连接,是12个字符长,跟在12个字符后的是eID字符串:"/photos/xy.jpg"。根据查找功能所期望的(对用户标识符、存储桶标识符和eID的相等查找,对用户标识符和存储桶的相等查找,但对eID的范围和相等查找),Key(...)在实施方式中可以各种方式实现。
在一个实施方式中,BDB-value可以包括更新操作(例如替换、增加和/或删除)的集合及其相应的序列ID,序列ID帮助补充BDB-key中eID的属性。在一个实施方式中,如果序列ID更高,则对属性的新的更新操作取代在eID存储器中现有的更新操作。例如,给定eID,对属性的替换操作具有比在eID存储器236中对该属性的替换更高的序列ID,从eID存储器236移除后者。作为另一个例子,具有确定的序列ID的总删除操作使具有较低序列ID的所有更新操作不相关的。
为了说明上面内容,考虑下面在特定的eID的示例性BDB-value:
{(op=replace,name=n1,value=v1,ts=t1),(op=replace,name=n2,value=v2,ts=t2),(op=add,name=n2,value=v3,ts=t3)}
其中op表示操作并且ts表示序列ID。假定对于这个例子t4>t3>t2>t1。在这个例子中的“这个瞬间”,被BDB-value暗指的属性是:
{(n1,v1),(n2,v2),(n2,v3)}
其中n2是多值的。现在考虑通过在相同的eID的下列示例性方案之一来更新:
第一方案:
(op=replace,name=n2,value=v4,ts=t4)
这使BDB-value包括:
{(op=replace,name=n1,value=v1,ts=t1),(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=n1,value=v5,ts=t4)
这使BDB-value包括:
{(op=replace,name=n1,value=v1,ts=t1),(op=add,name=n1,value=v5,ts=t4),(op=replace,name=n2,value=v2,ts=t2),(op=add,name=n2,value=v3,ts=t3)}
在这种方案中,没有更新需要被丢掉。两个属性,n1和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>"string1"AND@value<"string2"
可通过允许下面的转换来支持查询:
BDB-Key>Key(subsc riber identifier,bucket identifier,"some-name","string1")AND BDB-Key<Key(subscriberidentifier,bucket identifier,"some-name","string2")
实现函数Key( )的一些示例性方法在标题为eID存储器的部分下被讨论,并也被规定为应用在这里。
在一个实施方式中,查询索引234的BDB-value连同其序列IDs一起是一组更新操作(例如增加和/或替代),序列IDs使一个或更多eID的组与BDB-key中的{名称,值}对相关联。注意,eID存储器236的每个新更新都可以使一个或更多先前的更新变为不相关的。查询索引234需要接收新更新以及它替代的所有更新。
存储节点使用情况
下面描述根据一个实施方式的几个示例性可搜索的数据服务存储节点使用情况。前两个使用情况(处理更新请求和处理列表属性请求)描述外部事件的处理。其余使用情况描述内部事件的处理。
下面描述根据一个实施方式的更新请求的处理。当收到来自请求路由器202的更新请求时,如果eID更新管理器230确定更新不是针对它当前所维持的存储桶,则错误被返回。如果eID更新管理器230确定更新被请求路由器202使用将来大于T(例如5-10)秒的序列ID来标记,则请求路由器202返回错误。在一个实施方式中,如果有必要,eID更新管理器230也可以检查其NTP同步状态,并且发出警报。
在一个实施方式中,eID更新管理器230可以使用组通信222组件来“gcast”更新。越过网络的字节数可以被约计(对于更多的细节见组通信部分);一般,字节数可以是在更新消息中的字节数的N倍,其中N是为持久性所需要的复制的数量。gcast可以返回更新可以被写入用于持久性的节点组,或可以超时。
eID更新管理器230使用更新来执行eID存储器236的读取-修改-写入。这可以使一些更新被取代和新的更新被加入。如果eID更新管理器230发现更新不能被应用,因为它已经被取代,则消息迟到的指示被返回。eID更新管理器230在持久日志中记录新更新和被取代的更新。如果eID更新管理器230成功地gcast,更新eID存储器236,并且写到其日志,则它返回从gcast中获取的节点组。否则,错误可被返回。
下面描述根据一个实施方式的列表属性请求的处理。eID更新管理器230读取其本地eID存储器236以找到被请求指定的eID。如果eID被找到,则其属性被读取并且成功的响应被发送回。如果eID未被找到,则错误可被返回。
处理内部事件
如果eID存储器日志改变,则查询索引更新器可以读取新的增加项,并且更新查询索引234。反熵监控程序(daemon)读取新的增加项并对反熵更新其数据结构(例如Merkle树)。
下面描述根据一个实施方式由组通信222组件产生的应用消息调用的处理。如果eID更新管理器230确定更新不是针对它当前所维持的存储桶,则错误被返回。如果eID更新管理器230确定更新被请求路由器202使用将来大于T(例如5-10)秒的序列ID来标记,则消息被接受且如果有必要,eID更新管理器230检查其NTP同步状态,并且发出警报。
eID更新管理器230使用更新消息来执行eID存储236的读取-修改-写入。这可以使一些更新被取代和新的更新被加入。如果eID更新管理器230发现更新不能被应用,因为它已经被取代,则消息迟到的指示被返回。如果eID更新管理器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
antientropy(Group,Host,Cookie)-->Status
eID更新管理器230可以暴露但不限于下面本地分区管理器232的接口:
setpartitions(Subscriber,Bucket,AcceptPartitionList,DropPartitionList)
注意,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(eID)存储器236。注意,这些组件在下面的图中可以使用不同的数字来表示。
图12根据一个实施方式示出了可搜索的数据服务的不同的组件并进一步示出了组件之间的数据流,可搜索的数据服务可以组成查询子***或与查询子***相互作用,以执行来自于可搜索的数据服务的客户端的查询的服务。查询子***可以对照在包括相关的实体ID(eID)(属于特定的存储桶)的可搜索的数据服务中的所有存储节点370提供客户端提交的查询的有效执行,集合来自每个单独的存储节点370的结果,并且缓存满足每个给定查询的eID组。在一个实施方式中,为了执行查询的处理,查询子***包括但不限于下面的组件:
●查询节点***354可以对每个特定的查询进行路由选择决定。在一个实施方式中,重复的客户端查询可以被鼓励以通过查询***路由选择相同的路径,以便最大化查询高速缓冲存储器364的好处。
●查询TSAR(顶部搜索集合器)360可以将查询分配到给定存储桶的适合的存储节点370组,以及聚集结果和查询缓存。
●在每个存储节点370上的一个本地查询执行引擎376,负责在每个存储节点370上执行本地查询。
在一个实施方式中,查询TSAR360本质上被视为同等物。每个查询TSAR360可以回答任何客户端查询。这可以帮助简化单独节点的增加和移除。然而,因为查询结果可以被缓存在单独节点上的查询高速缓冲存储器364中,一个实施方式可能尽可能经常地试图通过相同的查询TSAR360节点来按规定路线发送对同一个存储域的完全一样的查询。为了帮助通过查询TSAR360按规定路线发送查询,请求路由器352可以访问查询节点***354服务,以获取对特定的存储桶的查询节点的列表。
除了上面提到的服务和组件之外,一个或更多其他组件或服务可以通过查询服务来访问。例如,存储节点***服务390可以被访问,以定位对给定存储桶的适合的存储节点370的组或列表。作为另一个例子,查询服务可以通过杠杆作用影响或参与总***节点状况服务(图6中的组成员资格和状况256),总***节点状况服务可以监控加入和离开***的不同节点,并且可以将状况信息传播到***中的其他节点。
查询节点***
为了查询缓存以提供有利的命中率,如果可能,一个实施方式可以试图确保相同的客户端查询由协调服务(请求路由器352)按规定路线发送到相同的查询TSAR360节点。在一个实施方式中,查询节点***354可封装逻辑以提供路由选择,其中一个查询节点***354可以在每个协调器节点350中被例示。在一个实施方式中,查询节点***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也可以在查询表达式中重新排序谓词,以标准化它们,以便语义相同的查询看起来是一样的。例如查询表达式:
[predicate1]AND[predicate2]AND[predicate3]
由与下列查询表达式相同的标准化查询表达式表示:
[predicate3]AND[predicate1]AND[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,对结果分类,并且将查询结果集390(连同分类属性一起)返回到查询TSAR360。在一个实施方式中,进入的查询390可以被解析器372在本地解析,并且在被本地查询执行引擎376对照eID存储器380执行之前被查询优化器374优化。在一个实施方式中,解析器372、查询优化器374和本地查询执行引擎376可以为本地查询处理器228的组件,如在图6中所示的。
查询语法和搜索表达式
在实施方式中,示例性查询消息可以包括一个或更多下列字段,但不限于这些字段:
●用户标识符:对特定客户端或可搜索的数据服务客户端的标识符;
●存储桶标识符:识别限定可在查询中被考虑的数据的限制的存储桶。
●节点ID-节点标识符。
●查询表达式-应用于该查询的搜索表达式。
●“更多的标志”:当满足查询表达式的eIDs的数量超过标记页数限制时,不透明的更多的标志对象可以被返回到客户端。该标志可与相同的查询一起被重新提交,以便取回下一个结果集(eID)。
●序列标志。
在实施方式中,查询服务可以支持通过服务的客户端对可搜索的数据服务的查询的一个或更多下列类型的操作,但不限于这些操作:
●布尔操作(例如:与、或、非等);
●算术操作(例如:<、>、<=、>=、<>、=、!=);
●字符串比较操作(例如:前缀、包含等);
●基于客户端指定的属性对实体的结果集分类。在一个实施方式中,可以允许仅对单个属性分类。其他实施方式可以允许对两个或更多属性分类;
●结果集的标记页数。
在一个实施方式中,可搜索的数据服务中的搜索表达式可以表示W3C推荐标准的XPath的子集。注意,其他实施方式可以对搜索表达式使用其他协议。在一个实施方式中,假定属性是(名称,值)对的列表,可使用XPath语法的相对小的子集,并且不允许在标记语言(如XML)文档中的多重级别。注意,其他实施方式可以允许标记语言文档中的多重级别。也要注意,其他实施方式可以使用XPath语法的相对较大的子集。因此,用在可搜索的数据服务的至少一些实施方式中的查询语法与XPath定义的谓词测试表达式有关。
在一些实施方式中,除了XPath查询语法以外,可允许搜索表达式的一个或更多非标准化形式,该搜索表达式为可根据一个或更多非标准化规则简化为规范的形式的具有隐含语法的表达式。对搜索表达式允许非标准化形式可为利用可搜索的数据服务的开发者在测试和实现上提供灵活性。
在实施方式中,搜索表达式影响对象的属性列表;也就是说,真值可以使用对象的属性中的一个或更多或全部来计算,如果为真,则对象可被选择。
下面是根据一个实施方式的搜索表达式的一些例子,并且没有被规定为限制性的。
[@name="xxxxxx"starts-with(@value="yyyyyy")]
该表达式指应用于属性列表的每个{名称,值}对的测试。方括号“[]”指定单独的元素测试。在该测试的应用之后,与该表达式匹配的{名称,值}对的小组被留下。该组被XPath称为“节点组”。如果得到对象的非空节点组,则其键将被选择。
[@name="prefix"@value="keyword"]AND[@name="glassy"starts-with(@value="tasty")]
在本实例中,两个节点组合并。如在XPath中指示的,当并且仅当节点组不是空组时,节点组才计算为真。在上面的例子中,两个节点组使用对象的属性列表被分开计算,并且其真值使用AND(与)来合并。
注意,[@value="foo"]不意味着与NOT[@value!="foo"]一样;当且仅当一些属性具有字符串值"foo"的值时,前者才为真;当且仅当所有的属性具有字符串值"foo"的值时,后者才为真。
下面是在一个实施方式中的搜索表达式中允许的示例性查询语法的摘要。注意,其他实施方式可以不包括该语法的至少一部分,和/或可以包括其他的语法。
query expression<-(predicate expression)?
predicate expression<-predicate|NOT predicate expression|predicate expression AND predicate expression|predicateexpression OR predicate expression|predicate expression sortexpression
sort expression <-′SORTBY[′attribute name′]′|′SORTBY[′attribute name′ASC]′|′SORTBY[′attribute name′DESC]′
predicate<-′[′attribute name′]′|′[′attribute name_value testexpression_′]′
attribute name<-′(@name=′attribute
在上面,attribute是***中给定的属性的字符串名称。
value test expression<-value test|NOT valuetestexpression|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”被表示在左边。
●表达式的第一部分必须是以“@name”形式的属性的名称,且后面可为属性值的零或更多布尔测试。
●操作符“>>=<<==!=”可以用作与右边的字符串的比较操作符。
●来自Xpath的字符串函数"starts-with"和"contains"可以用于字符串值属性。
●属性的所有@name部分被认为是字符串,@value部分也被认为是字符串。
●布尔操作符是与、或和非。这些可以用来在{名称,值}对上合并测试。
●使用在[]中的测试获得的属性组具有如被XPath(节点组的布尔函数)给定的真值,并因此可使用布尔操作符合并。
●可选的SORTBY表达式可以指定结果集应被分类的属性。SORTBY表达式可以包括ASC(升序)和DESC(降序)分类符,以指示分类顺序。ASC(升序)是默认的分类顺序。
下面是根据如上所述的示例性规范的搜索表达式语法的示例性搜索表达式:
[@name="lastName"starts-with(@value=“Adams”)]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"]AND[@name="prefix"NOT(@value="keyword")]
关于同一属性的测试的序列可以被视为应归入相同的谓词。
"price>5AND price<20AND available:′yes′″=>[@name="price"@value>"5"AND @value<"20"]AND[@name="available"@value="yes"]
分类顺序可以通过在查询字符串的末尾包括“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组可以被页尺寸(例如,100个实体)限制。如果有必要,“更多的标志”指示器可以被返回,以指示有可用来满足查询请求的更多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,公布Hi提供移动的分区列表。该列表可包括一个或更多或甚至所有的Hi的分区。
主机在Da<Dc的场合可以争取获得它们可接受而不超过Dth的来自列表的分区。
Hi可以接受一个或更多请求命令(bid),使得:
Dc<Di(新)<Dth
迁移开销低。
分区到达具有更多自由空间的磁盘。
一段时期后,如果Hi没有接收到使它在Dth之下的请求命令,则在Hi上分割分区(在一个实施方式中,最小的分区)并且再次提供分区的更新的列表。
在一个实施方式中,新的分区可以使用相同的或相似的机制被提供。可以使用默认的尺寸来代替新分区的真实(接近于零)初始尺寸。
在一个实施方式中,为了对较大的分区节省磁盘上的大的自由空间,上面的算法可以被修改,以便如果移动可以将磁盘放入舒适区内,则分区更可能移动到磁盘。在该实施方式中,在舒适区内的主机可以不争取获得分区。该修改可以帮助避免将较小的分区移动到有大量自由空间的磁盘上,因此为较大的分区节省自由空间。
其他实施方式可实现用于移动分区的一个或更多其他规则,该规则可以应用在磁盘空间应力管理算法的执行中。例如,一个实施方式可以实现可使具有分区的磁盘能够增加压缩(降低Dth和/或舒适区的宽度)的算法,该分区有很小的最近的增长。作为另一个例子,一个实施方式可以实现使分区能够移出磁盘的算法,该分区有显著的最近的增长,并且在低活动性时期期间接近Dth。
组通信
组通信222组件可以用来例如使可搜索的数据服务的其他组件能够维持索引信息的微弱地一致的被复制的数据库。组通信222可以将更新“传送”到一个或更多下面类型的被复制的数据集,但不限于这些数据集:
●在单独的存储/索引/查询子***中的可搜索的数据服务实体。
●存储桶分区信息和单独的存储主机复制组目录。
●对于查询子***主机和请求路由器202主机的组成员资格信息。
微弱的一致意味着被复制数据的读取可以不反映被应用在复制组中其它地方的大多数最近的写入所产生的改变。在没有进一步的改变时,所有的复制应该收敛为相同的值,尽管收敛可以例如被网络分区和/或***重启延迟。
在一个实施方式中,组通信可以依靠两种方法:闲聊和反熵。闲聊(或“流言散播(rumor mongering)”)是一种通过概率溢流(probabilisticflooding)的不可靠的多播。反熵是选择随机的对等主机并且寻找和解决在被选的主机上的对等数据库和其他主机上的对等数据库之间的任何不同的过程。在一个实施方式中,高级别和低级别的反熵可以被执行。
高级别的反熵可以比较闲聊更新的同级日志,以处理消息的概率溢流可能失去主机的情况。高级别反熵可以不参考下层数据库而被执行。低级别反熵比较数据库(可选地,在一个实施方式中,聚集数据库的统计数字,例如检查和),并且可以处理节点重启或否则丢失其消息日志的情况或节点正在加入复制组并且使用低级别反熵来幂等地得到数据库的拷贝的情况。
在一个实施方式中,组通信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的值,以察看消息是否被所有的组成员确认。
在一个实施方式中,gcast调用可以产生一个或更多下面的错误,但不限于这些错误:
●无效的组类型
●无效的组名
gsync(Cookie)
gsync返回指示是否闲聊消息到达所有没有失败的组成员的布尔值。Cookie是被成功的gcast调用返回的值。gsync调用的结果可以是指示是否所有的组成员都确认了消息的布尔值。在一个实施方式中,gsync调用可以产生但不限于无效的Cookie错误。
调回
apply(Group,Msg)
apply调回对被复制的数据集应用由给定的消息描述的改变。Group是指示组名的字符串。Msg是指示将要被应用的消息的值。
在一个实施方式中,apply调用的结果可以包括一个或更多下列项,但不限于这些项:
●OK:改变被成功地应用,尽管可能不是完全由于更多最近排序的改变。
●DUP:或“复制”。特定的改变以前已被接收。
●LATE:特定的改变被更多最近排序的改变废弃。
●错误:给出错误的原因的字符串。由于被错误指定的原因,改变不能被应用。作为结果,在一个实施方式中,低级别的反熵会话可以被请求,同等主机执行自我修理(见下面)。
antientropy(Group,Host)
antientropy调回用指定的同等主机为与命名组相关的数据发起反熵会话。Group是指示组的名称的字符串。Host是指示执行反熵的同等主机的名称的字符串。Antientropy可返回指示是否整个数据集被仔细研究的布尔值。如果假,则可优选地用不同的同等主机发起对相同组的另一反熵会话。在一个实施方式中,antientropy调回可以产生但不限于组无效或主机无效错误。
对等调用
对等调用对于可搜索的数据服务的实现可以是内在的。这些调用可以在指定组的成员之间或对这些成员进行。
rumor(Group,Originator,Seqno,OrigVtime,Msg)
rumor对等调用通过流言散播来在组中传播更新。Group是指示更新被传播的组的名称的字符串。Originator指示产生发端主机的名称的字符串。Seqno指示发起者对更新的序列号。OrigVtime指示发起者对更新的虚拟时间。Msg指示正在被传播的更新,这可通过应用调回而应用于远程数据库。Rumor调用的结果可为指示Rumor是否被成功地接收的布尔值。在一个实施方式中,Rumor调用可以产生但不限于组无效错误。
request_membership(Group,Mode,Generation,Seqno)
request_membership对等调用请求发送者在接收者的组成员资格检查中进行自愿的成员资格改变。Group是指示组的名称的字符串。Mode指示成员资格改变的类型;在一个实施方式中,这可以是“保证”,“发起”和“放弃”中的一个。Generation指示发送者的产生号,其可以被保证在重启后递增。Seqno指示发起者对操作的序列号,以便确认向量(见下面)可以用来指示所有的组成员何时看到操作。request_membership调用的结果可以是指示是否接收者产生被请求的组成员改变的布尔值。在一个实施方式中,request_membership调用可以产生但不限于组无效错误。
在一个实施方式中,被接收的request_membership调用可被接收者转发到一个或更多其他组成员。在一个实施方式中,接收者可以将其他组成员的列表返回到发送者,request_membership调用被转发到其它组成员。
failure(Group,Host,Generation)
failure对等调用宣布组成员被识别为失败了。Group是指示组的名称的字符串。Host识别失败的主机。Generation:指示在失败时失败的主机的产生。
fast_anti_entropy(Group,View,SummaryVec,AcknowledgementVec)
fast_anti_entropy对等调用发起快速或高级别阶段的反熵,以交换可能被流言散播错过的更新。这些操作的交换可以被任何必要的流言操作跟随,以使两个主机进入同步。Group是指示组的名称的字符串。View是表示组成员资格检查的对象。SummaryVec是表示概要向量的对象。AcknowledgementVec是表示确认向量的对象。fast_anti_entropy调用的结果可以是指示信息的成功处理的布尔值,后面是相互的调用和流言操作的交换,直到这两个主机交换所有可用的消息。在一个实施方式中,fast_anti_entropy调用可以产生但不限于组无效错误。
在一个实施方式中,被接收的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个查询被接纳,则磁盘I/O应力将像什么?”例如,这可以允许存储节点上的分区管理器232组件估计如果对配置进行一个或更多被提议的改变时负载可能像什么。
在一个实施方式中,心跳消息可以通过流行或闲聊协议传播到整个可搜索的数据服务***中或在可搜索的数据服务***中的节点组内的节点上的组件。在一个实施方式中,如上描述的,通信可以通过可搜索的数据服务的组通信222组件被执行。在一个实施方式中,组状况信息可以在节点之间和组件消息之间的其他可搜索的数据服务上背负式输送。
如果节点在超过特定的门限或时间段(例如5分钟)的时期内没有收到另一个节点的心跳消息,则节点可以假定其它节点失败了。如果在一个时段内节点没有收到来自任何其他节点的任何心跳,则节点可以假定其网络连接失败了。
在一个实施方式中,当节点接收了心跳消息时,节点可以检查内部表,以察看这是否是节点从发起节点看到的最近的心跳消息。如果不是,心跳消息被丢弃。如果是来自发起节点的最近的心跳消息,则内部表被更新,并且心跳消息可以接着被发送到一个或更多其他邻居节点。在一个实施方式中,这些邻居节点可以被随机选择。在一个实施方式中,以朝着较近的邻居节点的偏置来选择邻居节点,以便减少心跳在WAN链接上发送的次数。然而,在网络上将心跳消息成功地发送到远的节点(和接收心跳消息的远的节点)的概率应该足够高,以达到心跳最终到达可搜索的数据服务中的每个其他数据中心的期望的信任水平。
在一个实施方式中,转发心跳消息的邻居节点可以在每个被监控的组的基础上被选择。例如,如果节点A的组状况226组件正在监控组G1、G2和G3,其中在每个组中节点A是成员,以及也监控组G4、G5和G6,其中节点A不是成员,则节点A的心跳消息可以被发送到这6个组的每个中的N个主机。一个实施方式可以为有重叠的成员资格的组优化节点的选择,心跳消息被转发到该节点。例如,如果在组G2中的节点B被选择成接收来自节点A的心跳消息,并且节点B也是组G4和G6的成员,则节点B也可以被选择成为那些其他的组接收心跳消息。
如果节点在一个时段例如5分钟内没有看到来自被监控节点的状况更新,则该节点可以与不同的节点一起执行状况反熵,在一个实施方式中可根据随着离节点的距离而降低的概率来选择所述不同的节点。其他实施方式可以采用其它方法或度量或其组合来选择不同的节点,以不同的节点可以执行状况反熵。例如,在一个实施方式中,不同的节点可以根据随着有效的网络的和节点利用费用而降低的概率来选择。如果反熵没有为被监控的节点产生更新,则被监控的节点对在监控的节点上的本地组件可以被指定为死的或不可用的。
在一个实施方式中,一个或更多闲聊或流行协议可以用于状况信息的更新的微弱一致的多播。在一个实施方式中,组状况226组件可以不被认为是组通信222组件的合格的客户端,因为组通信222组件依赖于组成员资格和状况226组件。
组状况226组件可具有与组通信222组件的频繁的交互作用。在一个实施方式中,这两个组件可以在分离的过程中实现。在另一个实施方式中,这两个组件都可以在同一个过程中实现,以便这两个组件可以共享数据结构。
由于可能巨大的节点组,执行状况更新所需要的网络业务的量可能是衡量可搜索的数据服务的限制因素。因此,在一个实施方式中,在可搜索的数据服务中的节点组可以被组织为有层次的组,因此当限制任何单个节点组的尺寸时,允许处理大的数据组。
图17示出了根据一个实施方式用于监控可搜索的数据服务***中组状况的方法。可搜索的数据服务***可以被在多个节点上实现。这些节点可以位于一个数据中心内,或可分散在两个或更多数据中心中。数据中心在地理上可以是分散的。在一个实施方式中,可搜索的数据服务至少可以包括协调子***、查询子***和存储子***。在一个实施方式中,多个节点可以包括实现协调子***的一个或更多协调器节点、实现查询子***的一个或更多查询节点(也被称为查询TSAR节点)和实现存储子***的一个或更多存储节点。在一个实施方式中,Web服务平台可以向可搜索的数据服务提供Web服务接口,可搜索的数据服务向可搜索的数据服务的客户端应用程序提供一个或更多接口调用。
在一个实施方式中,多个节点可以自我组织成两个或更多节点组,每个节点组都包括多个节点的子集。在一个实施方式中,节点组可以包括每个都包括存储节点的子集的一个或更多存储节点组、每个都包括查询节点的子集的一个或更多查询节点组、以及每个都包括协调器节点的子集的一个或更多协调器节点组。在一个实施方式中,每个查询节点和每个协调器节点可以包括可搜索的数据服务的存储节点***组件的实例,存储节点***组件配置为定位适合的存储节点以接收服务请求,并且节点组可以包括一个或更多存储节点***组,其中每个存储节点***组都包括查询节点和协调器节点的子集。其他实施方式可以包括其他类型的节点组。
如在1300示出的,在节点组中的每个节点都可以收集对该节点的本地状况信息。如在1302示出的,节点组中的每个节点都可以将包括所收集的对节点的本地状况信息的消息周期性或不定期地发送到节点组中的至少一个其他节点。如在1304示出的,节点组中的每个节点都可周期性或不定期地接收发源于节点组内一个或更多其他节点的包括所收集的对其他节点的本地状况信息的消息。在一个实施方式中,节点的本地状况信息可以包括一个或更多下列项,但不限于这些项:对本地存储资源的一个或更多存储资源使用度量;对本地处理器资源的一个或更多处理器使用度量;和对网络通信资源的一个或更多网络使用度量。
在一个实施方式中,节点组中的节点可以配置为根据闲聊协议在节点组内传播消息。在一个实施方式中,节点组中的节点可以在其他可搜索的数据服务消息上将状况信息背负式输送到节点组中的其他节点。
在一个实施方式中,状况消息可以用作心跳消息,以检测是否在节点组内的另一节点变得离线。在该实施方式中,如在1306示出的,如果在指定的时间段内没有收到包括对其他节点的所收集的本地状况信息的新消息,则节点组中的一个节点可以确定节点组中的另一个节点变得离线。
在一个实施方式中,当检测到在指定的时间段内没有从节点组内的特定节点接收到包括对另一其他节点的所收集的本地状况信息的新消息时,该节点可以与节点组中的一个或更多其他节点一起执行反熵操作,以获得节点组中节点的被更新的状况信息。如果反熵操作没有产生对特定节点的更新的状况信息,则节点可以确定特定的节点变得离线。
在一个实施方式中,节点组中的节点可以比较此节点的收集的本地状况信息与在来自其他节点的消息中接收的节点组中的至少一个其他节点的本地状况信息。节点可以在对此节点决定本地节点状况中使用该比较。
组成员资格和状况接口
下面根据一个实施方式描述可以被可搜索的数据服务的组状况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,OrigVtime,StatVec)
heartbeat对等调用传递心跳的流言。Originator指示发起心跳的主机。OrigVtime指示心跳的虚拟时间。StatVec是包括关于一个或更多命名的度量的统计和对统计的值的数组的对象,其中第一个元素是标准化应力,而第二个元素是在应力中被估计的每个操作的改变。可包括统计的示例性度量可以包括一个或更多下列项,但不限于这些项:
●CPU:CPU负载平均或一个时间段(例如,一分钟)的运行队列深度。
●diskspace:磁盘空间利用百分比和使用(例如,以千兆字节为单位)。
●diskio:磁盘I/O操作。
●net:网络I/O操作。
●mempage:存储器页面调度
管理控制台
可搜索的数据服务的一个实施方式可以提供管理控制台,其可允许管理员监控可搜索的数据服务***的行为。图18根据一个实施方式示出了可搜索的数据服务***中的管理控制台的高级别体系结构。管理控制台400可以收集来自可搜索的数据服务***中的主机410的信息。在可搜索的数据服务***实现中,单个事件(例如,查询或增加)可以导致在***中的很多主机相互通信。假设可以监控、捕获、分析、总结和显示关于事件的信息的管理控制台400和在***中在事件后的行为(例如消息)的作为结果的级联在可搜索的数据服务***的不同阶段期间在***监控、最优化和故障诊断中可能是有价值的。
管理控制台400可以在可搜索的数据服务***的开发阶段被使用,例如以理解***行为、调试和检测可能需要优化的区域。在生产阶段期间,管理控制台400可以用来例如监控***的状况、识别问题,并且在它们变得严重之前预测和处理问题。
在图18所示的实施方式中,可搜索的数据服务的管理可在分布式体系结构中实现,分布式管理***的组件驻留在一个或更多主机上。远程管理402应用程序可以驻留在主机***上(管理控制台400)。可搜索的数据服务***中的一个或更多主机410每个都可以包括本地管理412模块,其监控和收集关于可搜索的数据服务活动、状况信息和在主机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可以实现或执行一个或更多下面的行动,但不限于这些行动(参考图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模块分离。
stopAllMon( )
stopAllMon停止所有组件414的监控,并且与所有当前连接的本地管理412模块分离。
enableComp(String componentName)
enableComp开始监控所有被componentName识别的被连接的主机组件414。
enableAllComp()
enableAllComp能够在静态输入文件中找到的所有组件414上监控。
disableComp(String componentName)
disableComp停止监控被componentName识别的所有被连接的主机组件414。
disableAllComp( )
disableAllComp停止监控所有组件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( )。
monBeginAll( )
monBeginAll读取包括组件414和组件端口的列表的静态输入文件,连接到文件中列出的组件414,并且为每个组件414调用monEnable( )。
monStop(String componentName)
monStop停止监控命名的组件414。
monStopAll( )
monStopAll停止监控活动的所有当前的组件414。
本地组件
本地组件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中示出的eID存储器236、查询索引存储器234、查询日志210、成员资格映射218和消息日志224。注意,在一个实施方式中,虽然图12将存储器724显示为在主机722的外部,可搜索的数据服务存储器724的至少一部分可以位于主机722内的存储器上。在不同的实施方式中,可搜索的数据服务存储器724可以被存储在主机722内、数据中心710内、远程地位于网络700的其他地方的任何类型的持久存储装置或存储***中或上面的一些组合。注意,存储节点360逻辑上至少包括本地eID存储器236和查询索引存储器234,连同被例示在可搜索的数据服务主机722上的组件。类似地,协调器节点340和查询TSAR节点350在逻辑上包括存储在可搜索的数据服务存储器724中的至少一些数据。
客户端***730可以通过任何有线或无线网络连接机制连接到网络700。客户端***730可以通过如上所述的Web服务接口访问可搜索的数据服务720,以建立和更新存储在数据存储器740中的数据的可搜索的索引,和/或查询可搜索的索引以获得存储在数据存储器740中实体的***。客户端***730和存储数据存储器740的存储设备可以位于网络700上的任何地方。Web服务接口可以由在连接到网络700的一个或更多服务器***上例示的Web服务平台来提供(例如,见图6的Web服务平台),Web服务平台可以或可以不驻留在包括其他可搜索的数据服务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进一步包括连接到I/O接口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中的至少一部分上。
在一个实施方式中,I/O接口930可以配置为协调处理器910、***存储器920和装置内任何***装置之间的I/O业务,包括网络接口940或其他***接口。在一些实施方式中,I/O接口930可以执行任何必要的协议、计时或其他数据转换,以将来自一个组件(例如***存储器920)的数据信号转换成适合于由另一个组件(例如处理器910)使用的格式。在一些实施方式中,I/O接口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/O接口930连接到计算机***900的磁盘或DVD/CD。计算机可访问的存储介质也可以包括任何易失性或非易失性介质,例如RAM(例如SDRAM、DDR SDRAM、RDRAM、SRAM等)、ROM等,其可包括在计算机***900的一些实施方式中作为***存储器920或另一种类型的存储器。进一步地,计算机可访问的存储介质可以包括发送介质或信号,例如通过通信介质如网络和/或无线链接来发送的电、电磁或数字信号,所述网络和/或无线链接例如可以通过网络接口940来实现。
结论
不同的实施方式可以进一步包括接收、发送或存储根据对计算机可访问的存储介质的前述描述来实现的指令和/或数据。一般而言,计算机可访问的存储介质可以包括存储介质或存储器介质,例如磁或光介质,例如磁盘或DVD/CD-ROM、易失性或非易失性介质,例如RAM(例如SDRAM、DDR、RDRAM、SRAM等)、ROM等。以及发送介质或信号,例如用光通信介质如网络和/或无线链接来发送的电、电磁或数字信号。
在图中示出和在这里描述的各种方法表示了方法的示例性实施方式。这些方法可以在软件、硬件或其组合中实现。方法的顺序可以改变,并且不同的元素可以被增加、重新排序、合并、省略、修改等。
可进行具有本公开的益处的各种修改和变化,如对本领域的技术人员显而易见的。意图是本发明包括所有这样的修改和改变,因此,上面的描述在例证的而不是限制的意义上考虑。
Claims (130)
1、一种***,包括:
Web服务平台,其配置为向可搜索的数据服务提供Web服务接口,其中所述Web服务平台配置为根据所述Web服务接口从客户端应用程序接收服务请求,并且其中所述服务请求包括查询请求和存储请求;以及
多个节点,其配置为参与所述可搜索的数据服务,以:
在被所述客户端应用程序使用的数据存储器的可搜索的索引中存储在接收到的存储请求中指定的可搜索的数据服务对象,其中每个可搜索的数据服务对象都指定在所述数据存储器中的特定实体的两个或更多属性,并且其中所述属性包括用于在所述数据存储器中定位所述特定实体的唯一的实体标识符;
定位来自所述可搜索的索引中的满足接收到的查询请求的一个或更多可搜索的数据服务对象的组;
根据所述Web服务接口至少将所述实体标识符从满足所述查询请求的一个或更多可搜索的数据服务对象的所述组返回到所述客户端应用程序。
2、如权利要求1所述的***,其中每个属性被表示为{名称,值}对。
3、如权利要求1所述的***,其中所述多个节点包括配置为持久地存储所述可搜索的索引的一个或更多存储节点。
4、如权利要求1所述的***,其中所述多个节点包括一个或更多查询节点,每个查询节点都配置为维持对先前查询请求的响应的本地查询高速缓冲存储器。
5、如权利要求1所述的***,其中所述多个节点包括:
一个或更多存储节点,其配置为持久地存储所述可搜索的索引;
一个或更多查询节点,其配置为维持对先前查询请求的响应的本地查询高速缓冲存储器;以及
一个或更多协调器节点,每个都配置为:
从所述Web服务平台接收服务请求;
将每个存储请求转发到适当的一个或更多所述存储节点;以及
将每个查询请求转发到适当的一个或更多所述查询节点。
6、如权利要求5所述的***,其中所述一个或更多存储节点中的每个都配置为:
从协调器节点接收存储请求;以及
将在所述存储请求中指定的可搜索的数据服务对象增加到所述可搜索的索引。
7、如权利要求5所述的***,其中所述一个或更多存储节点中的每个都配置为:
从协调器节点接收存储请求;以及
修改存储在所述可搜索的索引中的可搜索的数据服务对象,如在所述存储请求中指定的。
8、如权利要求5所述的***,其中所述一个或更多存储节点中的每个都配置为:
从协调器节点接收存储请求;以及
从所述可搜索的索引中删除可搜索的数据服务对象的至少一个部分,如在所述存储请求中指定的。
9、如权利要求5所述的***,其中每个所述查询节点都配置为:
从协调器节点接收查询请求;
访问在所述查询节点上的所述本地查询高速缓冲存储器以确定是否所述查询请求可从所述本地查询高速缓冲存储器中被满足;
如果所述查询请求可从所述本地查询高速缓冲存储器中被满足,则根据所述Web服务接口至少将来自所述本地查询高速缓冲存储器的所述实体标识符从满足所述查询请求的一组一个或更多可搜索的数据服务对象返回到所述客户端应用程序;
如果所述查询请求不能从所述本地查询高速缓冲存储器中被满足,则将所述查询请求转发到适当的一个或更多所述查询节点。
10、如权利要求9所述的***,其中所述一个或更多存储节点的每个都配置为:
从查询节点接收查询请求;
搜索被所述存储节点持久地存储的所述可搜索的索引的分区,以定位在可搜索的索引中的满足所述查询请求的一组一个或更多可搜索的数据服务对象;以及
根据所述Web服务接口至少将所述实体标识符从满足所述查询请求的一个或更多可搜索的数据服务对象的所述组返回到所述客户端应用程序。
11、如权利要求5所述的***,其中每个查询节点都配置为:
从协调器节点接收查询请求;
所述查询请求转发到两个或更多所述存储节点,每个所述存储节点都持久地存储所述可搜索的索引的不同分区,其中所述不同分区在所述查询请求的范围之内;
从所述查询请求被转发到的所述两个或更多所述存储节点的每个接收来自所述可搜索的索引的满足所述查询请求的可搜索的数据服务对象的不同组;
合并可搜索的数据服务对象的所述不同组;以及
根据所述Web服务接口至少将所述实体标识符从可搜索的数据服务对象的所合并的组返回到所述客户端应用程序。
12、如权利要求5所述的***,其中每个所述查询节点都配置为:
从协调器节点接收查询请求;
将所述查询请求转发到一个或更多所述存储节点;
从所述查询请求被转发到的所述一个或更多存储节点中的至少一个接收来自所述可搜索的索引的满足所述查询请求的可搜索的数据服务对象;
根据在所述查询请求中的分类具体要求对接收到的可搜索的数据服务对象分类;以及
根据所述Web服务接口并按分类的顺序至少将所述实体标识符从被分类的可搜索的数据服务对象返回到所述客户端应用程序。
13、如权利要求1所述的***,其中所述多个节点包括两个或更多存储节点,每个存储节点都配置为:
持久地存储所述可搜索的索引的分区;
重新划分所述分区以在所述存储节点上产生两个或更多新分区,其中所述两个或更多新分区中的每个都包括存储在所述可搜索的索引中的所述可搜索的数据服务对象的不同子集;
与其他所述存储节点通信,以定位自愿接收所述两个或更多新分区中的一个新分区的另一个存储节点;以及
与所述另一个存储节点合作,以将所述两个或更多新分区中的一个移动到所述另一个存储节点。
14、如权利要求1所述的***,其中所述多个节点包括两个或更多存储节点,每个存储节点都配置为:
持久地存储所述可搜索的索引的分区;
与一个或更多其他所述存储节点通信,以定位自愿接收所述分区的复制的另一个存储节点;以及
与所述另一个存储节点合作,以将所述分区复制到所述另一个存储节点。
15、如权利要求1所述的***,其中所述多个节点包括两个或更多存储节点,每个存储节点都配置为:
持久地存储所述可搜索的索引的分区;
根据反熵协议将所述分区复制到另一个存储节点;以及
根据闲聊协议把对被复制的分区的随后的存储请求传送到所述另一个存储节点,以在所述另一个存储节点上更新所述分区的复制。
16、如权利要求1所述的***,其中为了对所述可搜索的数据服务的客户端应用程序执行所述可搜索的数据服务的操作,所述Web服务接口暴露多个服务请求,其中所述服务请求包括:
增加请求,其将指定的可搜索的数据服务对象增加到指定的可搜索的索引;
替换请求,其替换在指定的可搜索的索引中的指定的可搜索的数据服务对象的指定部分或全部;
删除请求,其从指定的可搜索的索引中删除指定的可搜索的数据服务对象的至少一个部分;
列表属性请求,其返回在指定的可搜索的索引中的一个或更多指定的可搜索的数据服务对象的属性的列表;以及
查询请求,其返回在指定的可搜索的索引中的与在所述查询请求中指定的查询表达式匹配的可搜索的数据服务对象的一组实体标识符。
17、如权利要求1所述的***,其中为了给所述可搜索的数据服务的客户端应用程序的开发者执行所述可搜索的数据服务的操作,所述Web服务接口暴露多个服务请求,其中暴露的多个服务请求配置为用于为客户端应用程序实现数据存储器的搜索前端。
18、如权利要求1所述的***,其中每个查询请求包括:
存储桶标识符,其识别在所述可搜索的数据服务中的特定的可搜索的索引,其中,存储桶定义对所述可搜索的数据服务的查询请求的范围;以及
查询表达式,其指定将应用于被所述存储桶标识符识别的所述可搜索的索引的指定属性的一个或更多搜索标准,以定位满足所述查询表达式的可搜索的数据服务对象。
19、如权利要求18所述的***,其中每个查询请求进一步包括唯一地识别所述可搜索的数据服务的特定用户的用户标识符,其中每个用户标识符都与所述可搜索的数据服务中的一个或更多存储桶标识符相关联,并且其中每个存储桶标识符都与一个用户确切地关联。
20、如权利要求18所述的***,其中查询表达式包括:
在所述可搜索的索引中的可搜索的数据服务对象的一个或更多属性;以及
一个或更多操作符,其将应用于所述查询表达式中的一个或更多属性,以定位在所述可搜索的索引中满足所述查询表达式的一组可搜索的数据服务对象。
21、如权利要求20所述的***,其中所述操作符包括一个或更多布尔操作符。
22、如权利要求20所述的***,其中所述操作符包括一个或更多算术操作符。
23、如权利要求20所述的***,其中所述操作符包括一个或更多字符串比较操作符。
24、如权利要求1所述的***,其中所述多个节点进一步配置为:
对来自满足所述查询请求的一个或更多可搜索的数据服务对象的所述组的所述实体标识符的列表标页数,以产生满足所述查询请求的实体标识符的两页或更多页;以及
在两个或更多响应消息中将实体标识符的所述两页或更多页返回到所述客户端应用程序,其中每个响应消息包括实体标识符的一页。
25、如权利要求1所述的***,其中所述多个节点分布在两个或更多数据中心当中。
26、如权利要求25所述的***,其中所述数据中心在地理上是分散的。
27、如权利要求25所述的***,其中每个数据中心都包括所述多个节点中的:
一个或更多存储节点,其配置为持久地存储所述可搜索的索引的至少一部分;
一个或更多查询节点,每个都配置为维持对先前查询请求的响应的本地查询高速缓冲存储器;
至少一个协调器节点,其配置为:
从所述Web服务平台接收服务请求;
将每个存储请求转发到在所述数据中心内的适当的一个或更多所述存储节点;以及
将每个查询请求转发到在所述数据中心内的适当的一个或更多所述查询节点。
28、如权利要求1所述的***,其中所述多个节点包括多个存储节点,其中所述多个存储节点分布在两个或更多数据中心当中,其中每个数据中心都包括所述多个存储节点中的两个或更多;
其中在数据中心内的至少两个所述存储节点持久性地存储所述可搜索的索引的分区的复制;以及
其中在至少一个其他数据中心内的至少两个其他存储节点持久性地存储所述可搜索的索引的所述分区的复制。
29、如权利要求1所述的***,其中所述多个节点中的每一个都配置为根据闲聊协议将可搜索的数据服务信息传播到所述多个节点中的其他节点。
30、如权利要求29所述的***,其中所传播的可搜索的数据服务信息包括对复制到所述多个节点中的两个或更多节点的所述可搜索的索引的分区的更新信息。
31、如权利要求29所述的***,其中所传播的可搜索的数据服务信息包括所述多个节点中的每个节点的本地状况和状态信息。
32、如权利要求29所述的***,其中所述多个节点配置为组织成节点组,每个节点组都包括所述多个节点的子集,且其中每个节点组配置为根据闲聊协议在所述组中传播可搜索的数据服务信息。
33、如权利要求1所述的***,其中所述Web服务平台进一步包括对所述可搜索的数据服务执行测量、计帐、认证和用户的访问控制的一个或更多服务,其中用户是与一个或更多客户端应用程序相关联的实体,每个客户端应用程序都配置为通过所述Web服务接口访问所述可搜索的数据服务,作为对由所述客户端应用程序使用的一个或更多数据存储器的搜索前端。
34、如权利要求1所述的***,其中所述Web服务平台进一步配置为根据对所述可搜索的数据服务的所述Web服务接口从多个客户端应用程序接收服务请求。
35、如权利要求1所述的***,其中所述多个节点进一步配置为存储多个可搜索的索引,每个可搜索的索引都配置为存储由多个客户端应用程序中的一个或更多所使用的分离和不同的数据存储器的可搜索的数据服务对象。
36、如权利要求1所述的***,其中所述多个节点中的至少两个配置成参与在不同种类的装置上实现的所述可搜索的数据服务。
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服务接口上从多个客户端应用程序接收查询请求。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US75477705P | 2005-12-29 | 2005-12-29 | |
US60/754,777 | 2005-12-29 | ||
US11/392,482 | 2006-03-29 | ||
US11/392,482 US7801912B2 (en) | 2005-12-29 | 2006-03-29 | Method and apparatus for a searchable data service |
PCT/US2006/061435 WO2007079303A2 (en) | 2005-12-29 | 2006-11-30 | Method and apparatus for a distributed file storage and indexing service |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101395602A true CN101395602A (zh) | 2009-03-25 |
CN101395602B CN101395602B (zh) | 2011-10-05 |
Family
ID=40494862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006800535217A Active CN101395602B (zh) | 2005-12-29 | 2006-11-30 | 用于分布式文件存储和索引服务的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (9) | US8554758B1 (zh) |
CN (1) | CN101395602B (zh) |
Cited By (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101980207A (zh) * | 2010-11-09 | 2011-02-23 | 中国电信股份有限公司 | 一种数据库访问的实现方法和*** |
WO2011072610A1 (zh) * | 2009-12-16 | 2011-06-23 | 华为技术有限公司 | 一种内容发布与获取的方法、装置和*** |
CN102316134A (zh) * | 2010-07-05 | 2012-01-11 | 杭州华三通信技术有限公司 | Fc名称服务信息的本地查询方法及装置 |
CN101557421B (zh) * | 2009-05-19 | 2012-02-01 | 北大方正集团有限公司 | 一种网络文件分发方法及其*** |
CN103049354A (zh) * | 2012-12-21 | 2013-04-17 | 华为技术有限公司 | 数据修复方法、数据修复装置以及存储*** |
CN103069421A (zh) * | 2010-08-23 | 2013-04-24 | 诺基亚公司 | 用于处理针对分区式索引的搜索请求的方法和装置 |
CN103109292A (zh) * | 2010-09-24 | 2013-05-15 | 日立数据***有限公司 | 在容错数据库管理***中聚集查询结果的***和方法 |
CN103140850A (zh) * | 2010-08-09 | 2013-06-05 | 移动解决方案公司 | 移动设备上的数据共享 |
CN103827866A (zh) * | 2011-10-21 | 2014-05-28 | 高通股份有限公司 | 用于通信网络的网络连接式媒体网关 |
CN104067216A (zh) * | 2011-06-27 | 2014-09-24 | 亚马逊科技公司 | 用于实施可扩展数据存储服务的***和方法 |
CN104662530A (zh) * | 2012-10-30 | 2015-05-27 | 英特尔公司 | 对于分布式数据存储和处理***的调整(tune) |
CN104936199A (zh) * | 2014-03-20 | 2015-09-23 | 中兴通讯股份有限公司 | 一种资源通告管理的方法及公共业务实体 |
CN105706047A (zh) * | 2013-11-11 | 2016-06-22 | 亚马逊科技公司 | 基于分区的数据流处理框架 |
CN106095863A (zh) * | 2016-06-03 | 2016-11-09 | 众安在线财产保险股份有限公司 | 一种多维度数据查询和存储***和方法 |
CN106133719A (zh) * | 2014-03-31 | 2016-11-16 | 瓦欧尼斯***有限公司 | 企业索引的授权部分 |
CN106164897A (zh) * | 2013-12-02 | 2016-11-23 | 丘贝斯有限责任公司 | 用于寄存内存数据库的***及方法 |
CN106407410A (zh) * | 2009-10-26 | 2017-02-15 | 亚马逊技术股份有限公司 | 供应并管理已复制数据 |
CN106484565A (zh) * | 2016-09-22 | 2017-03-08 | 华为数字技术(成都)有限公司 | 多数据中心间的数据同步方法及相关设备 |
CN106547860A (zh) * | 2016-10-21 | 2017-03-29 | 长安通信科技有限责任公司 | 一种分布式数据库性能故障的定位方法 |
CN106713226A (zh) * | 2015-11-12 | 2017-05-24 | 卓望数码技术(深圳)有限公司 | 一种用于分布式***的远程过程调用处理方法和*** |
CN106997395A (zh) * | 2017-04-13 | 2017-08-01 | 南京大学 | 一种移动感知复杂事件并行处理方法及*** |
CN107103055A (zh) * | 2017-03-29 | 2017-08-29 | 东北大学 | 面向内存更新密集型程序的Hourglass和Piggyback算法 |
CN108121511A (zh) * | 2017-12-21 | 2018-06-05 | 北京黑螺技术有限公司 | 一种分布式边缘存储***中的数据处理方法、装置及设备 |
CN105706047B (zh) * | 2013-11-11 | 2018-08-31 | 亚马逊科技公司 | 基于分区的数据流处理框架 |
CN109074451A (zh) * | 2016-01-29 | 2018-12-21 | 华睿泰科技有限责任公司 | 在分布式环境中保护内部服务 |
CN109101363A (zh) * | 2017-06-21 | 2018-12-28 | 中兴通讯股份有限公司 | 基于Android***的异常恢复方法、装置、智能设备及存储介质 |
CN109299190A (zh) * | 2018-09-10 | 2019-02-01 | 华为技术有限公司 | 分布式存储***中处理对象的元数据的方法及装置 |
CN109328335A (zh) * | 2016-06-22 | 2019-02-12 | 亚马逊科技公司 | 智能配置发现技术 |
CN109947460A (zh) * | 2017-12-21 | 2019-06-28 | 鼎捷软件股份有限公司 | 程序连结方法及程序连结*** |
CN110083739A (zh) * | 2013-03-15 | 2019-08-02 | 构造数据有限责任公司 | 用于使用距离关联性散列法对媒体数据库定址的***和方法 |
CN110502371A (zh) * | 2019-08-23 | 2019-11-26 | 北京浪潮数据技术有限公司 | Cfs存储域恢复方法、装置、设备及可读存储介质 |
CN111213138A (zh) * | 2017-08-15 | 2020-05-29 | 诺宝公司 | 分布式数据库中的索引拆分 |
CN111861763A (zh) * | 2020-07-28 | 2020-10-30 | 贵州力创科技发展有限公司 | 一种基于大数据管理的车辆保险反欺诈***及方法 |
CN111934958A (zh) * | 2020-07-29 | 2020-11-13 | 深圳市高德信通信股份有限公司 | 一种idc资源调度服务管理平台 |
CN111966877A (zh) * | 2020-06-29 | 2020-11-20 | 北京百度网讯科技有限公司 | 前端服务方法、装置、设备及存储介质 |
CN112434118A (zh) * | 2020-11-11 | 2021-03-02 | 中南民族大学 | Shadow索引及创建方法、***、查询方法及*** |
CN113609124A (zh) * | 2021-06-18 | 2021-11-05 | 天津津航计算技术研究所 | 一种具有可扩展性的数据记录存储方法及*** |
US11200220B2 (en) | 2016-03-01 | 2021-12-14 | Advanced New Technologies Co., Ltd. | Efficient storage of user personal attributes for service provisioning |
CN116431677A (zh) * | 2023-06-15 | 2023-07-14 | 南方电网数字电网研究院有限公司 | 基于内存数据库的数据路由方法、***和可读存储介质 |
US11943104B2 (en) | 2016-06-22 | 2024-03-26 | Amazon Technologies, Inc. | Application migration system |
Families Citing this family (283)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8554758B1 (en) | 2005-12-29 | 2013-10-08 | Amazon Technologies, Inc. | Method and apparatus for monitoring and maintaining health in a searchable data service |
KR101266267B1 (ko) | 2006-10-05 | 2013-05-23 | 스플렁크 인코퍼레이티드 | 시계열 검색 엔진 |
US20100281165A1 (en) * | 2006-11-14 | 2010-11-04 | Christoph Gerdes | Method for the load distribution in a peer-to-peer-overlay network |
US8930331B2 (en) | 2007-02-21 | 2015-01-06 | Palantir Technologies | Providing unique views of data based on changes or rules |
US20080228828A1 (en) * | 2007-03-16 | 2008-09-18 | Microsoft Corporation | Management of collections within a data storage system |
US8028090B2 (en) | 2008-11-17 | 2011-09-27 | Amazon Technologies, Inc. | Request routing utilizing client location information |
US7991910B2 (en) | 2008-11-17 | 2011-08-02 | Amazon Technologies, Inc. | Updating routing information based on client location |
WO2009029889A1 (en) * | 2007-08-31 | 2009-03-05 | Clear Channel Management Services, L.P. | Radio receiver and method for receiving and playing signals from multiple broadcast channels |
US20090150556A1 (en) * | 2007-12-06 | 2009-06-11 | Kim Moon J | Memory to storage communication for hybrid systems |
US9268841B2 (en) * | 2008-02-29 | 2016-02-23 | Red Hat, Inc. | Searching data based on entities related to the data |
US7970820B1 (en) | 2008-03-31 | 2011-06-28 | Amazon Technologies, Inc. | Locality based content distribution |
US8601090B1 (en) | 2008-03-31 | 2013-12-03 | Amazon Technologies, Inc. | Network resource identification |
US8321568B2 (en) | 2008-03-31 | 2012-11-27 | Amazon Technologies, Inc. | Content management |
US8447831B1 (en) | 2008-03-31 | 2013-05-21 | Amazon Technologies, Inc. | Incentive driven content delivery |
US8606996B2 (en) | 2008-03-31 | 2013-12-10 | Amazon Technologies, Inc. | Cache optimization |
US7962597B2 (en) | 2008-03-31 | 2011-06-14 | Amazon Technologies, Inc. | Request routing based on class |
US8392482B1 (en) * | 2008-03-31 | 2013-03-05 | Amazon Technologies, Inc. | Versioning of database partition maps |
US9407681B1 (en) | 2010-09-28 | 2016-08-02 | Amazon Technologies, Inc. | Latency measurement in resource requests |
US9348499B2 (en) | 2008-09-15 | 2016-05-24 | Palantir Technologies, Inc. | Sharing objects that rely on local resources with outside servers |
US9996572B2 (en) * | 2008-10-24 | 2018-06-12 | Microsoft Technology Licensing, Llc | Partition management in a partitioned, scalable, and available structured storage |
SE533007C2 (sv) | 2008-10-24 | 2010-06-08 | Ilt Productions Ab | Distribuerad datalagring |
US8073940B1 (en) | 2008-11-17 | 2011-12-06 | Amazon Technologies, Inc. | Managing content delivery network service providers |
US8122098B1 (en) | 2008-11-17 | 2012-02-21 | Amazon Technologies, Inc. | Managing content delivery network service providers by a content broker |
US8688837B1 (en) | 2009-03-27 | 2014-04-01 | Amazon Technologies, Inc. | Dynamically translating resource identifiers for request routing using popularity information |
US8412823B1 (en) | 2009-03-27 | 2013-04-02 | Amazon Technologies, Inc. | Managing tracking information entries in resource cache components |
US8756341B1 (en) | 2009-03-27 | 2014-06-17 | Amazon Technologies, Inc. | Request routing utilizing popularity information |
US8769055B2 (en) * | 2009-04-24 | 2014-07-01 | Microsoft Corporation | Distributed backup and versioning |
US8935366B2 (en) * | 2009-04-24 | 2015-01-13 | Microsoft Corporation | Hybrid distributed and cloud backup architecture |
US8560639B2 (en) * | 2009-04-24 | 2013-10-15 | Microsoft Corporation | Dynamic placement of replica data |
US8769049B2 (en) * | 2009-04-24 | 2014-07-01 | Microsoft Corporation | Intelligent tiers of backup data |
US20100306236A1 (en) * | 2009-05-29 | 2010-12-02 | Sun Microsystems, Inc. | Data Policy Management System and Method for Managing Data |
US8782236B1 (en) | 2009-06-16 | 2014-07-15 | Amazon Technologies, Inc. | Managing resources using resource expiration data |
CN102667761B (zh) * | 2009-06-19 | 2015-05-27 | 布雷克公司 | 可扩展的集群数据库 |
US8458287B2 (en) * | 2009-07-31 | 2013-06-04 | Microsoft Corporation | Erasure coded storage aggregation in data centers |
US8397073B1 (en) | 2009-09-04 | 2013-03-12 | Amazon Technologies, Inc. | Managing secure content in a content delivery network |
NZ599047A (en) * | 2009-09-26 | 2013-02-22 | Sajari Pty Ltd | Document analysis and association system and method |
US8433771B1 (en) | 2009-10-02 | 2013-04-30 | Amazon Technologies, Inc. | Distribution network with forward resource propagation |
US8346722B2 (en) * | 2009-11-23 | 2013-01-01 | Sap Ag | Replica placement strategy for distributed data persistence |
US9495338B1 (en) | 2010-01-28 | 2016-11-15 | Amazon Technologies, Inc. | Content distribution network |
US10534624B2 (en) | 2010-02-26 | 2020-01-14 | Red Hat, Inc. | Generating and storing translation information as package metadata |
US9152484B2 (en) | 2010-02-26 | 2015-10-06 | Red Hat, Inc. | Generating predictive diagnostics via package update manager |
US9009112B2 (en) * | 2010-03-15 | 2015-04-14 | Microsoft Technology Licensing, Llc | Reorganization of data under continuous workload |
US8990216B2 (en) * | 2010-03-19 | 2015-03-24 | Microsoft Corporation | Scalable index build techniques for column stores |
US8874526B2 (en) | 2010-03-31 | 2014-10-28 | Cloudera, Inc. | Dynamically processing an event using an extensible data model |
US9317572B2 (en) * | 2010-03-31 | 2016-04-19 | Cloudera, Inc. | Configuring a system to collect and aggregate datasets |
US9082127B2 (en) | 2010-03-31 | 2015-07-14 | Cloudera, Inc. | Collecting and aggregating datasets for analysis |
US9081888B2 (en) | 2010-03-31 | 2015-07-14 | Cloudera, Inc. | Collecting and aggregating log data with fault tolerance |
US8225131B2 (en) | 2010-06-17 | 2012-07-17 | Microsoft Corporation | Monitoring service endpoints |
CN103069396A (zh) * | 2010-08-19 | 2013-04-24 | 日本电气株式会社 | 对象布置设备及其方法,计算机程序 |
US8768981B1 (en) * | 2010-08-27 | 2014-07-01 | Disney Enterprises, Inc. | System and method for distributing and accessing files in a distributed storage system |
US8290919B1 (en) * | 2010-08-27 | 2012-10-16 | Disney Enterprises, Inc. | System and method for distributing and accessing files in a distributed storage system |
US8392368B1 (en) | 2010-08-27 | 2013-03-05 | Disney Enterprises, Inc. | System and method for distributing and accessing files in a distributed storage system |
US9712484B1 (en) | 2010-09-28 | 2017-07-18 | Amazon Technologies, Inc. | Managing request routing information utilizing client identifiers |
US10958501B1 (en) | 2010-09-28 | 2021-03-23 | Amazon Technologies, Inc. | Request routing information based on client IP groupings |
US10097398B1 (en) | 2010-09-28 | 2018-10-09 | Amazon Technologies, Inc. | Point of presence management in request routing |
US9003035B1 (en) | 2010-09-28 | 2015-04-07 | Amazon Technologies, Inc. | Point of presence management in request routing |
US8468247B1 (en) | 2010-09-28 | 2013-06-18 | Amazon Technologies, Inc. | Point of presence management in request routing |
US9400799B2 (en) * | 2010-10-04 | 2016-07-26 | Dell Products L.P. | Data block migration |
US8452874B2 (en) | 2010-11-22 | 2013-05-28 | Amazon Technologies, Inc. | Request routing processing |
EP2646928A4 (en) * | 2010-12-03 | 2016-11-09 | Hewlett Packard Entpr Dev Lp | SYSTEMS AND METHODS FOR PERFORMING INPUT JOIN OPERATION |
US8755283B2 (en) | 2010-12-17 | 2014-06-17 | Microsoft Corporation | Synchronizing state among load balancer components |
US8612550B2 (en) | 2011-02-07 | 2013-12-17 | Microsoft Corporation | Proxy-based cache content distribution and affinity |
US8538926B2 (en) * | 2011-03-08 | 2013-09-17 | Rackspace Us, Inc. | Massively scalable object storage system for storing object replicas |
US8880592B2 (en) | 2011-03-31 | 2014-11-04 | Cloudera, Inc. | User interface implementation for partial display update |
US10467042B1 (en) | 2011-04-27 | 2019-11-05 | Amazon Technologies, Inc. | Optimized deployment based upon customer locality |
US8396969B1 (en) * | 2011-05-17 | 2013-03-12 | Google Inc. | Domain name buckets in a hosted storage system |
US20120303912A1 (en) * | 2011-05-23 | 2012-11-29 | Microsoft Corporation | Storage account migration between storage stamps |
US9092482B2 (en) | 2013-03-14 | 2015-07-28 | Palantir Technologies, Inc. | Fair scheduling for mixed-query loads |
US8799240B2 (en) * | 2011-06-23 | 2014-08-05 | Palantir Technologies, Inc. | System and method for investigating large amounts of data |
US8375012B1 (en) * | 2011-08-10 | 2013-02-12 | Hewlett-Packard Development Company, L.P. | Computer indexes with multiple representations |
US8504542B2 (en) | 2011-09-02 | 2013-08-06 | Palantir Technologies, Inc. | Multi-row transactions |
US8738624B1 (en) | 2011-09-27 | 2014-05-27 | Amazon Technologies, Inc. | Increasing distributed database capacity |
US8953453B1 (en) | 2011-12-15 | 2015-02-10 | Amazon Technologies, Inc. | System and method for throttling service requests using work-based tokens |
US8914497B1 (en) | 2011-12-15 | 2014-12-16 | Amazon Technologies, Inc. | System and method for throttling service requests having non-uniform workloads |
US8880565B2 (en) | 2011-12-23 | 2014-11-04 | Sap Se | Table creation for partitioned tables |
US9128949B2 (en) | 2012-01-18 | 2015-09-08 | Cloudera, Inc. | Memory allocation buffer for reduction of heap fragmentation |
US9172608B2 (en) | 2012-02-07 | 2015-10-27 | Cloudera, Inc. | Centralized configuration and monitoring of a distributed computing cluster |
US9405692B2 (en) | 2012-03-21 | 2016-08-02 | Cloudera, Inc. | Data processing performance enhancement in a distributed file system |
US10623408B1 (en) | 2012-04-02 | 2020-04-14 | Amazon Technologies, Inc. | Context sensitive object management |
US9338008B1 (en) | 2012-04-02 | 2016-05-10 | Cloudera, Inc. | System and method for secure release of secret information over a network |
US9628438B2 (en) * | 2012-04-06 | 2017-04-18 | Exablox | Consistent ring namespaces facilitating data storage and organization in network infrastructures |
US9842126B2 (en) | 2012-04-20 | 2017-12-12 | Cloudera, Inc. | Automatic repair of corrupt HBases |
WO2013162607A1 (en) * | 2012-04-27 | 2013-10-31 | Empire Technology Development Llc | Multiple variable coverage memory for database indexing |
JP5844895B2 (ja) | 2012-05-24 | 2016-01-20 | 株式会社日立製作所 | データの分散検索システム、データの分散検索方法及び管理計算機 |
US9154551B1 (en) | 2012-06-11 | 2015-10-06 | Amazon Technologies, Inc. | Processing DNS queries to identify pre-processing information |
US8805990B2 (en) | 2012-07-12 | 2014-08-12 | Microsoft Corporation | Load balancing for single-address tenants |
US9753954B2 (en) | 2012-09-14 | 2017-09-05 | Cloudera, Inc. | Data node fencing in a distributed file system |
US9323577B2 (en) | 2012-09-20 | 2016-04-26 | Amazon Technologies, Inc. | Automated profiling of resource usage |
US9165406B1 (en) | 2012-09-21 | 2015-10-20 | A9.Com, Inc. | Providing overlays based on text in a live camera view |
US9047326B2 (en) | 2012-10-12 | 2015-06-02 | A9.Com, Inc. | Index configuration for searchable data in network |
US9507750B2 (en) * | 2012-10-12 | 2016-11-29 | A9.Com, Inc. | Dynamic search partitioning |
US9246998B2 (en) | 2012-10-16 | 2016-01-26 | Microsoft Technology Licensing, Llc | Load balancer bypass |
US8495221B1 (en) * | 2012-10-17 | 2013-07-23 | Limelight Networks, Inc. | Targeted and dynamic content-object storage based on inter-network performance metrics |
US10205698B1 (en) | 2012-12-19 | 2019-02-12 | Amazon Technologies, Inc. | Source-dependent address resolution |
US9087055B2 (en) * | 2013-01-28 | 2015-07-21 | International Business Machines Corporation | Segmenting documents within a full text index |
US9563648B2 (en) | 2013-02-25 | 2017-02-07 | EMC IP Holding Company LLC | Data analytics platform over parallel databases and distributed file systems |
US9984083B1 (en) | 2013-02-25 | 2018-05-29 | EMC IP Holding Company LLC | Pluggable storage system for parallel query engines across non-native file systems |
US9128962B2 (en) | 2013-03-11 | 2015-09-08 | Sap Se | View based table replacement for applications |
US9146771B2 (en) * | 2013-03-12 | 2015-09-29 | International Business Machines Corporation | Responding to a timeout of a message in a parallel computer |
US11086898B2 (en) * | 2013-03-13 | 2021-08-10 | Amazon Technologies, Inc. | Token-based admission control for replicated writes |
US9342557B2 (en) | 2013-03-13 | 2016-05-17 | Cloudera, Inc. | Low latency query engine for Apache Hadoop |
US9600365B2 (en) | 2013-04-16 | 2017-03-21 | Microsoft Technology Licensing, Llc | Local erasure codes for data storage |
US9552382B2 (en) | 2013-04-23 | 2017-01-24 | Exablox Corporation | Reference counter integrity checking |
US10318541B2 (en) | 2013-04-30 | 2019-06-11 | Splunk Inc. | Correlating log data with performance measurements having a specified relationship to a threshold value |
US10225136B2 (en) | 2013-04-30 | 2019-03-05 | Splunk Inc. | Processing of log data and performance data obtained via an application programming interface (API) |
US10353957B2 (en) | 2013-04-30 | 2019-07-16 | Splunk Inc. | Processing of performance data and raw log data from an information technology environment |
US10614132B2 (en) | 2013-04-30 | 2020-04-07 | Splunk Inc. | GUI-triggered processing of performance data and log data from an information technology environment |
US10997191B2 (en) | 2013-04-30 | 2021-05-04 | Splunk Inc. | Query-triggered processing of performance data and log data from an information technology environment |
US10019496B2 (en) | 2013-04-30 | 2018-07-10 | Splunk Inc. | Processing of performance data and log data from an information technology environment by using diverse data stores |
US9069375B2 (en) * | 2013-04-30 | 2015-06-30 | MobileDataForce, Inc. | Method and system for platform-independent application development |
US10346357B2 (en) | 2013-04-30 | 2019-07-09 | Splunk Inc. | Processing of performance data and structure data from an information technology environment |
MX2013005303A (es) * | 2013-05-10 | 2013-08-07 | Fondo De Informacion Y Documentacion Para La Ind Infotec | Un sistema y un proceso de alto desempeño para el tratamiento y almacenamiento de datos, basado en componentes de bajo costo, que garantiza la integridad y disponibilidad de los datos para su propia administracion. |
US11841844B2 (en) * | 2013-05-20 | 2023-12-12 | Amazon Technologies, Inc. | Index update pipeline |
US9489443B1 (en) * | 2013-05-24 | 2016-11-08 | Amazon Technologies, Inc. | Scheduling of splits and moves of database partitions |
US9294391B1 (en) | 2013-06-04 | 2016-03-22 | Amazon Technologies, Inc. | Managing network computing components utilizing request routing |
JP2016526717A (ja) | 2013-06-12 | 2016-09-05 | エグザブロックス・コーポレーション | ハイブリッドガベージコレクション |
US9715521B2 (en) | 2013-06-19 | 2017-07-25 | Storagecraft Technology Corporation | Data scrubbing in cluster-based storage systems |
US9934242B2 (en) | 2013-07-10 | 2018-04-03 | Exablox Corporation | Replication of data between mirrored data sites |
US9569513B1 (en) * | 2013-09-10 | 2017-02-14 | Amazon Technologies, Inc. | Conditional master election in distributed databases |
US10025673B1 (en) * | 2013-09-20 | 2018-07-17 | Amazon Technologies, Inc. | Restoring partitioned database tables from backup |
US9613082B2 (en) | 2013-09-30 | 2017-04-04 | International Business Machines Corporation | Database auditing for bulk operations |
US9477731B2 (en) | 2013-10-01 | 2016-10-25 | Cloudera, Inc. | Background format optimization for enhanced SQL-like queries in Hadoop |
US10248556B2 (en) | 2013-10-16 | 2019-04-02 | Exablox Corporation | Forward-only paged data storage management where virtual cursor moves in only one direction from header of a session to data field of the session |
US9934382B2 (en) | 2013-10-28 | 2018-04-03 | Cloudera, Inc. | Virtual machine image encryption |
US9690671B2 (en) | 2013-11-01 | 2017-06-27 | Cloudera, Inc. | Manifest-based snapshots in distributed computing environments |
EP3061011B1 (en) | 2013-11-19 | 2022-09-28 | Huawei Technologies Co., Ltd. | Method for optimizing index, master database node and subscriber database node |
US10331695B1 (en) * | 2013-11-25 | 2019-06-25 | Amazon Technologies, Inc. | Replication coordination service for data transfers between distributed databases |
US9985829B2 (en) | 2013-12-12 | 2018-05-29 | Exablox Corporation | Management and provisioning of cloud connected devices |
US9774582B2 (en) | 2014-02-03 | 2017-09-26 | Exablox Corporation | Private cloud connected device cluster architecture |
JP2017504924A (ja) | 2014-02-04 | 2017-02-09 | エグザブロックス・コーポレーション | ファイルシステムのコンテンツベースの編成 |
US10216768B1 (en) | 2014-02-17 | 2019-02-26 | Amazon Technologies, Inc. | Table and index communications channels |
US9372912B2 (en) * | 2014-03-07 | 2016-06-21 | Zef Oy | Method, server, database and computer program for enriching comparison data of a decision making application |
US10095872B2 (en) * | 2014-06-05 | 2018-10-09 | International Business Machines Corporation | Accessing data based on a dispersed storage network rebuilding issue |
US9720946B2 (en) * | 2014-06-19 | 2017-08-01 | Microsoft Technology Licensing, Llc | Efficient storage of related sparse data in a search index |
US9477743B2 (en) * | 2014-07-02 | 2016-10-25 | Oracle International Corporation | System and method for load balancing in a distributed system by dynamic migration |
US9747333B2 (en) | 2014-10-08 | 2017-08-29 | Cloudera, Inc. | Querying operating system state on multiple machines declaratively |
WO2016100545A1 (en) * | 2014-12-16 | 2016-06-23 | Noderprime, Inc. | Computer servers for datacenter managment |
US10097448B1 (en) | 2014-12-18 | 2018-10-09 | Amazon Technologies, Inc. | Routing mode and point-of-presence selection service |
US10033627B1 (en) | 2014-12-18 | 2018-07-24 | Amazon Technologies, Inc. | Routing mode and point-of-presence selection service |
US10091096B1 (en) | 2014-12-18 | 2018-10-02 | Amazon Technologies, Inc. | Routing mode and point-of-presence selection service |
US10305985B1 (en) * | 2014-12-29 | 2019-05-28 | EMC IP Holding Company LLC | Defining new properties using expressions in API calls |
US10459913B2 (en) | 2015-02-26 | 2019-10-29 | Red Hat, Inc. | Database query processing |
US10225326B1 (en) | 2015-03-23 | 2019-03-05 | Amazon Technologies, Inc. | Point of presence based data uploading |
US9819567B1 (en) | 2015-03-30 | 2017-11-14 | Amazon Technologies, Inc. | Traffic surge management for points of presence |
US9665299B2 (en) | 2015-03-31 | 2017-05-30 | International Business Machines Corporation | Implicit coordination for deployment of computing systems using a data sharing service |
US9772920B2 (en) * | 2015-04-29 | 2017-09-26 | Apollo Education Group, Inc. | Dynamic service fault detection and recovery using peer services |
US9860317B1 (en) | 2015-04-30 | 2018-01-02 | Amazon Technologies, Inc. | Throughput throttling for distributed file storage services with varying connection characteristics |
US9832141B1 (en) | 2015-05-13 | 2017-11-28 | Amazon Technologies, Inc. | Routing based request correlation |
US10042782B2 (en) * | 2015-06-02 | 2018-08-07 | ALTR Solutions, Inc. | Immutable datastore for low-latency reading and writing of large data sets |
CN106250381B (zh) * | 2015-06-04 | 2020-11-17 | 微软技术许可有限责任公司 | 用于确定表格式存储的列布局的***和方法 |
US10268449B1 (en) * | 2015-06-25 | 2019-04-23 | EMC IP Holding Company LLC | Natural order in API calls |
US9971526B1 (en) * | 2015-06-29 | 2018-05-15 | Amazon Technologies, Inc. | Volume-based key-value store |
US9977805B1 (en) | 2017-02-13 | 2018-05-22 | Sas Institute Inc. | Distributed data set indexing |
US10097566B1 (en) | 2015-07-31 | 2018-10-09 | Amazon Technologies, Inc. | Identifying targets of network attacks |
US10977276B2 (en) * | 2015-07-31 | 2021-04-13 | International Business Machines Corporation | Balanced partition placement in distributed databases |
US20170060924A1 (en) | 2015-08-26 | 2017-03-02 | Exablox Corporation | B-Tree Based Data Model for File Systems |
US10528627B1 (en) * | 2015-09-11 | 2020-01-07 | Amazon Technologies, Inc. | Universal search service for multi-region and multi-service cloud computing resources |
US9774619B1 (en) | 2015-09-24 | 2017-09-26 | Amazon Technologies, Inc. | Mitigating network attacks |
CN105260136B (zh) * | 2015-09-24 | 2019-04-05 | 北京百度网讯科技有限公司 | 数据读写方法及分布式存储*** |
US10331747B1 (en) * | 2015-09-30 | 2019-06-25 | Open Text Corporation | Method and system for creating and using persona in a content management system |
US9910697B2 (en) | 2015-10-13 | 2018-03-06 | Palantir Technologies Inc. | Fault-tolerant and highly-available configuration of distributed services |
US10810228B2 (en) * | 2015-11-02 | 2020-10-20 | Servicenow, Inc. | Universal automatic data update detection and publication |
US10270878B1 (en) | 2015-11-10 | 2019-04-23 | Amazon Technologies, Inc. | Routing for origin-facing points of presence |
US11100073B2 (en) * | 2015-11-12 | 2021-08-24 | Verizon Media Inc. | Method and system for data assignment in a distributed system |
US10257307B1 (en) | 2015-12-11 | 2019-04-09 | Amazon Technologies, Inc. | Reserved cache space in content delivery networks |
US10049051B1 (en) | 2015-12-11 | 2018-08-14 | Amazon Technologies, Inc. | Reserved cache space in content delivery networks |
US10348639B2 (en) | 2015-12-18 | 2019-07-09 | Amazon Technologies, Inc. | Use of virtual endpoints to improve data transmission rates |
JP6747018B2 (ja) * | 2016-03-31 | 2020-08-26 | 日本電気株式会社 | 記憶システム、記憶システム制御装置、記憶システム制御方法及びプログラム |
US9948704B2 (en) | 2016-04-07 | 2018-04-17 | International Business Machines Corporation | Determining a best fit coordinator node in a database as a service infrastructure |
US10552427B2 (en) | 2016-04-29 | 2020-02-04 | Nutanix, Inc. | Searching for information relating to virtualization environments |
US9846553B2 (en) | 2016-05-04 | 2017-12-19 | Exablox Corporation | Organization and management of key-value stores |
CN107346315B (zh) * | 2016-05-06 | 2020-10-27 | 曲立东 | 对象数据关联索引***及该***的构建与应用方法 |
US10075551B1 (en) | 2016-06-06 | 2018-09-11 | Amazon Technologies, Inc. | Request management for hierarchical cache |
US10110694B1 (en) | 2016-06-29 | 2018-10-23 | Amazon Technologies, Inc. | Adaptive transfer rate for retrieving content from a server |
US11567972B1 (en) * | 2016-06-30 | 2023-01-31 | Amazon Technologies, Inc. | Tree-based format for data storage |
US9992086B1 (en) | 2016-08-23 | 2018-06-05 | Amazon Technologies, Inc. | External health checking of virtual private cloud network environments |
US10579434B2 (en) | 2016-08-24 | 2020-03-03 | Improbable Worlds Ltd | Simulation systems and methods using query-based interest |
US10033691B1 (en) | 2016-08-24 | 2018-07-24 | Amazon Technologies, Inc. | Adaptive resolution of domain name requests in virtual private cloud network environments |
US10289767B2 (en) | 2016-08-24 | 2019-05-14 | Improbable Worlds Ltd | Communications interface facilitating operations of a persistent spatially-optimized computer-based simulation |
US11416528B2 (en) | 2016-09-26 | 2022-08-16 | Splunk Inc. | Query acceleration data store |
US11604795B2 (en) | 2016-09-26 | 2023-03-14 | Splunk Inc. | Distributing partial results from an external data system between worker nodes |
US11567993B1 (en) | 2016-09-26 | 2023-01-31 | Splunk Inc. | Copying buckets from a remote shared storage system to memory associated with a search node for query execution |
US11586627B2 (en) | 2016-09-26 | 2023-02-21 | Splunk Inc. | Partitioning and reducing records at ingest of a worker node |
US12013895B2 (en) | 2016-09-26 | 2024-06-18 | Splunk Inc. | Processing data using containerized nodes in a containerized scalable environment |
US11442935B2 (en) | 2016-09-26 | 2022-09-13 | Splunk Inc. | Determining a record generation estimate of a processing task |
US11580107B2 (en) | 2016-09-26 | 2023-02-14 | Splunk Inc. | Bucket data distribution for exporting data to worker nodes |
US11860940B1 (en) | 2016-09-26 | 2024-01-02 | Splunk Inc. | Identifying buckets for query execution using a catalog of buckets |
US11550847B1 (en) | 2016-09-26 | 2023-01-10 | Splunk Inc. | Hashing bucket identifiers to identify search nodes for efficient query execution |
US11615104B2 (en) | 2016-09-26 | 2023-03-28 | Splunk Inc. | Subquery generation based on a data ingest estimate of an external data system |
US10956415B2 (en) | 2016-09-26 | 2021-03-23 | Splunk Inc. | Generating a subquery for an external data system using a configuration file |
US11620336B1 (en) | 2016-09-26 | 2023-04-04 | Splunk Inc. | Managing and storing buckets to a remote shared storage system based on a collective bucket size |
US11562023B1 (en) | 2016-09-26 | 2023-01-24 | Splunk Inc. | Merging buckets in a data intake and query system |
US11874691B1 (en) * | 2016-09-26 | 2024-01-16 | Splunk Inc. | Managing efficient query execution including mapping of buckets to search nodes |
US11593377B2 (en) | 2016-09-26 | 2023-02-28 | Splunk Inc. | Assigning processing tasks in a data intake and query system |
US11599541B2 (en) | 2016-09-26 | 2023-03-07 | Splunk Inc. | Determining records generated by a processing task of a query |
US10353965B2 (en) | 2016-09-26 | 2019-07-16 | Splunk Inc. | Data fabric service system architecture |
US11663227B2 (en) | 2016-09-26 | 2023-05-30 | Splunk Inc. | Generating a subquery for a distinct data intake and query system |
US20180089324A1 (en) | 2016-09-26 | 2018-03-29 | Splunk Inc. | Dynamic resource allocation for real-time search |
US10469513B2 (en) | 2016-10-05 | 2019-11-05 | Amazon Technologies, Inc. | Encrypted network addresses |
US9998551B1 (en) | 2016-10-24 | 2018-06-12 | Palantir Technologies Inc. | Automatic discovery and registration of service application for files introduced to a user interface |
US10042620B1 (en) | 2016-11-03 | 2018-08-07 | Palantir Technologies Inc. | Approaches for amalgamating disparate software tools |
US11188551B2 (en) * | 2016-11-04 | 2021-11-30 | Microsoft Technology Licensing, Llc | Multi-level data pagination |
CN106557562A (zh) * | 2016-11-14 | 2017-04-05 | 天津南大通用数据技术股份有限公司 | 一种单机数据库数据的查询方法及装置 |
EP3336691B1 (en) | 2016-12-13 | 2022-04-06 | ARM Limited | Replicate elements instruction |
EP3336692B1 (en) | 2016-12-13 | 2020-04-29 | Arm Ltd | Replicate partition instruction |
US10001982B1 (en) | 2016-12-16 | 2018-06-19 | Palantir Technologies, Inc. | Imposing a common build system for services from disparate sources |
US10831549B1 (en) | 2016-12-27 | 2020-11-10 | Amazon Technologies, Inc. | Multi-region request-driven code execution system |
US10372499B1 (en) | 2016-12-27 | 2019-08-06 | Amazon Technologies, Inc. | Efficient region selection system for executing request-driven code |
US10938884B1 (en) | 2017-01-30 | 2021-03-02 | Amazon Technologies, Inc. | Origin server cloaking using virtual private cloud network environments |
US11232000B1 (en) | 2017-02-24 | 2022-01-25 | Amazon Technologies, Inc. | Moving database partitions from replica nodes |
US11620565B1 (en) * | 2017-02-24 | 2023-04-04 | Iqvia Inc. | System and method for enhanced distribution of data to compute nodes |
US10341168B2 (en) * | 2017-04-18 | 2019-07-02 | Sap Se | Topology manager for failure detection in a distributed computing system |
US10503613B1 (en) | 2017-04-21 | 2019-12-10 | Amazon Technologies, Inc. | Efficient serving of resources during server unavailability |
US10552389B2 (en) * | 2017-04-28 | 2020-02-04 | Oath Inc. | Object and sequence number management |
US10579607B2 (en) * | 2017-04-28 | 2020-03-03 | Splunk Inc. | Single point of dispatch for hybrid cloud deployment for indexer clusters |
US11573947B2 (en) * | 2017-05-08 | 2023-02-07 | Sap Se | Adaptive query routing in a replicated database environment |
US10263845B2 (en) | 2017-05-16 | 2019-04-16 | Palantir Technologies Inc. | Systems and methods for continuous configuration deployment |
US11075987B1 (en) | 2017-06-12 | 2021-07-27 | Amazon Technologies, Inc. | Load estimating content delivery network |
US10447648B2 (en) | 2017-06-19 | 2019-10-15 | Amazon Technologies, Inc. | Assignment of a POP to a DNS resolver based on volume of communications over a link between client devices and the POP |
US10353699B1 (en) | 2017-06-26 | 2019-07-16 | Palantir Technologies Inc. | Systems and methods for managing states of deployment |
US11086943B2 (en) | 2017-07-17 | 2021-08-10 | Ebay Inc. | Bucket based distributed search system |
US11921672B2 (en) | 2017-07-31 | 2024-03-05 | Splunk Inc. | Query execution at a remote heterogeneous data store of a data fabric service |
US11989194B2 (en) | 2017-07-31 | 2024-05-21 | Splunk Inc. | Addressing memory limits for partition tracking among worker nodes |
US10701161B2 (en) * | 2017-08-28 | 2020-06-30 | Citrix Systems, Inc. | Wrapping continuation tokens to support paging for multiple servers across different geolocations |
US11195107B1 (en) * | 2017-09-13 | 2021-12-07 | Hrl Laboratories, Llc | Method of malicious social activity prediction using spatial-temporal social network data |
US10528600B1 (en) * | 2017-09-13 | 2020-01-07 | Hrl Laboratories, Llc | System to identify unknown communication behavior relationships from time series |
US10742593B1 (en) | 2017-09-25 | 2020-08-11 | Amazon Technologies, Inc. | Hybrid content request routing system |
US10896182B2 (en) | 2017-09-25 | 2021-01-19 | Splunk Inc. | Multi-partitioning determination for combination operations |
CN107844366B (zh) * | 2017-09-30 | 2021-02-05 | 广州供电局有限公司 | 电网应用服务调用方法、装置、存储介质和计算机设备 |
US10579265B2 (en) * | 2017-10-18 | 2020-03-03 | Adobe Inc. | Cloud-synchronized local storage management |
US11323315B1 (en) * | 2017-11-29 | 2022-05-03 | Amazon Technologies, Inc. | Automated host management service |
US11120001B2 (en) * | 2017-11-30 | 2021-09-14 | International Business Machines Corporation | Table discovery in distributed and dynamic computing systems |
US11475000B2 (en) | 2017-11-30 | 2022-10-18 | International Business Machines Corporation | Aggregation in dynamic and distributed computing systems |
US11126608B2 (en) * | 2018-01-31 | 2021-09-21 | Salesforce.Com, Inc. | Techniques and architectures for partition mapping in a multi-node computing environment |
US20190243910A1 (en) * | 2018-02-05 | 2019-08-08 | Microsoft Technology Licensing, Llc | Visual Search as a Service |
US11023472B2 (en) | 2018-02-27 | 2021-06-01 | Nutanix, Inc. | System and method for troubleshooting in a virtual computing system |
US10592578B1 (en) | 2018-03-07 | 2020-03-17 | Amazon Technologies, Inc. | Predictive content push-enabled content delivery network |
US10990249B2 (en) * | 2018-03-12 | 2021-04-27 | Royal Bank Of Canada | Method for anomaly detection in clustered data structures |
US11048665B2 (en) * | 2018-03-26 | 2021-06-29 | International Business Machines Corporation | Data replication in a distributed file system |
JP7191493B2 (ja) | 2018-03-27 | 2022-12-19 | ネットフリックス・インコーポレイテッド | スケジュール設定されたアンチエントロピー修復の設計のための技法 |
US11334543B1 (en) | 2018-04-30 | 2022-05-17 | Splunk Inc. | Scalable bucket merging for a data intake and query system |
US10817197B2 (en) | 2018-05-04 | 2020-10-27 | Microsoft Technology Licensing, Llc | Data partitioning in a distributed storage system |
US11120046B2 (en) | 2018-05-04 | 2021-09-14 | Microsoft Technology Licensing Llc | Data replication in a distributed storage system |
US11120052B1 (en) | 2018-06-28 | 2021-09-14 | Amazon Technologies, Inc. | Dynamic distributed data clustering using multi-level hash trees |
US10884644B2 (en) | 2018-06-28 | 2021-01-05 | Amazon Technologies, Inc. | Dynamic distributed data clustering |
US10997177B1 (en) * | 2018-07-27 | 2021-05-04 | Workday, Inc. | Distributed real-time partitioned MapReduce for a data fabric |
US11797572B1 (en) * | 2018-08-07 | 2023-10-24 | Amazon Technologies, Inc. | Systems, methods, and apparatus for hotspot detection |
WO2020058708A1 (en) * | 2018-09-18 | 2020-03-26 | Improbable Worlds Ltd. | Simulation systems and methods using query-based interest |
US10862852B1 (en) | 2018-11-16 | 2020-12-08 | Amazon Technologies, Inc. | Resolution of domain name requests in heterogeneous network environments |
US11025747B1 (en) | 2018-12-12 | 2021-06-01 | Amazon Technologies, Inc. | Content request pattern-based routing system |
US11809382B2 (en) | 2019-04-01 | 2023-11-07 | Nutanix, Inc. | System and method for supporting versioned objects |
US11226905B2 (en) | 2019-04-01 | 2022-01-18 | Nutanix, Inc. | System and method for mapping objects to regions |
WO2020220216A1 (en) | 2019-04-29 | 2020-11-05 | Splunk Inc. | Search time estimate in data intake and query system |
US11715051B1 (en) | 2019-04-30 | 2023-08-01 | Splunk Inc. | Service provider instance recommendations using machine-learned classifications and reconciliation |
US11106698B2 (en) * | 2019-06-11 | 2021-08-31 | Sap Se | Multi-master with ownership transfer |
CN110555056B (zh) * | 2019-07-23 | 2021-12-07 | 北京控制工程研究所 | 一种基于双环形缓冲的时标指令序列管理方法 |
US11095361B2 (en) * | 2019-08-23 | 2021-08-17 | Elliot Eichen | Dynamic geographical spectrum sharing |
US11727057B2 (en) * | 2019-09-04 | 2023-08-15 | Samsung Electronics Co., Ltd. | Network key value indexing design |
US11494380B2 (en) | 2019-10-18 | 2022-11-08 | Splunk Inc. | Management of distributed computing framework components in a data fabric service system |
US11726679B2 (en) * | 2019-11-05 | 2023-08-15 | Western Digital Technologies, Inc. | Applying endurance groups to zoned namespaces |
CN111104425A (zh) * | 2019-11-13 | 2020-05-05 | 腾讯科技(深圳)有限公司 | 数据处理方法及装置 |
US11704334B2 (en) | 2019-12-06 | 2023-07-18 | Nutanix, Inc. | System and method for hyperconvergence at the datacenter |
CN110913025B (zh) * | 2019-12-31 | 2022-06-24 | ***股份有限公司 | 服务调用方法、装置、设备及介质 |
US11922222B1 (en) | 2020-01-30 | 2024-03-05 | Splunk Inc. | Generating a modified component for a data intake and query system using an isolated execution environment image |
CN111339061B (zh) * | 2020-02-12 | 2023-09-26 | 杭州涂鸦信息技术有限公司 | 一种分布式数据库的数据迁移方法及*** |
US11609777B2 (en) | 2020-02-19 | 2023-03-21 | Nutanix, Inc. | System and method for multi-cluster storage |
US10860609B1 (en) | 2020-03-25 | 2020-12-08 | Snowflake Inc. | Distributed stop operator for query processing |
US20210303633A1 (en) * | 2020-03-30 | 2021-09-30 | International Business Machines Corporation | Shard hashing |
US11436229B2 (en) * | 2020-04-28 | 2022-09-06 | Nutanix, Inc. | System and method of updating temporary bucket based on object attribute relationships or metadata relationships |
US11487787B2 (en) | 2020-05-29 | 2022-11-01 | Nutanix, Inc. | System and method for near-synchronous replication for object store |
US12001872B2 (en) | 2020-10-14 | 2024-06-04 | Nutanix, Inc. | Object tiering from local store to cloud store |
US11704313B1 (en) | 2020-10-19 | 2023-07-18 | Splunk Inc. | Parallel branch operation using intermediary nodes |
US11762884B2 (en) * | 2020-10-26 | 2023-09-19 | Salesforce, Inc. | Shared key prefix values across objects |
US11405227B2 (en) * | 2020-10-28 | 2022-08-02 | International Business Machines Corporation | Smart query buffering mechanism |
US11900164B2 (en) | 2020-11-24 | 2024-02-13 | Nutanix, Inc. | Intelligent query planning for metric gateway |
CN112434037A (zh) * | 2020-11-24 | 2021-03-02 | 京东方科技集团股份有限公司 | 数据处理方法、处理装置、数据处理设备和存储介质 |
US11822370B2 (en) | 2020-11-26 | 2023-11-21 | Nutanix, Inc. | Concurrent multiprotocol access to an object storage system |
US11516033B1 (en) | 2021-05-31 | 2022-11-29 | Nutanix, Inc. | System and method for metering consumption |
US11899572B2 (en) | 2021-09-09 | 2024-02-13 | Nutanix, Inc. | Systems and methods for transparent swap-space virtualization |
CN114153790A (zh) * | 2022-02-10 | 2022-03-08 | 四川创智联恒科技有限公司 | 一种降低日志文件空间占用的方法、存储介质及终端 |
US11940972B2 (en) | 2022-05-27 | 2024-03-26 | Sap Se | Execution of operations on partitioned tables |
US11995104B2 (en) * | 2022-05-27 | 2024-05-28 | Sap Se | Linear interval-based dynamic range partitioning |
CN114925075B (zh) * | 2022-07-20 | 2022-11-15 | 广州市城市规划勘测设计研究院 | 一种多源时空监测信息实时动态融合方法 |
Family Cites Families (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5423037A (en) * | 1992-03-17 | 1995-06-06 | Teleserve Transaction Technology As | Continuously available database server having multiple groups of nodes, each group maintaining a database copy with fragments stored on multiple nodes |
US5685003A (en) * | 1992-12-23 | 1997-11-04 | Microsoft Corporation | Method and system for automatically indexing data in a document using a fresh index table |
CA2167790A1 (en) * | 1995-01-23 | 1996-07-24 | Donald S. Maier | Relational database system and method with high data availability during table data restructuring |
US5815649A (en) * | 1995-10-20 | 1998-09-29 | Stratus Computer, Inc. | Distributed fault tolerant digital data storage subsystem for fault tolerant computer system |
US5765171A (en) * | 1995-12-29 | 1998-06-09 | Lucent Technologies Inc. | Maintaining consistency of database replicas |
US5787413A (en) * | 1996-07-29 | 1998-07-28 | International Business Machines Corporation | C++ classes for a digital library |
US6886035B2 (en) * | 1996-08-02 | 2005-04-26 | Hewlett-Packard Development Company, L.P. | Dynamic load balancing of a network of client and server computer |
US6026474A (en) * | 1996-11-22 | 2000-02-15 | Mangosoft Corporation | Shared client-side web caching using globally addressable memory |
US5963944A (en) | 1996-12-30 | 1999-10-05 | Intel Corporation | System and method for distributing and indexing computerized documents using independent agents |
US6167438A (en) | 1997-05-22 | 2000-12-26 | Trustees Of Boston University | Method and system for distributed caching, prefetching and replication |
US6067547A (en) * | 1997-08-12 | 2000-05-23 | Microsoft Corporation | Hash table expansion and contraction for use with internal searching |
US6192408B1 (en) * | 1997-09-26 | 2001-02-20 | Emc Corporation | Network file server sharing local caches of file access information in data processors assigned to respective file systems |
US6192165B1 (en) | 1997-12-30 | 2001-02-20 | Imagetag, Inc. | Apparatus and method for digital filing |
US6035303A (en) * | 1998-02-02 | 2000-03-07 | International Business Machines Corporation | Object management system for digital libraries |
US6915307B1 (en) | 1998-04-15 | 2005-07-05 | Inktomi Corporation | High performance object cache |
GB9811574D0 (en) | 1998-05-30 | 1998-07-29 | Ibm | Indexed file system and a method and a mechanism for accessing data records from such a system |
US6108703A (en) | 1998-07-14 | 2000-08-22 | Massachusetts Institute Of Technology | Global hosting system |
AU5460299A (en) | 1998-07-24 | 2000-02-14 | Jarg Corporation | Distributed computer database system and method for performing object search |
US6154747A (en) * | 1998-08-26 | 2000-11-28 | Hunt; Rolf G. | Hash table implementation of an object repository |
EP0993163A1 (en) | 1998-10-05 | 2000-04-12 | Backweb Technologies Ltd. | Distributed client-based data caching system and method |
WO2000029971A2 (en) * | 1998-11-13 | 2000-05-25 | The Chase Manhattan Bank | A system and method for managing information retrievals from distributed archives |
US6275898B1 (en) | 1999-05-13 | 2001-08-14 | Lsi Logic Corporation | Methods and structure for RAID level migration within a logical unit |
US20040225865A1 (en) | 1999-09-03 | 2004-11-11 | Cox Richard D. | Integrated database indexing system |
US6185666B1 (en) * | 1999-09-11 | 2001-02-06 | Powerquest Corporation | Merging computer partitions |
US7003560B1 (en) * | 1999-11-03 | 2006-02-21 | Accenture Llp | Data warehouse computing system |
US6351776B1 (en) | 1999-11-04 | 2002-02-26 | Xdrive, Inc. | Shared internet storage resource, user interface system, and method |
US6557111B1 (en) | 1999-11-29 | 2003-04-29 | Xerox Corporation | Multicast-enhanced update propagation in a weakly-consistant, replicated data storage system |
US6651242B1 (en) | 1999-12-14 | 2003-11-18 | Novell, Inc. | High performance computing system for distributed applications over a computer |
US7356766B1 (en) * | 2000-01-21 | 2008-04-08 | International Business Machines Corp. | Method and system for adding content to a content object stored in a data repository |
US6600419B2 (en) | 2000-02-01 | 2003-07-29 | Treetop Ventures Llc | Method for determining if a publication has not been read |
US20030046396A1 (en) * | 2000-03-03 | 2003-03-06 | Richter Roger K. | Systems and methods for managing resource utilization in information management environments |
US20010027467A1 (en) * | 2000-03-30 | 2001-10-04 | Anderson David P. | Massively distributed database system and associated method |
JP2001344076A (ja) | 2000-06-05 | 2001-12-14 | Fujitsu Ltd | ディスクアレイ装置 |
US20020007350A1 (en) | 2000-07-11 | 2002-01-17 | Brian Yen | System and method for on-demand data distribution in a P2P system |
US20020138559A1 (en) * | 2001-01-29 | 2002-09-26 | Ulrich Thomas R. | Dynamically distributed file system |
US7734715B2 (en) | 2001-03-01 | 2010-06-08 | Ricoh Company, Ltd. | System, computer program product and method for managing documents |
WO2002084528A1 (en) | 2001-04-12 | 2002-10-24 | Fifth Web Limited | System and method for searching in a distributed computing environment |
US20020188735A1 (en) | 2001-06-06 | 2002-12-12 | Needham Bradford H. | Partially replicated, locally searched peer to peer file sharing system |
JP4183400B2 (ja) * | 2001-06-27 | 2008-11-19 | 株式会社日立製作所 | データベースシステムとデータベース管理方法およびプログラム |
US6918013B2 (en) * | 2001-07-16 | 2005-07-12 | Bea Systems, Inc. | System and method for flushing bean cache |
US20030101183A1 (en) * | 2001-11-26 | 2003-05-29 | Navin Kabra | Information retrieval index allowing updating while in use |
CA2377649C (en) * | 2002-03-20 | 2009-02-03 | Ibm Canada Limited-Ibm Canada Limitee | Dynamic cluster database architecture |
US20040044776A1 (en) | 2002-03-22 | 2004-03-04 | International Business Machines Corporation | Peer to peer file sharing system using common protocols |
US6898609B2 (en) * | 2002-05-10 | 2005-05-24 | Douglas W. Kerwin | Database scattering system |
US20040006601A1 (en) * | 2002-07-01 | 2004-01-08 | Bernstein David B. | Method and system for optimized persistent messaging |
US20040010716A1 (en) | 2002-07-11 | 2004-01-15 | International Business Machines Corporation | Apparatus and method for monitoring the health of systems management software components in an enterprise |
US7263560B2 (en) * | 2002-08-30 | 2007-08-28 | Sun Microsystems, Inc. | Decentralized peer-to-peer advertisement |
US7657597B2 (en) * | 2002-09-26 | 2010-02-02 | Sun Microsystems, Inc. | Instant messaging using distributed indexes |
US7206934B2 (en) | 2002-09-26 | 2007-04-17 | Sun Microsystems, Inc. | Distributed indexing of identity information in a peer-to-peer network |
KR20020096027A (ko) | 2002-10-22 | 2002-12-28 | (주)컴파인 | 세계 곳곳에 분포된 개인용 컴퓨터의 스토리지와 네트워크자원을 이용하여 파일을 저장하고 서비스하는 그리드 파일 시스템 |
US7287068B1 (en) * | 2002-12-13 | 2007-10-23 | Bmc Software, Inc. | System and method for updating devices that execute an operating system or application program directly from nonvolatile storage |
US20050027692A1 (en) * | 2003-07-29 | 2005-02-03 | International Business Machines Corporation. | Method, system, and program for accessing data in a database table |
US7664798B2 (en) * | 2003-09-04 | 2010-02-16 | Oracle International Corporation | Database performance baselines |
US7240064B2 (en) | 2003-11-10 | 2007-07-03 | Overture Services, Inc. | Search engine with hierarchically stored indices |
US20050108203A1 (en) | 2003-11-13 | 2005-05-19 | Chunqiang Tang | Sample-directed searching in a peer-to-peer system |
DE602004015138D1 (de) | 2003-11-14 | 2008-08-28 | Canon Kk | System, verfahren und einrichtungen für den zugrife benutzung in einem peer-to-peer-kommunikationsnetz |
US7444389B2 (en) * | 2003-12-09 | 2008-10-28 | Emc Corporation | Methods and apparatus for generating a content address to indicate data units written to a storage system proximate in time |
US7734643B1 (en) * | 2004-06-30 | 2010-06-08 | Oracle America, Inc. | Method for distributed storage of data |
US7778984B2 (en) * | 2004-11-19 | 2010-08-17 | Microsoft Corporation | System and method for a distributed object store |
US7454406B2 (en) * | 2005-04-29 | 2008-11-18 | Adaptec, Inc. | System and method of handling file metadata |
US20070033229A1 (en) * | 2005-08-03 | 2007-02-08 | Ethan Fassett | System and method for indexing structured and unstructured audio content |
US8655850B2 (en) * | 2005-12-19 | 2014-02-18 | Commvault Systems, Inc. | Systems and methods for resynchronizing information |
US8554758B1 (en) | 2005-12-29 | 2013-10-08 | Amazon Technologies, Inc. | Method and apparatus for monitoring and maintaining health in a searchable data service |
US7716180B2 (en) * | 2005-12-29 | 2010-05-11 | Amazon Technologies, Inc. | Distributed storage system with web services client interface |
-
2006
- 2006-03-29 US US11/392,480 patent/US8554758B1/en active Active
- 2006-03-29 US US11/392,485 patent/US7685109B1/en active Active
- 2006-03-29 US US11/393,002 patent/US8392400B1/en active Active
- 2006-11-30 CN CN2006800535217A patent/CN101395602B/zh active Active
-
2013
- 2013-02-28 US US13/780,659 patent/US8775411B1/en active Active
-
2014
- 2014-07-03 US US14/323,630 patent/US10664478B2/en active Active
-
2015
- 2015-08-28 US US14/839,702 patent/US10789251B2/en active Active
- 2015-08-28 US US14/839,711 patent/US10664375B2/en active Active
-
2020
- 2020-05-22 US US16/882,276 patent/US11580109B2/en active Active
- 2020-05-22 US US16/882,284 patent/US11354315B2/en active Active
Cited By (65)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101557421B (zh) * | 2009-05-19 | 2012-02-01 | 北大方正集团有限公司 | 一种网络文件分发方法及其*** |
CN106407410A (zh) * | 2009-10-26 | 2017-02-15 | 亚马逊技术股份有限公司 | 供应并管理已复制数据 |
WO2011072610A1 (zh) * | 2009-12-16 | 2011-06-23 | 华为技术有限公司 | 一种内容发布与获取的方法、装置和*** |
CN102316134B (zh) * | 2010-07-05 | 2013-11-27 | 杭州华三通信技术有限公司 | Fc名称服务信息的本地查询方法及装置 |
CN102316134A (zh) * | 2010-07-05 | 2012-01-11 | 杭州华三通信技术有限公司 | Fc名称服务信息的本地查询方法及装置 |
CN103140850A (zh) * | 2010-08-09 | 2013-06-05 | 移动解决方案公司 | 移动设备上的数据共享 |
CN103140850B (zh) * | 2010-08-09 | 2016-12-21 | 移动解决方案公司 | 移动设备上的数据共享 |
CN103069421B (zh) * | 2010-08-23 | 2017-02-08 | 诺基亚技术有限公司 | 用于处理针对分区式索引的搜索请求的方法和装置 |
CN103069421A (zh) * | 2010-08-23 | 2013-04-24 | 诺基亚公司 | 用于处理针对分区式索引的搜索请求的方法和装置 |
US9229946B2 (en) | 2010-08-23 | 2016-01-05 | Nokia Technologies Oy | Method and apparatus for processing search request for a partitioned index |
CN103109292A (zh) * | 2010-09-24 | 2013-05-15 | 日立数据***有限公司 | 在容错数据库管理***中聚集查询结果的***和方法 |
CN101980207A (zh) * | 2010-11-09 | 2011-02-23 | 中国电信股份有限公司 | 一种数据库访问的实现方法和*** |
CN104067216B (zh) * | 2011-06-27 | 2017-06-20 | 亚马逊科技公司 | 用于实施可扩展数据存储服务的***和方法 |
CN104067216A (zh) * | 2011-06-27 | 2014-09-24 | 亚马逊科技公司 | 用于实施可扩展数据存储服务的***和方法 |
CN113626525A (zh) * | 2011-06-27 | 2021-11-09 | 亚马逊科技公司 | 用于实施可扩展数据存储服务的***和方法 |
CN103827866A (zh) * | 2011-10-21 | 2014-05-28 | 高通股份有限公司 | 用于通信网络的网络连接式媒体网关 |
CN103827866B (zh) * | 2011-10-21 | 2017-11-17 | 高通股份有限公司 | 用于通信网络的网络连接式媒体网关 |
CN104662530A (zh) * | 2012-10-30 | 2015-05-27 | 英特尔公司 | 对于分布式数据存储和处理***的调整(tune) |
CN104662530B (zh) * | 2012-10-30 | 2018-08-17 | 英特尔公司 | 对于分布式数据存储和处理***的调整(tune) |
CN103049354A (zh) * | 2012-12-21 | 2013-04-17 | 华为技术有限公司 | 数据修复方法、数据修复装置以及存储*** |
CN110083739B (zh) * | 2013-03-15 | 2024-04-30 | 构造数据有限责任公司 | 用于使用距离关联性散列法对媒体数据库定址的***和方法 |
CN110083739A (zh) * | 2013-03-15 | 2019-08-02 | 构造数据有限责任公司 | 用于使用距离关联性散列法对媒体数据库定址的***和方法 |
CN105706047A (zh) * | 2013-11-11 | 2016-06-22 | 亚马逊科技公司 | 基于分区的数据流处理框架 |
CN105706047B (zh) * | 2013-11-11 | 2018-08-31 | 亚马逊科技公司 | 基于分区的数据流处理框架 |
CN106164897A (zh) * | 2013-12-02 | 2016-11-23 | 丘贝斯有限责任公司 | 用于寄存内存数据库的***及方法 |
WO2015139364A1 (zh) * | 2014-03-20 | 2015-09-24 | 中兴通讯股份有限公司 | 一种资源通告管理的方法及公共业务实体 |
CN104936199A (zh) * | 2014-03-20 | 2015-09-23 | 中兴通讯股份有限公司 | 一种资源通告管理的方法及公共业务实体 |
CN106133719A (zh) * | 2014-03-31 | 2016-11-16 | 瓦欧尼斯***有限公司 | 企业索引的授权部分 |
CN106713226A (zh) * | 2015-11-12 | 2017-05-24 | 卓望数码技术(深圳)有限公司 | 一种用于分布式***的远程过程调用处理方法和*** |
CN109074451A (zh) * | 2016-01-29 | 2018-12-21 | 华睿泰科技有限责任公司 | 在分布式环境中保护内部服务 |
CN109074451B (zh) * | 2016-01-29 | 2022-12-09 | 华睿泰科技有限责任公司 | 在分布式环境中保护内部服务 |
US11200220B2 (en) | 2016-03-01 | 2021-12-14 | Advanced New Technologies Co., Ltd. | Efficient storage of user personal attributes for service provisioning |
CN106095863B (zh) * | 2016-06-03 | 2019-09-10 | 众安在线财产保险股份有限公司 | 一种多维度数据查询和存储***和方法 |
CN106095863A (zh) * | 2016-06-03 | 2016-11-09 | 众安在线财产保险股份有限公司 | 一种多维度数据查询和存储***和方法 |
US11943104B2 (en) | 2016-06-22 | 2024-03-26 | Amazon Technologies, Inc. | Application migration system |
CN109328335B (zh) * | 2016-06-22 | 2022-05-13 | 亚马逊科技公司 | 智能配置发现技术 |
CN109328335A (zh) * | 2016-06-22 | 2019-02-12 | 亚马逊科技公司 | 智能配置发现技术 |
CN106484565B (zh) * | 2016-09-22 | 2019-06-28 | 华为数字技术(成都)有限公司 | 多数据中心间的数据同步方法及相关设备 |
CN106484565A (zh) * | 2016-09-22 | 2017-03-08 | 华为数字技术(成都)有限公司 | 多数据中心间的数据同步方法及相关设备 |
CN106547860A (zh) * | 2016-10-21 | 2017-03-29 | 长安通信科技有限责任公司 | 一种分布式数据库性能故障的定位方法 |
CN106547860B (zh) * | 2016-10-21 | 2020-06-02 | 长安通信科技有限责任公司 | 一种分布式数据库性能故障的定位方法 |
CN107103055A (zh) * | 2017-03-29 | 2017-08-29 | 东北大学 | 面向内存更新密集型程序的Hourglass和Piggyback算法 |
CN107103055B (zh) * | 2017-03-29 | 2020-05-12 | 东北大学 | 面向内存更新密集型程序的Hourglass方法 |
CN106997395B (zh) * | 2017-04-13 | 2020-07-03 | 南京大学 | 一种移动感知复杂事件并行处理方法及*** |
CN106997395A (zh) * | 2017-04-13 | 2017-08-01 | 南京大学 | 一种移动感知复杂事件并行处理方法及*** |
CN109101363B (zh) * | 2017-06-21 | 2023-09-22 | 中兴通讯股份有限公司 | 基于Android***的异常恢复方法、装置、智能设备及存储介质 |
CN109101363A (zh) * | 2017-06-21 | 2018-12-28 | 中兴通讯股份有限公司 | 基于Android***的异常恢复方法、装置、智能设备及存储介质 |
CN111213138A (zh) * | 2017-08-15 | 2020-05-29 | 诺宝公司 | 分布式数据库中的索引拆分 |
CN109947460A (zh) * | 2017-12-21 | 2019-06-28 | 鼎捷软件股份有限公司 | 程序连结方法及程序连结*** |
CN108121511A (zh) * | 2017-12-21 | 2018-06-05 | 北京黑螺技术有限公司 | 一种分布式边缘存储***中的数据处理方法、装置及设备 |
CN109299190A (zh) * | 2018-09-10 | 2019-02-01 | 华为技术有限公司 | 分布式存储***中处理对象的元数据的方法及装置 |
CN109299190B (zh) * | 2018-09-10 | 2020-11-17 | 华为技术有限公司 | 分布式存储***中处理对象的元数据的方法及装置 |
CN110502371B (zh) * | 2019-08-23 | 2022-05-10 | 北京浪潮数据技术有限公司 | Cfs存储域恢复方法、装置、设备及可读存储介质 |
CN110502371A (zh) * | 2019-08-23 | 2019-11-26 | 北京浪潮数据技术有限公司 | Cfs存储域恢复方法、装置、设备及可读存储介质 |
CN111966877B (zh) * | 2020-06-29 | 2024-05-07 | 北京百度网讯科技有限公司 | 前端服务方法、装置、设备及存储介质 |
CN111966877A (zh) * | 2020-06-29 | 2020-11-20 | 北京百度网讯科技有限公司 | 前端服务方法、装置、设备及存储介质 |
CN111861763B (zh) * | 2020-07-28 | 2024-03-22 | 贵州力创科技发展有限公司 | 一种基于大数据管理的车辆保险反欺诈***及方法 |
CN111861763A (zh) * | 2020-07-28 | 2020-10-30 | 贵州力创科技发展有限公司 | 一种基于大数据管理的车辆保险反欺诈***及方法 |
CN111934958A (zh) * | 2020-07-29 | 2020-11-13 | 深圳市高德信通信股份有限公司 | 一种idc资源调度服务管理平台 |
CN112434118B (zh) * | 2020-11-11 | 2024-02-13 | 中南民族大学 | 索引结构及创建方法、***、查询方法及*** |
CN112434118A (zh) * | 2020-11-11 | 2021-03-02 | 中南民族大学 | Shadow索引及创建方法、***、查询方法及*** |
CN113609124B (zh) * | 2021-06-18 | 2024-03-26 | 天津津航计算技术研究所 | 一种具有可扩展性的数据记录存储方法及*** |
CN113609124A (zh) * | 2021-06-18 | 2021-11-05 | 天津津航计算技术研究所 | 一种具有可扩展性的数据记录存储方法及*** |
CN116431677B (zh) * | 2023-06-15 | 2023-11-21 | 南方电网数字电网研究院有限公司 | 基于内存数据库的数据路由方法、***和可读存储介质 |
CN116431677A (zh) * | 2023-06-15 | 2023-07-14 | 南方电网数字电网研究院有限公司 | 基于内存数据库的数据路由方法、***和可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US8775411B1 (en) | 2014-07-08 |
US8392400B1 (en) | 2013-03-05 |
US11354315B2 (en) | 2022-06-07 |
US10664478B2 (en) | 2020-05-26 |
US20200356566A1 (en) | 2020-11-12 |
US10664375B2 (en) | 2020-05-26 |
US11580109B2 (en) | 2023-02-14 |
US20160055229A1 (en) | 2016-02-25 |
US20140324881A1 (en) | 2014-10-30 |
US8554758B1 (en) | 2013-10-08 |
US7685109B1 (en) | 2010-03-23 |
US20150370795A1 (en) | 2015-12-24 |
US20200387510A1 (en) | 2020-12-10 |
CN101395602B (zh) | 2011-10-05 |
US10789251B2 (en) | 2020-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101395602B (zh) | 用于分布式文件存储和索引服务的方法和装置 | |
US7801912B2 (en) | Method and apparatus for a searchable data service | |
US20200183932A1 (en) | Optimizing write operations in object schema-based application programming interfaces (apis) | |
JP6669892B2 (ja) | 分散型データストアのバージョン化された階層型データ構造 | |
AU2017269108B2 (en) | Optimizing read and write operations in object schema-based application programming interfaces (APIS) | |
USRE42051E1 (en) | Peer-to-peer automated anonymous asynchronous file sharing | |
Li et al. | Citeseerχ: a scalable autonomous scientific digital library | |
Li | Introduction to Big Data | |
Silva | Data modeling with NoSQL: How, when and why | |
Calvaresi | Building a Distributed Search System with Apache Hadoop and Lucene |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |