斜线标签的制作方法

文档序号:6507883阅读:376来源:国知局
斜线标签的制作方法
【专利摘要】本发明涉及斜线标签。管理数据库系统的方法包括搜索引擎。该数据库系统从数据库系统中的一个或多个节点接收N个请求。在开始操作之前组合该N个请求,以处理请求。减少处理请求的操作的数量,并执行减少了数量的操作。该搜索引擎包括利用了蜂群算法的分散的蜂群系统。该N个请求包括N个增加请求,以向存储在数据库系统中的行增加一个值。组合N个请求包括将增加请求组合到数据库系统中存储的行;以及执行该减少了数量的操作包括执行下述操作,即对于少于N个处理中的N个增加请求,增加数据库系统中存储的行中的值。
【专利说明】斜线标签
[0001]本申请是申请号为201080037040.3、申请日为2010年06月21日、发明名称为“可
扩展的集群数据库”的PCT国际发明专利申请的分案申请。
【技术领域】
[0002]本应用涉及数字计算或数据处理的领域,其包括数据结构和数据库/文件访问和管理,尤其是用于分布式数据库系统中的传播,搜索和检索数据。
【背景技术】
[0003]分布式数据库系统可以用于存储和访问联网结构,例如大型集群,分布式计算系统,局域网,互联网和其他信息检索系统中的大规模数据。分布式数据库系统包括存储和处理设备,其典型地由中央数据库管理系统管理和控制。中央数据库管理系统可以存储在位于相同物理位置的多个计算机中,也可以分散在互联的计算机网络中。
[0004]由中央数据库管理系统控制的分布式数据库系统受多种原因限制。如果主机故障,即使主机是容错的,中央主机控制管理功能的事实也会导致暂时不可用。并且,诸如网络分区的问题经常引起集群中至少一部分不可用。最后,用于主机容错的算法,例如Paxos,经常需要大量的时间从故障中恢复,在此期间,系统部分或全部不可用。具有中央主机也可能损害可扩展性。
[0005]在大规模分布式系统中,由于异常情况,例如网络断开和电源故障,系统设备会频繁故障或失去网络连接。面对这些频繁故障,确保连续的系统可用性对于提供良好、等待时间短的操作是非常重要的。
[0006]分布式数据库系统的另一个问题是支持高写速率的困难。即使像在具有许多网络服务器的网站上计算点击次数这样简单的事情在今天看来也是个难题。由于记录文件分析非常昂贵,导致其经常不能实时完成。统计数据,例如访问网站的独特顾客的数量的产生是
非常昂贵的。
[0007]今天在应用的尤其是应答搜索查询中的分布式数据库中,存在许多问题。搜索引擎对于在大型的文档数据库中定位文档,例如万维网(WWW)上的文档,或局域网的计算机上存储的文档,提供了有力的工具。响应于用户提交的搜索查询,定位文档。搜索查询由一个或多个搜索词组成。需要的是用于从数据库有效地和更智能地抽取相关信息的创新型技术。比仅仅是输入几个搜索词更智能的查询搜索引擎的能力对于今天的搜索引擎来说是更大的进步。查询结果的显示也可以使用这种改进。

【发明内容】

[0008]根据本发明的一个方面,涉及一种请求在网络浏览器中显示的搜索查询的方法,包括:在与数据库通信的服务器中,接收一个或多个搜索词和从多个斜线运算符中选择的斜线运算符;并基于所述一个或多个搜索词和斜线运算符产生搜索结果。
[0009]其中,产生搜索结果包括基于一个或多个搜索词提供组织内容的搜索结果列表,其中所述一个或多个搜索词位于由斜线运算符确定的分类中。
[0010]其中,所述多个斜线运算符包括主流运算符。
[0011]其中,所述多个斜线运算符包括内容运算符。
[0012]其中,所述多个斜线运算符包括小方面运算符。
[0013]其中,所述多个斜线运算符包括统一资源定位器(URL)运算符。
[0014]其中,所述多个斜线运算符包括列表运算符。
[0015]请求在网络浏览器中显示的搜索查询的方法进一步包括当产生搜索结果时,使用预交叉公共过滤器。
[0016]根据本发明的另一个方面,涉及一种用于搜索数据库的系统,包括:与至少一个数据库和网络通信的至少一个服务器;所述至少一个服务器用于:通过网络从用户接收至少一个搜索词和斜线运算符;基于搜索词和斜线运算符搜索所述至少一个数据库;使得显示给用户的搜索结果包括基于搜索词和斜线运算符的搜索结果。
[0017]其中,斜线运算符是主流运算符、内容运算符、小方面运算符、URL运算符和列表运算符中的至少一个。
[0018]其中,服务器使用斜线运算符来限制仅基于搜索词返回的搜索结果。
[0019]其中,服务器还用于使得将建议的斜线运算符显示给用户。
[0020]其中,服务器还用于允许用户输入列表运算符的建议。
[0021 ] 其中,服务器还用于向用户建议流行的搜索运算符作为主流运算符。
[0022]根据本发明的又一个方面,涉及一种通过服务器搜索数据库的方法,包括:在计算机网络中,在服务器接收至少一个搜索词和设置一个斜线运算符;使用接收的至少一个搜索词和接收的至少一个斜线运算符搜索数据库;使得显示从数据库搜索返回的搜索结果;其中,服务器使用斜线运算符来限制搜索结果。
【专利附图】

【附图说明】
[0023]为了更好的理解本申请中所述的实施例,应当结合附图,参照下面的【具体实施方式】,其中在所有附图中,相似的参考标记表示对应的部分。
[0024]图1是根据一些实施例的分布式网络系统的框图;
[0025]图2是根据一些实施例的具有多个集群的分布式数据库系统的框图;
[0026]图3A是用于示意分布式数据库系统中主机系统的框图;
[0027]图3B是根据一些实施例的分布式数据库系统中蜂群(swarm)系统的框图;
[0028]图4是根据一些实施例,用于示意向蜂群系统中节点的集群增加新节点的框图;
[0029]图5A和5B是根据一些其他实施例,用于示意分布式数据库的蜂群系统的框图;
[0030]图5C是根据一些实施例,用于示意集群中节点网架(rack)的框图;
[0031]图6A-6C是根据一些实施例的蜂群系统中映射和分配存储桶(bucket)的框图;
[0032]图7A-7C是根据一些实施例的如何在分布式数据库中组织和存储数据的框图;
[0033]图8是根据一些实施例,用于示意蜂群系统中数据交换的框图;
[0034]图9是根据一些实施例的分布式数据库系统中获取操作的框图;
[0035]图10是根据一些实施例的分布式数据库系统中处理获取请求的流程图;
[0036]图11是根据一些其他实施例的在分布式数据库系统中处理请求的流程图;[0037]图12是根据一些实施例的在分布式数据库系统中修复和管理存储桶的过程的流程图;
[0038]图13A是根据一些实施例,用于示意在蜂群系统350,500中如何删除文件的框图;
[0039]图13B是根据一些实施例,用于示意并行映射作业过程的框图;
[0040]图14A是根据一些实施例的组合算符(combinator)工具的集合;
[0041]图14B是根据一些实施例,用于示意在分布式数据库系统中用于节点的加法组合算符的框图;
[0042]图15是根据一些实施例,示意在分布式数据库系统中用于写入三个存储桶复制的组合算符的框图;
[0043]图16A是根据一些实施例,用于示意TopN排名的数据结构的图示;
[0044]图16B是根据一些实施例,用于示意在分布式数据库系统中概念性的记录计数(Logcount)结构和过程的图示;
[0045]图16C是根据一些实施例的,利用记录计数对一组独特的项目进行计数的过程的流程图;
[0046]图17A是根据一些实施例,用于示意映射数据位置的数据结构的框图;
[0047]图17B是根据一些实施例的映射的本地化子集的框图;
[0048]图18是根据一些实施例的服务器的框图;
[0049]图19是根据一些实施例的,在图17的服务器中守护进程(daemon)工具的集合;
[0050]图20是根据一些实施例的客户端计算机的框图;
[0051]图21是根据一些实施例的搜索查询框的屏幕显示的示例;
[0052]图22A是根据一些实施例的搜索结果的屏幕显示的示例;
[0053]图22B-22C是根据一些实施例的在搜索结果中列出的搜索结果项目的示例;
[0054]图23是根据一些实施例的用于搜索结果的RSS页面的屏幕显示的示例;
[0055]图24A-24B是根据一些实施例的用于搜索结果的链接页面的屏幕显示的示例;
[0056]图25是根据一些实施例的用于搜索结果的高速缓存页面的屏幕显示的示例;
[0057]图26是根据一些实施例的用于搜索结果的源页面的屏幕显示的示例;
[0058]图27是根据一些实施例的扩展的搜索结果列表的屏幕显示的示例;
[0059]图28是根据一些实施例的用于搜索结果的SEO页面的屏幕显示的示例;
[0060]图29A-29B是根据一些其他实施例的搜索结果的屏幕显示的示例;
[0061]图30A-30B是根据一些其他实施例的搜索结果的屏幕显示的示例;
[0062]图31和32是根据一些实施例的用于搜索数据库系统的可视化工具的屏幕显示的示例。
【具体实施方式】
[0063]现在详细参照实施例,其示例结合附图示意。在下述的详细描述中,为了充分理解这里提供的发明主题,提出了许多特定的细节。但是对于本领域技术人员显而易见的是该主题在没有这些特定细节的情况下也可以实施。并且,通过示例提供这里描述的特殊的实施例,其不应将本发明的保护范围限制在这些特殊实施例中。在其他情况下,没有详细描述公知的数据结构、时间协议、软件操作、程序和组件,以避免不必要地混淆本发明实施例的方面。
[0064]A.结构概况
[0065]图1是根据实施例的分布式网络系统100的框图。具有多个节点(服务器)142A-N的一个或多个集群140A-N和客户端110连接至通信网络130。
[0066]客户端110可以是任意数量的设备(例如,计算机,互联网展示亭,个人数字助手,移动电话,游戏设备,台式计算机,平板电脑或手提计算机)。客户端110可以包括客户端应用132,客户端助手134,和/或客户端存储器136。客户端应用132可以是软件应用,其允许用户和客户端110和/或网络资源交互以执行一个或多个任务。例如,客户端应用132可以是网络浏览器或其他类型的应用(例如,搜索引擎应用),其允许用户搜索,浏览,和/或使用位于集群140A-N中节点142的资源(例如,网页和网络服务)。节点142的资源可以由客户端110经由通信网络130访问。客户端助手134可以是软件应用,其针对客户端应用132和/或其他应用,执行一个或多个涉及监视或辅助用户活动的任务。例如,客户端助手134辅助用户在客户端110浏览由网站上的资源(例如,文件);处理由节点142产生的信息项目(例如,搜索结果);和/或监视用户对于搜索结果的活动。在一些实施例中,客户端助手134是客户端应用132的一部分,用作客户端应用132的插件或扩展部分(例如,从各种在线资源提供),而在其他一些实施例中,客户端助手134是与客户端应用132分离的独立的程序。在一些实施例中,客户端助手134嵌入在一个或多个网页中,或嵌入在从一个或多个服务器,例如节点142下载的文档中。客户端存储器136可以存储信息,例如网页,从节点142接收的搜索结果,系统信息,和/或有关用户的信息。
[0067]在一些实施例中,每个集群140包括用于存储,组织和访问信息的多个节点142,其中所述信息例如是从网页和互联网中提取的信息。但是,信息可以任何类型的数据或元数据,其包括但不限于,文档,文件,表格,日志,媒体文件,数字数据,等等。在一些实施例,节点142由其所属的集群140组织,但是,在其他实施例中,节点142可以成组和类别的组织和访问,该组和类别不依赖于其所属的集群140。在一些实施例中,每个集群140A-N中的节点142在每个集群140内被分类或组织为子组。每个集群140A-N可以位于单个地理位置。但是,单个集群140A可以扩展到多个地理位置,或者多个集群140A-N可以扩展到多个地理位置。因此,集群和节点的概念与节点142的物理组织相关,也与节点142的抽象或虚拟组织相关。
[0068]在一些实施例中,节点142利用蜂群算法在离散系统中自行组织。在其他实施例中,实施蜂群算法以组织一个或多个集群140或节点142使得节点142在本地彼此交互,以及与它们的环境交互。蜂群算法允许节点142彼此通信并通过通信链路150彼此合作以在数据库环境内完成各种任务,而不依赖主机节点。
[0069]通信网络130可以是任意有线或无线的本地局域网(LAN),城市局域网,和/或广域网(WAN),例如内部互联网,外联网,或互联网,或者它可以是这些网络的组合。由通信网络130在集群140、节点142之间,以及在集群140和客户端110之间提供通信能力是足够的。在一些实施例中,通信网络130通过传输控制协议/互联网协议(TCP/IP),使用超文本传输协议(HTTP)传送信息。HTTP允许客户端计算机通过通信网络130访问各种可用的文件。但是,本发明的各种实施例不限于使用任何特殊协议。在本说明书中使用的术语“文档”是指可以从集群140访问的任何信息或服务,其可以是,例如,网页,某种格式的文件,数据库记录,图像,计算目标,或其他信息项目。
[0070]图2是根据一些实施例的分布式数据库系统200的框图,其包括多个集群240。与集群140类似,每个集群240A-N包括一组节点242A-N。在一些实施例中,集群240通过集群连接器220彼此耦合,其中集群连接器可以是有线的或无线的。集群连接器220具有在系统200的集群240之间通信的能力。由集群连接器220建立的连接可以是内联网或外联网,它可以使得本地系统200经由通信网络130连接至互联网、内联网或外联网,或者它可以构造为允许这些网络的组合。系统200可以包括几个集群240A-B或许多集群240A-N。集群240可以位于单个地理位置或扩展至多个地理位置。在其他实施例,系统200中的单个集群240可以扩展至多个地理位置。如图1和2所示,本发明的各种实施例不限于任何特殊的网络系统。
[0071]B.结构级别
[0072]蜂群vs.主机
[0073]图3A是用于示意分布式数据库系统(未示出)中主机节点310的框图。大多集群数据库系统选择单个节点312 (利用例如Paxos的系统)作为“主机”。主机节点312典型地保留了数据库中的所有文件,包括表格,控制/状态信息,映射,以及当前文件位置。主机节点312也控制全系统活动,并管理其他节点314a-e以通信指令,管理复制,请求更新,以及其他管理任务。客户端(未示出)典型地必须通过主机节点312以访问存储在其他节点314a_e的数据,或者向其他节点314a_e发送请求。主机系统310中的数据库操作非常耗时,这是因为对于节点314的每个指令都必须通过主机节点312。例如,为了发送读取(或获取)操作的指令,时间花费在,在主机节点312从客户端(未示出)接收请求后,需要将指令通过通信链接320发送至服务节点,例如节点4314d。在请求提供至客户端之前,当节点4314d通过通信链路324向主机节点312返回请求响应时,要花费更多的时间。另夕卜,进一步的延迟会由于节点故障引起,在节点故障期间,读取或写入数据库必须典型地等到故障被解决或者资源重新分配以弥补故障。延迟的一部分包括主机节点312确定故障位置的时间,以及与其他节点314通信指令以弥补故障的时间。
[0074]图3B是根据一些实施例的分布式数据库系统(未示出)中蜂群系统350的框图。通常,蜂群系统350中的蜂群算法产生许多节点352a-e彼此协作而没有主机节点例如主机节点312的环境。蜂群系统350是可扩展的集群数据库,其中该数据库的许多算法是蜂群算法。蜂群系统350中的独立节点352在不利用主机节点,例如主机节点312协调的情况下,可以做出群体决定。蜂群环境的生物示例是昆虫群。取代依赖来自主机或一些中央智能机的引导或导向,昆虫群能够以在使用其环境时优化可用的资源的方式彼此指引。群体做出决定,而不是单独地或通过组内某一单个成员做出决定。例如,蚁群利用信息素来开发它们的环境并彼此指引至资源。蜜蜂同时在多个方向飞行很长的距离寻找食物。类似地,蜂群系统350中的节点352可以展示复杂的群体行为,无论其构成的有限智力和有限协调。蜂群系统350具有高容错性和高可用性,这部分地由于缺少主机节点,其中主机节点的故障会引起其他系统中断。
[0075]蜂群数据库系统350实施“宽松的最终一致性”方法。这代表普通的数据库一致性的ACID模型(原子性、一致性、分离和对偶性)的一些取舍,用以提供更高的性能。对于其他具有“最终一致性”的数据库来说,在写入后立即回读数据经常产生稳定的应答,或者延迟后的新数据的最终读取。但是,蜂群数据库系统350在一定意义上是“宽松的”,使得其不能对于数据库中的一小部分数据变得一致。尽管有小部分失效,但是蜂群系统350是高性能的数据检索和管理系统,其也可以在没有显著的人为干涉的情况下自动运行。具有宽松的最终一致性的蜂群数据库系统350是恰当的用于诸如搜索引擎应用的数据库模型。
[0076]在一些实施例中,节点352a_e中的每一个构造为具有相似的容量和功能使得没有单个节点352统治任意其他节点352。在其他实施例中,节点352构造为具有可变的容量,不过,蜂群350中的每个节点352具有相等的功能。在一些实施例中,节点352通过通信链路354,356彼此直接通信。每个节点352能够和蜂群350中的任意一个节点352通信。每个节点352能够接收写入指令,并当从例如客户端(未示出)接收读取请求时,能够响应该请求。在一些实施例中,节点352彼此通过通信链路354,356发送状态报告以报告文件数量,文件类型,接收新文件的可行性,修补项目以及其他与群体组相关的状况。因此,蜂群350群体地获知每个文件的位置,以响应读取请求,以及获知每个节点352的可用性以确定节点352中的哪个可以接收写入请求。
[0077]蜂群操作:映射
[0078]在一些实施例中,通过所有已知节点352经由通信链路354,356进行一系列一对一的数据交换来分配映射信息,识别在各个节点352中所有行的位置。交换的映射数据包括位于每个节点352的存储桶。在节点352从其他所有节点接听后,节点352具有完整的可以找到任意行的映射。
[0079]蜂群操作:增加节点
[0080]图4是根据一些实施例,用于示意增加至蜂群小区400中集群节点412的新节点416的结构框图。在一些实施例中,通信链路150,354,356是标准的以太网广播,其在蜂群小区400的有线以太网上传播。在其他实施例中,通信链路150,354,356可以是任意无线通信,例如无线LAN,其他RF通信,或任意前述的通信方法。节点412a-n通过广播420交流它们各自的状态信息。广播420可以遵循任意数量的通信协议。例如,广播420可以是短距离的广播协议,其用于查找局域网系统中的设备。但是,本发明的各种实施例不限于适用于任何特殊的通信链路或任意类型的协议。
[0081]当新节点416增加至蜂群小区400时,广播420用于定位新节点416。新节点416通过广播422宣告“我在这里”,指示其已经加入蜂群小区400。节点412a-n通过广播420确认接收宣告,新节点416准备好接收蜂群小区400的工作。广播机制允许所有节点412通过单个网络包的传输发现新节点416。用于接收增加至小区的新节点,例如节点416的广播协议,不需要向新节点416装载列出了所有节点的配置文件。因此,配置增加至小区400的任意新节点所需的仅是该广播协议,即“零配置”。另外,零配置协议不需要为小区400中的所有节点412更新或分配更新的配置文件。因此,节点412,416不受下述发生在配置文件中的一般错误的影响,其中该一般错误例如为编码错误,上载延迟,运行和保留配置文件,以及剩余有效节点未使用。
[0082]由于在没有配置文件和附加编码的情况下,多个新节点,例如节点416可以增加至小区400,因此,蜂群小区400的群体特征允许更大的可扩展性。由于在最小人为干涉(例如工程师和技工)的情况下,设备可以并入蜂群小区400,因此,当增加更多节点时,蜂群小区400允许均匀安装。蜂群小区400也被配置为处理更大的容错以处理节点故障,并恰当地具有下述部分描述的复制和修复协议。因此,尽管存在常规故障,蜂群小区400中的节点412可以更连续和可靠的运行。
[0083]蜂群操作:数据复制
[0084]图5A和5B是根据一些其他实施例,用于示意分布式数据库的蜂群系统500的框图。在一些实施例中,蜂群系统500包括复制协议,用于将任何信息(例如,接收或产生的信息)复制到至少三个不同的位置,其中每个位置称为“存储桶”。每当表格的一行被写入或更新时,其被写入或更新至所有恰当的存储桶的副本。系统500中每个表都有其应当具有多少副本的目标。在写入时,写入这些表中的行被发送至所有副本。这个目标可以随时改变,如果需要的话,守护进程会处理制作行的额外拷贝。例如,在蜂群系统500a中,第一个数据复制Rl被拷贝到节点1552a,第二个数据复制R2被拷贝到节点3552c,第三个数据复制R3被拷贝到节点2552b。在一些实施例中,当接收信息时,自动发生信息复制。在其他实施例中,当符合某种参数或条件时,发生信息复制。在一些实施例中,蜂群系统500具有恰当的协议或分配的守护进程,以检查和保持副本R1-R3,以至于在所有时间,有效的、可利用的信息复制是可用的。可以理解的是,节点552a-e能够如通信链路554,556所示的彼此直接通信。每个节点552能够与蜂群500a中的任何一个节点552通信信息,以及从任何一个节点552接收信息。但是,为了简单起见,没有示出所有可能的通信链路。例如,虽然未示出,节点1552a可以从节点5552e接收信息和发送信息至节点5552e,节点3552c可以从节点4552d接收信息和发送信息至节点4552d。
[0085]在一些实施例中,节点552中的每一个被分割为存储元素或“存储桶”,由节点552中每一个存储和保留的表映射该分割。在一些实施例中,存储桶的分配是指节点552中每一个的行空间的分割。在其他实施例中,存储桶的分配是多个节点552的物理空间概念上的分割。蜂群系统500中的存储桶的位置使得没有两个相同的存储桶的副本位于相同的节点552上。如前所述,集群140,240通常可以是一组概念上的设备,但是不总对应于节点142,242,552 (例如,服务器或其他存储设备)的物理分组。该存储桶(其复制三次)存储在三个不同的节点552a,552b,552c。该定位使得每个节点至多具有一个特殊存储桶的副本。这允许在不影响任何信息的两个以上副本的情况下,在节点552上每次执行一个系统管理任务(例如重启动)。
[0086]图5C是根据一些实施例,用于示意集群570中节点580-584的网架572-576的框图。在一些实施例中,节点580-584被分组,称为网架572-576,其将节点580-584的物理位置对应于物理网架,或不对应(例如,网架的逻辑组织,虚拟节点的组织,等等)。存储桶的副本,例如将存储桶B放置在节点580a,582c, 584a,使得存储桶B仅有一个副本落在网架572-576中。这允许每次在集群570的一个网架上执行系统管理任务,且确保任意数据的两个副本可用。
[0087]在一些实施例中,一组节点对应于一个以上的物理网架,这称为“存储区(zone)”。换言之,与单个网架相关联的节点也可以和存储区关联,该存储区包括属于其他物理网架的其他节点。存储区对于将节点分组来说很方便,其使得用于一个以上物理网架的物理组件的故障仅引起每个存储桶的至多一个副本损失。例如,在一些情况下,单个网络交换机服务于3个网架。实际上,为了使得每次完成的系统管理工作量最大,可以使用目标复制等级3将数据库的节点组织为4个存储区。可以理解,一个存储区可以替换为多个逻辑网架的分组。
[0088]在一些实施例中,蜂群系统500可以复制信息多于或少于三次,信息的复制次数取决于,但不限于,系统设计,容量,设备类型,或者其他因素。换言之,每个存储桶可以有三个以上或以下的副本。蜂群系统500允许节点552读取数据,或将存储桶复制到新节点552,而不考虑网络拓扑。节点552可以从相邻节点552读取或复制到相邻节点552。在一些实施例中,4-副本集群140,240取代3-副本集群140,240是可能的,其中两个副本的每一个都位于两个不同的位置。
[0089]在一些实施例中,当单个集群,例如集群140,240跨越两个地理区域,并且在这两个区域之间具有较窄的网络管道时,那么例如,在确定存储桶应当去哪,以及在取读操作中哪个存储桶应当被访问时,拓扑可以是重要的。优选从附近的存储桶副本读取。另外,由于故障原因,有利的是每个存储桶具有四个副本,其中每个地理区域有两个。如果一个故障,仍然有一个附近的存储桶副本可以读取,修复守护进程(在下述部分描述)可以总是从附近的存储桶副本制造一个新的拷贝。
[0090]蜂群操作:寻址故障
[0091]图5B的系统500b根据一些实施例,示意了蜂群系统500b寻址故障的方式。通常,系统500b设计为具有一定程度的容错,允许正常的故障事件发生,而不中断从数据库读取或写入数据,并且该故障不需要人为干涉。如果存储桶的一个副本故障,那么在存储桶的另外两个副本的一个上可以获得相同的信息。因此,在蜂群系统500中复制的信息存储在磁盘中用于容错。磁盘故障包括可能出现的很广范围的错误,这包括由蜂群系统500b或客户端的操作系统(未示出)报告的“读取错误”,或者数据没能通过误差检测测试,例如校验和,CRC(循环冗余码校验),或者其他用于检查数据或数据块故障以及校正检测到的任何存储在存储桶中的错误(例如,写入磁盘)的程序。当在存储桶中检测到错误时,没能通过测试的存储桶的副本将被丢弃,并读取或处理来自存储桶另一副本的数据。磁盘故障会引起节点562停止对该节点562上的存储桶的请求提供服务,节点562将停止宣告其为映射中的这些存储桶提供服务。随后,其他节点552和可用的节点552,而不是故障节点562继续通信564,566直到节点562的问题解决。在一些实施例中,如下述部分所述,磁盘故障会引起调用修复协议,例如修复守护进程,如下所述,这最终决定复制具有三个以下有效副本的那些存储桶。例如,修复守护进程诊断节点562的问题,并使得系统500b重新拷贝另一个可用节点552d或552e的副本,以替代节点562上不可用的副本R3。
[0092]在一些实施例中,整个节点562故障,或者节点562上的存储桶或存储桶的子集故障,例如“存储桶B上的副本3”,这将停止发送更新(例如其他节点552的映射更新)。最终,所有节点552将识别出由故障节点562服务的存储桶,或者存储桶的故障的副本“存储桶B的副本3”在节点562不再可用。这将使得修复守护进程(未示出)复制具有三个以下有效复制的存储桶。在一些实施例中,在故障节点562或节点562上的存储桶副本“存储桶B的副本3”被认定不可用之前,需要三个设备故障同时发生。在其他实施例中,在节点562或存储桶的“存储桶B的副本3”被确定不可用之前,需要三个以上或以下的故障同时发生。在一些实施例中,如果节点562上的存储桶副本“存储桶B的副本3”确定不可用,那么节点552将彼此通信(如通信564,566所示),使得节点562上不可用的存储桶副本被回避,作为替代,访问其他两个存储桶副本(例如,在节点552a和节点552c)。和前述示例一样,其他节点552将和其他有效节点552继续通信554,556,并停止和故障节点562通信。
[0093]蜂群运行:分配存储桶和散列操作
[0094]图6A-C是根据一些实施例的蜂群系统300,500中映射和分配存储桶620的框图。在一些实施例中,分布式数据库,例如蜂群系统300,500中的“存储桶”的分配由散列函数映射,该函数是将大块数据转为小块、有组织的信息,例如元数据、行、表、索引等的程序或数学函数。利用散列函数将随意大小的密钥转换为固定大小的二进制散列输出,可以实现行到存储桶的映射。在一个示例中,通过来自散列表610的行密钥的散列函数,可以识别特殊存储桶中存储的信息或信息位置,其中散列表指向存储桶620所在的特殊的位置。用于所有行密钥的散列函数,例如散列表610中列出的散列函数,映射至位于分布式数据库,例如系统300,500每个节点的表中(未示出),并在本地由每个节点保留和更新。行密钥在称为“一致性散列”的方案中包括位置码,例如位置=(hash mod n_nodeS),或者可以是位于表,例如散列表610中的存储槽。
[0095]在任一情况中,每个行密钥或存储槽指向存储桶620a_g。在一些实施例中,散列密钥的位前缀(例如,散列表610中的OOX至IlX……)用于产生或分配存储桶,其可以是变化大小的,密钥的前缀由存储桶的名称确定。因此,存储桶大小的变化允许在分配数据库的存储空间中具有灵活性和可扩展性。在一些实施例中,散列表610是前缀列表,其使用位模式散列来为存储桶620a-n(存储桶Bl-Bn)分派或分配行密钥。如上所述,分布式数据库,例如系统300,500的映射中一条数据的位置由其行密钥的散列确定。散列的最高位,称为散列表610中的前缀,确定数据位于哪个存储桶。
[0096]在一些实施例中,存储桶620a_n是嵌套的。例如,一个存储桶B1620a可以包括所有行。存储桶B1620a的前缀是X,其中X可以是O或I。存储桶B2620b和B3620c嵌套在存储桶B1620a的内部。可以 构造散列密钥使得如果行的散列以O开始,那么其在存储桶B2620b中,以及如果行的散列以I开始,那么其在存储桶B3620c中,如图6B所示。如图6C所示,附加的存储桶B4620d和B5620c可以嵌套在图6B的存储桶B2620b中。如果行的散列以00开始,那么其在存储桶B4620d中,如果行的散列以01开始,那么其在存储桶B5620e中。因此,根据散列表610的散列结构指示行密钥的散列以01开始时,其位于存储桶 B5620e, B2620b 以及 B1620a 中。
[0097]根据该散列结构,如图6B所示,存储桶B2620b是存储桶B1620a的一半大小。如图6C所示,存储桶B4620d是存储桶B2620b的一半大小,存储桶的分配由双数位前缀00,01,10,11识别。也就是说,存储桶B2620b包括存储桶B1620a —半的散列范围,存储桶B4620d包含存储桶B2620b包含的散列范围的一半。如果散列函数成功将行密钥平均分配至散列空间,那么存储桶B2620b将大概是存储桶B1620a物理尺寸的一半。
[0098]如果理想的是数据库中的存储桶大小基本相同,那么存储桶应该被相应地选择为具有一个范围的存储桶,例如图6B中的存储桶B2-B3620b-c和图6C中的存储桶B4-B7620d-g,而不是其他的。在该系统中,行精确地存在于一个存储桶中。
[0099]根据散列密钥限定映射具有几个益处。首先,存储桶的名称,一个小整数,确定存储桶中存储的密钥散列的范围。这与记录存储桶中任意范围的散列值相比,更方便调试和管理。第二,该方法允许不同大小的存储桶同时存在于系统中。给定行密钥的散列,结果是指示特殊行的映射可能会存在于一个以上的存储桶中,这在考虑存储桶的多个副本存在于数据库系统时是方便的。读取/写入行将会从所有这些存储桶读取或写入所有这些存储桶。许可不同大小的存储桶会允许各种灵活和可扩展的动作,例如在数据库运行时分割或组合存储桶。
[0100]假设单个散列函数用于所有行至存储桶的映射,那么给定行对于所有包含该行的表来说,位于相同存储桶内。这在执行并行映射作业时是有效的技术。访问节点的存储桶中表的所有行的程序确保访问不同表中的行,但是相同的行密钥是本地访问。
[0101]综上所述,如下定位行所在的特殊存储桶和节点的整个顺序:首先,散列行密钥。然后,利用该散列的前缀以及系统中存在的存储桶列表来确定哪个存储桶包含该行。最终,查看哪个节点已经宣布它们存储了这些存储桶。
[0102]C.组件级别
[0103]数据写入
[0104]图7A-7C是根据一些实施例,用于示出蜂群数据库系统100-300中如何组织和存储数据的框图。存储桶包含用于存储和管理数据的多个表。该数据需要以一种方式存储使得在多个表的行中读取和写入会比较便宜。并且,配置在每个各自存储桶中存储的表,使得改变一张表不会变动另一张表的任何内容。另外,该分隔降低了程序缺陷或存储错误的影响。
[0105]数据存储在底层存储器,其示例包括,但不限于,硬盘,闪存,或随机存储器。一个实施例涉及在Linux文件系统的文件中存储数据。存储桶内的每张表由一组分等级的文件734组成。一个实施例使用了三个级别,称为“big”,“mid”和“inc”。每个文件734具有索引,用于将行密钥散列映射至磁盘文件中的位置。该索引装载于RAM中,确保提取行涉及单个的磁盘寻找和读取。“big”文件包括表中最老的数据,“mid”文件中包含稍新的数据,“inc”文件包含最新的数据。
[0106]当应用希望写入表中的一行时,写入操作发送至本地节点或远程节点的“写入器守护进程”(未示出)。写入器守护进程将该数据写入交易记录(未示出),其在本地节点或远程节点崩溃,或者与远程节点通信失败之后,为了容错而重新播放。在一些实施例中,如前所述,给定的行写入需要被传送至存储桶的一个或多个(典型地是3)个副本中,其通常位于三个不同的节点。在一些实施例中,写入器守护进程将延迟给定写入一段时间,以希望找到更多的需要传送至相同的远程存储桶的写入。
[0107]在一些实施例中,“存储桶守护进程”(未示出)从写入器守护进程接收写入。存储桶守护进程记忆并组合写入任务直到已经过去一段时间或者已经到达某些数据量(例如,N秒或者M兆字节的数据到达各个节点142,352的特殊的表)。然后该数据写入磁盘的Inc文件中。Inc文件最终组合为Mid文件,多个Mid文件组合为Big文件。在一些实施例中,另一个守护进程,存储桶维护守护进程完成该组合。
[0108]操作系统参与向磁盘读取和写入的活动。在许多操作系统中,例如Unix或Linux,写入磁盘的数据变为“脏页”(例如,存储页具有需要被写入但是还没有被写入的数据)。本地操作系统(未示出)通常每N秒,或者如果脏页数量太大,每主要存储器(未示出)的一定百分比,来安排脏页的写入。因此,一次写入大块数据,通常是优选的,这是因为大块写入比许多小块写入更有效。但是,大块写入对于其他试图完成小块读取的过程来说是个问题。因此,在一些实施例中,写入操作被“计量”以打破大块的写入操作。换言之,系统写入受计量的限制,以留下磁盘容量用于快速应答读取。例如,可以以50MB/S写入数据的磁盘会被降低至将以8MB/s计量写入。因此,计量包含将任务分割成较小的块,然后每秒执行不超过N个。在另一示例中,通过将100兆字节划分为25个4兆字节的块并且每秒向磁盘写入两个4兆字节的块,以每秒8兆字节写入100兆字节的数据。
[0109]另外,可以依靠操作系统的特征,例如fsync()函数,其允许系统300,500强制立即写入,而不是N秒后写入。函数fsyncO通常用于在崩盘的情况下将数据损失降到最小。例如,Unix/Linux/POSIX fsyncO函数强制写入立即写入磁盘,而不是保存在存储器缓冲中,使得数据不会承担丢失的危险。因此,写入操作可以更有效地执行。
[0110]利用“写入映射”增加读取和写入的速度
[0111]如前所述,这里所述的数据库存储每个存储桶的多个副本。另一种加快磁盘读取和写入速度的方式是在给定时刻将每个存储桶的给定副本专门用于写入或读取。如果在短时间(少于I秒)物理磁盘或存储系统仅读取或仅写入,而不是在给定的物理磁盘或存储系统执行读取和写入的混合,那么磁盘运行会更快。例如,可以产生“写入映射”,其包含每个存储桶中哪个副本可以用于读取以及哪个可以用于写入的信息。包含多个副本的物理磁盘或存储系统需要具有用于读取或写入的所有存储桶副本,以获得利益。
[0112]每N秒产生新的写入映射,例如N=30秒。这个稍长的时间允许有大量时间来将写入映射分配至集群的所有节点。这些节点将它们的时钟同步至几毫秒内,当每个节点的时钟到达N秒边界时,采用新的写入映射。重要的是,所有节点同意哪个磁盘专用于读取或写入,这是因为所有读取器必须知道哪个节点发送获取和下一行的操作。
[0113]必须允许给定存储桶的给定副本最终写入,或者来自存储桶守护进程的写入数据会在存储器产生堆积(资源不足)。因此,每个存储桶副本都会给予在R=3的系统中至少写入1/3时间的机会。实际上,挑选用于写入的副本的算法考虑了从最后一次写入开始所经过的时间作为挑选哪个副本可以写入的主要因素。
[0114]通过该算法,给定存储桶的至少一个副本必须可以用于读取,读取算法必须在截断η次运行“写入副本”之前,试图从“读取副本”读取。
[0115]挑选哪个磁盘用于写入的算法的示例包括:
[0116]?从最早写入的存储设备至最近写入的存储设备循环。
[0117]?对于该存储设备上的每个存储桶副本来说,查看这些存储桶中的任一个是否需要成为该存储桶的I个读取副本。
[0118]?如果没有存储桶的副本需要成为读取器,那么将该存储设备设定为写入器。
[0119]挑选哪个磁盘写入的另一方法是利用数据库分为存储区的组织。简单地旋转通过存储区,每N秒挑选I个存储区写入。由于r3集群通常具有3个或3个以上存储区,该方法经常提供比前述方法更小的写入带宽。
[0120]数据组织
[0121]图7A示意了如何将数据写入分布式数据库,例如蜂群系统300,500中的各个节点。如前所述,存储桶守护进程从写入器守护进程接收写入。存储桶守护进程将写入712保持一段时间,希望接收到相同表的更多写入,但是最终对于每张表写出所有其拥有的写入712,作为新的Inc文件718。这些Inc文件激增,如Inc文件716...718所示意的,最终存储桶维护守护进程通知,并决定将一批Inc文件716…718合并为单个的Mid文件720。然后移除Inc文件716…718。在一些实施例中,多个Mid文件激增,在其他实施例中,具有至多I个Mid文件720,当Inc文件合并时,它们与现有的Mid文件720 (如果存在的话)进行组合,以形成新的Mid文件。最终,存储桶维护守护进程将Mid文件720和Big文件722组合形成新的Big文件728。在一些实施例中,Big文件728是将类似Big文件722的多个Big文件合并的结果。
[0122]相同的存储桶,例如存储桶2730中的不同的表,每张都具有其自己的文件组。在图7B中,我们看到三张表732,736,740。表Foo732和表Bar738最近已经被写入,因此,在等级734,738的所有三个级别都具有文件。表Nap740很长时间没有写入,存储桶维护守护进程将该表中的所有数据合并为单个的Big文件742。
[0123]当从这些文件732,736,740中读取数据时,应答的成本和精确性取决于存在多少个文件。为了获得对于行的读取请求的完美应答,查看表的每个文件。对于表Nap740来说,这是精确的一个文件,因此有I个磁盘寻找。对于表Foo732来说,必须出现许多磁盘寻找,以确保定位正确的应答。例如,与要寻找的数据相关联的行可能存在于Big文件中,但是该行可能已经在Mid或Inc文件中被修改。因此,所有文件需要被查阅以获得精确的应答。如果假设这样,每个磁盘寻找需要2ms (毫秒)至10ms,具有200个文件的表可能需要一会来应答读取请求。
[0124]分布式数据库,例如系统300,500允许为了速度牺牲精度。图7C示意了此情况。用于限制精度的值的名称是“寻找深度”。这是要完成的磁盘寻找的最大数量。在表Fool752中,进行行的读取,其中寻找深度=1。在这种情况下,仅查阅Big文件758,忽略Mid和Inc文件中的数据。在表Foo2760中,将行的读取设定为寻找深度=3。在这种情况下,查阅至多三个文件764。因此,表Fool752的读取将比表Foo2760的读取更快,但比其精度差。以每张表为基础,或者在单独的读取请求中,可以将寻找深度设定为默认值。
[0125]将Inc合并为Mid`,将Mid合并为Big减少了表中文件的数量。该文件的数量也被称为寻找深度。为了确定多少合并工作需要完成以将所有数据留在Big文件中,计算系统中最差的寻找深度,该值命名为寻找100。也确定系统中所有存储桶的所有副本的寻找深度的计数,并且寻找深度的值在第50和第90个百分点计算。这些数值分别称为寻找50和寻找90。这些值可以绘制为时间的函数,以将写入和合并数据的相互作用可视化(例如,发生多少次写入,多少次合并是必要的)。
[0126]在一些实施例中,布隆过滤器保存在存储器中,并且如果布隆过滤器指示特殊的行密钥不在该文件中,那么其可以用于避免查阅磁盘上的文件。这尤其有助于具有大的寻找深度的路径。
[0127]组件数据读取/写入概述
[0128]图8是根据一些实施例的,在集群810中向节点812写入804或从节点812读取806的数据802交换的框图。集群810包括节点812A-812G。如图3B所示,节点812A-812G直接彼此通信,每个节点812可以和集群810中节点812A-812G中任意一个通信。集群810中的节点812通过通信设备820广播它们的状态更新和其他信息。如前所述,通信设备820可以通过有线启动或者用于无线通信。在一些实施例中,不是所有节点812都响应正在接收的数据802,或者作为替换都响应于获取数据的请求。例如,当接收804数据802时,一些节点,例如节点812B,812C,812E,812F响应,这是因为这些节点具有可用的存储桶,用于存储接收的数据。如果接收到数据请求,一个响应的节点会向其他节点812广播:它具有请求的信息。在一些实施例中,广播节点812B,812C,812E,812F可以发送或更新状态报告以及更新它们各自的表,信息,广播修复请求或者任何其他管理任务。在一些实施例中,广播节点812B,812C,812E,812F中的一个或多个可以是新节点,可以向其他节点812广播以帮助完成任务或接收用于存储的数据。
[0129]一旦节点812成为集群810的一部分,则在集群810中的所有节点812共用或实施大量的管理工具和协议。例如,节点812上的修复守护进程(未示出)将开始运行。如果节点812是新节点并且没有存储桶,那么开始自愿复制位于过载节点812上的存储桶,直到新节点达到其存储桶的目标。节点812中的每一个包括多个程序或守护进程以执行与数据库系统相关的多个任务。这些程序包括,但不限于,网络服务器,爬取器(crawler),图像爬取器,垃圾守护进程,全球守护进程,记录器守护进程,文件服务器守护进程,映射作业守护进程,修复守护进程,随机存储守护进程,存储桶守护进程,存储桶_维护守护进程,读取器守护进程,写入器守护进程,心跳守护进程,监视守护进程:存储器溢出(oom)守护进程,以及check-r守护进程。一些守护进程将进一步详细讨论。
[0130]读取(获取数据):一般和高速缓冲存储
[0131]图9是根据一些实施例,示意在分布式数据库系统中用于获取请求任务的两个节点910,940之间合作的框图。在节点1910接收获取数据的请求912。获取数据的请求912对应于从数据库,例如集群810获取行的请求。当进行了请求时,行密钥首先被散列,以确定行出现在哪个存储桶中。在节点1910通过读取器守护进程914接收获取数据请求912,其执行get()请求。在一些实施例中,读取器守护进程914散列行密钥。
[0132]除了存储在磁盘上的信息,其中该信息被存储复制用于容错,一些用于快速访问的信息位于高速缓冲存储器中,例如高速缓冲存储器916。在一些实施例中,高速缓冲存储器916由读取器守护进程914管理,但是在其他实施例中,高速缓冲存储器916也可以位于节点1910内的本地磁盘或节点1910的外部,并且可以由其他守护进程管理。在一些实施例,高速缓冲存储器916可以在RAM内,在服务器上,在固态驱动(SSD)的闪存中,或者在周边元件扩展接口(PCI)快速卡的闪存中。在一些实施例中,RAM/Flash中存储的数据可能不是副本,但是作为替换,是在磁盘上存储、复制的数据的拷贝。在一些实施例中,读取器守护进程914用于从高速缓冲存储器916读取数据。读取器守护进程914首先检查高速缓冲存储器916以确定请求的数据912是否已经存储在高速缓冲存储器916中。在一些实施例中,除了高速缓冲存储器916之外,读取器守护进程914可以包括RAM高速缓冲存储器(未示出),或者节点910可以包括RAM高速缓冲存储器守护进程,其构造为存储来自存储桶的数据,用于更快速地响应查询。在一些实施例中,如果第一个副本总是在搜索信息的第二个或第三个复制的位置之前,首先被请求,那么,第一个副本存储在RAM高速缓冲存储器或者高速缓冲存储器916中。在一些实施例中,数据的第一个副本锁在RAM高速缓冲存储器或者高速缓冲存储器916中,使得其响应于查询可以被快速提供。在一些实施例中,RAM高速缓冲存储器或者高速缓冲存储器916对于程序员来说是透明的,以至于如果由于节点910中的部分存储桶还没有上载,导致对于查询的响应不能快速提供,那么其可以从RAM高速缓冲存储器或高速缓冲存储器916读取应答。[0133]如果获取数据请求912的应答不在RAM高速缓冲存储器或高速缓冲存储器916中,那么读取器守护进程914可以通过通信924向另一个节点940,节点2,发出请求,该节点2公知为包含对应于散列行密钥的存储桶。如果节点940不能快速回答,将向具有该存储桶的第三个节点(未示出)发出第二次请求,等等。
[0134]在一些实施例中,下一个节点940,节点2中的存储桶守护进程942从读取器守护进程914接收获取请求。存储桶守护进程,例如存储桶守护进程942,管理各个节点的一个或多个存储桶,以完成包括处理请求,从磁盘944上存储的存储桶检索信息,或者向磁盘944写入信息的任务。存储桶守护进程942根据行密钥散列检查948本地磁盘944,用于请求的行。如果磁盘944包含请求行,那么将信息返回至存储桶守护进程946用于传送。在一些实施例中,检索的信息经由通信922返回至读取器守护进程914用于最终传送至请求器。在一些实施例中,存储桶守护进程942直接将检索的信息传送至请求器。
[0135]在一些实施例中,在行密钥被散列后,获取数据请求912同时发送至两个或多个节点910,940。当获取数据请求912正在节点1910被处理时,请求也经由通信920发送至节点2940。在一些实施例中,获取数据请求912可以被类似处理,遵守用于所有节点910,940的公共协议。例如,获取数据请求912可以由本地读取器守护进程首先接收以检查本地高速缓冲存储器或ram高速缓冲存储器。如果本地高速缓冲存储器或ram高速缓冲存储器不包含该行,那么本地存储桶守护进程可以处理请求912。在一些实施例中,获取数据912可以被独立处理,例如读取器守护进程914可以首先检查节点1910中的高速缓冲存储器916,而节点2940中的获取数据请求912首先由存储桶守护进程942接收和处理。因此,集群810中的节点遵守处理和管理信息的公共协议;节点可以彼此独立,在本地处理和管理信息;或者节点可以遵守两者组合的协议。
[0136]读取(获取数据):截取和运行
[0137]图10是根据一些实施例的处理请求的流程图。系统810可以从任意数量的源接收请求,这些源包括,但不限于,诸如客户端110的客户端,集群810的另一节点812,另一集群140,240的另一节点142,242等等。请求可以是,但不限于,读取请求,获取请求,下一行请求,进行状态更新的请求,更新本地表和映射的请求,或者集群810内或来自集群810的外部源的任意类型的远程程序呼叫(RPC)。在步骤1010基于接收到请求,在步骤1020散列行密钥以确定存储桶是否能够服务于请求。在步骤1030,一旦确定一个或多个存储桶,具有其中一个存储桶的第一节点被要求服务于请求。如果在节点1040,第一节点快速响应,并且没有延迟,那么在步骤1050从第一节点接收请求的答复,第一节点处理请求,该过程停止。在一些实施例中,如果第一节点不响应或延迟响应,那么在步骤1060,具有一个确定存储桶的第二节点被要求服务于该请求。再次,在步骤1070,如果第二节点的响应没有延迟,那么在步骤1050,由第二节点接收请求的答复,在第二节点处理请求,并且该过程结束。在一些实施例中,在步骤1070,如果第二节点延迟响应,那么在步骤1080,具有一个确定存储桶的第三节点被要求服务于该请求。该过程重复,其中在步骤1090,如果第三节点的响应没有延迟,那么在步骤1050,接收请求的答复,服务于该请求并且该过程结束。在步骤1090,如果具有另一延迟,那么重复请求过程,第一节点再次在步骤1030被请求。在一些实施例中,尤其是如果由多于三个存储桶保留数据的多于三个的复制,那么该过程继续直到由集群810中可用的节点812为请求提供服务,或者由另一集群140,240中的另一节点142,242提供服务。
[0138]图11是根据一些其他实施例的处理请求的流程图。与图11的步骤1010和1020类似,在步骤1110,基于接收的请求(例如,RPC),在步骤1120,行密钥被散列以确定存储桶是否能够为请求提供服务。在步骤1130,一旦确定一个或多个存储桶,那么具有存储桶的所有节点被要求向请求提供服务。第一个答复的可用节点为请求提供服务。当第一个可用的节点在步骤1140答复请求时,该过程停止。在一些实施例中,节点来自相同的集群810或不同的集群140,240。
[0139]Nextrow ()
[0140]在一些实施例中,第二种读取操作,nextiOwO,用于以散列顺序读取表中所有行。这典型地用于映射作业任务,其为表中每一行进行计算。例如在映射作业(下述部分将描述)中,NextrowO静静地从网络上的调用变为从本地磁盘读取的调用,这是更有效的过程。在一些实施例中,与映射作业和非映射作业相同的代码可以用于NextrowO操作,其使测试和调试变得很容易。但是,映射作业的版本在大量数据上运行更快。
[0141]在一些实施例中,在存储器中保留表中一些密钥(不是散列密钥)和/或一些列的索引。当nextrowingO有效地访问一定范围的密钥或列的值时,使用该索引。
[0142]修复
[0143]图12是根据一些实施例的在分布式数据库中自我修复和管理存储桶的过程的流程图。集群810的每个节点812包括修复守护进程,其在当一个节点增加至集群810时开始被调用。修复守护进程在不利用主机节点的情况下,利用蜂群算法来调整。修复守护进程是容错基础结构的一部分,并修复来自故障主机,故障磁盘,以及破坏的存储桶的损害。该修复守护进程也通过将具有太多存储桶的节点上的存储桶移动至具有很少存储桶的节点,来帮助平衡负荷。例如,可以通过修复守护进程给开始没有存储桶的新节点一些存储桶。
[0144]在步骤1210,利用下述信息,例如每个节点812的磁盘数,CPU (中央处理单元)功率,磁盘使用,等等,修复守护进程计算每个节点存储桶的目标数。利用全球可用的信息,由每个节点为每个节点计算这些目标。例如,如果一个节点故障,那么剩余节点的存储桶的目标将稍微增加。如果增加了新节点,那么它将接收恰当的目标,所有其他节点的目标将稍下降。在一些实施例中,每个节点812利用相同的数据,以计算这些目标,因此,大多数节点812在大多数时间将计算出相同的目标目的。然后利用目标数确定是否重新组织或重新分配存储桶和存储桶的大小。在步骤1215,修复守护进程查找应当无条件被复制的存储桶。例如,如果存储桶在相同的网架或者具有三个以下的副本的存储桶内被复制,那么存储桶要无条件被复制。例如,存储桶的少于三个的副本发起节点请求以制造存储桶的副本。在一些实施例中,该计数不包括已经被标记为“主机丢弃”或“主机故障”的存储桶或节点。标记为主机丢弃和主机故障的存储桶由人工设定管理条件,从而一旦移除它们的存储桶同时该移除不引起这些“故障”存储桶的数目小于三个副本的警告,就停止使用主机,。修复守护进程识别需要被复制的存储桶,在1220,选择具有可用存储桶空间的节点。在一些实施例中,在存储桶的另一副本不在的位置,选择可用的存储桶空间,使得没有两个存储桶位于相同的节点812上。在步骤1230,从下述节点复制存储桶,其中该节点被识别为具有要拷贝的存储桶,以确保存储桶的三个有效副本被存储。
[0145]在一些实施例中,如果没有要制作的无条件副本,那么在步骤1235,修复守护进程会考虑从看起来过载的节点复制存储桶。基于将存储桶的目标数和当前主机上存储桶的实际数的比较,选择过载节点。节点812具有的实际存储桶比目标数要多,则其是过载的?’节点812具有的实际存储桶比目标数要少,则是欠载的。在步骤1235,如果过载节点被识别,那么在步骤1240选择过载节点。在步骤1250,选择位于过载节点的存储桶进行复制。从过载节点选择一个或多个存储桶。由于典型地每个存储桶具有多个副本可以用于拷贝,因此修复守护进程基于下述因素,例如该节点当前参与多少拷贝或者在写入时存储桶落后多少等等,挑选从哪个节点拷贝。在步骤1260,从包含选择的存储桶的副本的某节点复制位于过载节点上的一个或多个存储桶的拷贝。在一些实施例中,重复卸载过载的节点直到所有过载节点被服务。
[0146]在一些实施例中,在步骤1265,当具有四个或以上相同存储桶的副本时,修复守护进程也考虑丢弃存储桶。在一些实施例中,如果没有多余的存储桶,那么在步骤1270,完成修复守护进程。在一些实施例中,每个节点的修复守护进程利用相同的输入数据,完成相同的计算以识别多余的存储桶,以至于具有存储桶的所有节点都知道哪个节点最好丢弃多余存储桶。在步骤1280,在确定哪个节点应当丢弃多余存储桶时,例如,修复守护进程会考虑在特殊节点存储桶或存储桶的更新是否落后,存储桶是否在相同的网架内复制,或者节点是否过载。一旦识别出节点,在步骤1290丢弃多余的存储桶。在一些实施例中,如果多于一个的节点具有多余的存储桶,那么重复丢弃多余存储桶的过程。
[0147]删除
[0148]图13A是根据一些实施例,用于示意蜂群系统1300如何删除文件的框图。在一些实施例中,节点,例如图3和5的352,552通过减轻本地操作系统1320的某些很长操作,能够实现快速运行,例如从磁盘空间读取数据行,其中该很长的操作不能被中断,例如向磁盘写入数据行或者删除很大的文件。在一些实施例中,蜂群系统352,552通过将一些操作简化为操作系统1320更容易领会的碎片,来防止本地的操作系统1320进行很长的操作。取代利用本地操作系统1320的传统的删除功能1350,该删除功能对于多个千兆的字节文件来说需要花费许多秒,而蜂群系统1300将需要删除的文件移至垃圾目录1312,垃圾目录在各个节点有指定的空间。后来,`垃圾守护进程1310运行,并缓慢的将一个或多个较大的删除文件切割为越来越小的文件碎片1340,删除过程称为有礼貌地解除链接(polite_unlink)。有礼貌地解除链接操作是用户级别的功能,其打开文件,并实质上将删除操作分为小块,使得删除操作不独占磁盘使用很长时间。当已经减小一个或多个删除文件时,本地操作系统利用其传统的删除功能1350更快地删除较小的文件碎片1340,以移除文件1330。垃圾守护进程1320管理大多数文件的删除。在一些实施例中,大文件1330重新命名为垃圾目录1312,然后垃圾守护进程1310运行,有礼貌地解除和其链接,而不是本地操作系统1320。因此,利用垃圾守护进程1310删除文件会减轻本地操作系统1320的压力,以允许,例如在蜂群系统1300中,为了更快的响应时间,从其他过程(例如,响应于用户网络搜索)更快速的完成读取。
[0149]映射作业
[0150]图13B示意了根据一些实施例的系统1301中服务两个节点1313,1315的并行映射作业的过程。映射作业是并行程序,通过将工作分解为“分片(shard)” 1323,1325来处理完整的表,以改善执行时间,从而有效运行。每个分片1323,1325从本地磁盘,示出为存储桶1317,1319,读取恰当的表的碎片。例如,数据库系统1301上的映射作业具有至少两个分片1323,1325。在示例中,分片21323在节点11313上运行,直接从本地磁盘读取存储桶21315a的内容。分片31325在节点21315上运行,直接从本地磁盘读取存储桶31317b的内容。映射作业通常通过在数据库中设置数据,或者向主过程返回数据,从而产生应答。大多数完成类似工作的其他系统称为“映射化简”,这是由于它们通过向主过程返回数据,而只有这一种方式返回应答。但是,映射作业允许多种方式返回应答。映射作业的立即写入数据库的能力意味着映射作业的部分结果可以立即用于读取器,并且任何化简(表示为组合算符)能够与映射计算一起重叠计算。
[0151]在一些实施例,映射作业利用组合算符,而不是明确的化简阶段,来完成化简,其中组合算符将在下一部分描述。组合算符是远程基本操作,在其他用途中,组合算符可以用于从许多节点获得数据并将其组合为一个应答。例如,映射作业中的“增加”组合算符可以用于计算在表的所有行中单个列的和。可以完成这些组合算符“化简”以向调用者返回数据或者在数据库中设定数据。映射作业可作为上述的映射作业被计算,或者作为替换,在一段时间内进入的数据流被计算,例如,网页被爬取。
[0152]映射作业对于数据库,而不是呼叫者完成化简的另一个有趣的方面是化简的工作量可以分散在映射作业的整个过程,而不是集中在最后。这产生了更好的性能。另外,映射作业是蜂群系统350,500的另一容错的方面。如果磁盘或节点的故障引起了分片,例如分片1323,1325不能完成,那么,映射作业的“分片”将在保护恰当的存储桶的不同的节点上
重新运行。
[0153]D.组合算符
[0154]概述
[0155]图14A根据一些实施例,列出了几个组合算符的工具1408,其可以作为应用1838存储在图18的存储器1822中。该组合算符1408将在后续部分进一步详细描述。这些组合算符1408可以用在各种数据库和搜索操作中,并会在各个部分详细描述。组合算符1408可以包括,但不限于,下述:
[0156]记录计数(Logcount) 1422-将一组项目中独特的项目近似计数
[0157]TopN1424-将数据项排名,仅保留排名最高的N个
[0158]Set O 1426-将最后的值视为应答
[0159]附加1428-将字符串附加至现有字符串的末端
[0160]Comb_Addl430-在现有的值上增加值
[0161]图14B是根据一些实施例,用于示意分布式数据库系统,例如蜂群系统350,500中节点1410的增加组合算符的框图。在一些实施例中,组合算符在蜂群系统350,500的许多不同级别组合任务,这减少了网络上传送和写入磁盘的数据量。例如,考虑图14B中示意的“增加”组合算符。对于给定数量的请求,其中该请求为在节点31410的磁盘1412存储的行中增加值,那么第一过程1438 (Pl)的第一请求代表向磁盘1412的行中增加+1。另一过程1442代表另一增加+1。因此,在某些级别(这里是节点N11432),这些增加组合为一个组合操作,即增加+2。由请求处理器,例如节点31410的存储桶守护进程1414接收求和的请求。在一些实施例中,从单个过程,例如P31458和P41462所示,接收对于磁盘1412中行的多于以上的增加。过程P31458具有增加+3,过程P41462具有增加+4。因此,由节点N21452接收的请求之和等于增加+7。因此,增加请求可以来自不同的位置(例如,N1,N2),但是可以由存储桶守护进程1414组合。因此,存储桶守护进程1414对于磁盘1412中存储的行的值,接收总共增加+9。将操作组合会减少更新值所需的资源。
[0162]三个存储桶复制中的组合算符
[0163]图15是根据一些实施例,用于示意在分布式数据库系统,例如蜂群系统500中,用于写入三个存储桶复制(在节点1510a-c)的组合算符的框图。节点11530中的过程1538包括两个写入请求,即增加表的给定行和列,以发送至写入守护进程1532,该进程可以成功找到相同表中的相同行和列的更多增加,并组合它fl]。节点11530中的过程P21542也包括在相同行增加+3。因此,写入守护进程1532中总的增加是增加+5。类似地,过程P31558具有增加+2,过程P41562包括在相同行的增加+4。因此,节点21550的写入守护进程1552接收增加+6。这些增加被发送至若干远程的存储桶守护进程1514,1518,1520(每个副本一个),其依次组合存储器中更多的操作,直到将数据写入磁盘。在各自三个节点1510a-c的存储桶守护进程1514,1518,1520接收该增加。因此,每个存储桶守护进程1514,1518,1520向各个Inc文件1504,1506, 1508写入总共增加+11。
[0164]由于所有这些组合算符,在集群中对于表中相同列和行的上百万增加操作可能仅产生几个或者一个磁盘处理。
[0165]组合算符可以以几种方式存储在数据库中。一种方式是将组合算符存储为数据库的行中的列。其他方式是将组合算符嵌入在复杂的数据结构中,例如Perl散列或Python字典,其存储在数据库的行中的列。这是特殊的组合算符,comb_hash,其是包含其他组合算符,例如 comb_add 或 comb_logcount 的 Perl 散列或 Python 字典。
[0166]组合算符也作为普通变量的对象存在,即它们可以是Perl或Python变量。
[0167]由特殊的组合算符,comb_delete代表删除的值,其作用有点类似Casandra中的
“苗 T=T ”
基7h ο
[0168]在一些实施例中,记录产生组合算符的时间,该时间用于确定当情况出现时,选择哪个值,例如对相同值进行的2个comb_set,或I个comb_set和一个comb_delete,或一系列comb_add和一个comb_set。这有助于组合算符计算的决定方法。例如,如果被组合的操作是在 11:00am, comb_set 为零,在 10:35am, comb_add 为 +1,然后结果将是在 11am, comb_set为零。
[0169]在一些实施例中,利用协议,例如NTP(网络时间协议),认真同步集群中节点的时钟,用以有助于前述段落中所述的过程。
[0170]Set O 操作
[0171]除了增加之外,在我们的系统中,已经对非常大量的操作实现了组合算符的使用。一种使用是“setO”。set O组合算符1426将最后的值视为应答。因为set()可以作为组合算符写入,因此,它使用了系统中所有可用的组合算符的基础结构。在大多数数据库中,如果100个节点上的10个过程将1000个不同的值设定到特殊表的给定行和列,那么将从节点向数据库服务器进行1000个RPC调用,每个调用产生一个处理记录的写入。相反,节点1530,1550上的写入器守护进程1532,1552可以将10个本地的set操作组合为一个,节点1510a-c上的存储桶守护进程1514,1518,1520可以将100个进入的set O操作组合为一个set O,产生一个磁盘处理,其中该节点1510a_c具有该存储桶的副本。这产生高很多的性能。
[0172]在一些实施例中,在某些情况下组合算符1408可以和不同的组合算符1408组合,例如,单元可以在set和增加组合算符1426,1430上运行。如果两个组合算符是连带的,例如 comb (comb (a, b), c) =comb (a, (comb (b, c)),然后,组合算符可以一起使用。
[0173]TopN
[0174]图16A是根据一些实施例,用于示意TopN排名1603的数据结构的图示。如图16A所示,送入TopN1603的单个项目是(名称,排名,备注)的元组,其中“名称”是标量(字符串,数值等等),“排名”是数值(越大越好),“备注”是任意的数据结构,可选择地用于记录有关“姓名”的附加信息。N的值设定了 TopN1603的存储器使用的界限。TopN1603的示例性使用包括:记忆N个最重要(最高排名)的涉及单词“Obama”的网页,或者记忆涉及单词“Obama”的爬取的最新的N个网页。在该示例中,“网页”的排名是网页被爬取的时间。越大的时间值指示越近的爬取。
[0175]记录计数(Logcount)
[0176]图16B-16C示意了根据一些实施例的,在分布式数据库系统,例如蜂群系统350,500中来自记录计数组合算符1422和过程1601的记录计数结构1600的各种实施例。记录计数1422解决下述问题,即利用少量的存储器,获得一组项目中的独特项目的近似计数。例如,记录计数1422可以用于计数导入网站的链接的数量。可能具有O或I个该导入链接,或者诸如yahoo, com的网站具有上百万个导入链接。理想的是在不必存储它们全部的情况下,计数这些链接 。通过仅计数独特的导入链接,数据可以重复的重新处理,而仍保持对独特的导入链接的精确计数。
[0177]通过称为“布隆过滤器”的技术典型地解决了对独特的项目,例如访问的网站进行计数的问题,当其被提供数十亿的项目时,其需要存储上百万字节以给出精确的答案。但是,记录计数1422是使用了少得多的存储器,但精度稍差的方法。在一个实施例中,仅利用16个字节的存储,对数十亿的独特项目进行计数,其精度大约是+-50%。该很小的存储使得可以利用少的资源对单独的多种数据进行记录计数,其比利用布隆过滤器仅对一种数据进行唯一计数使用的资源少。另外,记录计数1422可以用于两个映射作业并且是递增的。
[0178]图16C中示意的过程1601是一个示例,其中记录计数1422可以用于计数一组M个输入值vl,v2,…vM。在步骤1630,每个输入值被散列为散列值hi,h2…hM。记录计数算法使用了 N个中间数据il,i2,…,iN。在计数任何项目之前,il…iN是零。在步骤1635,为了计数第一个散列值hi,散列值hi被分为N个部分hlb-hlN。在一些实施例中,散列hi包含128位,如果N=4,那么,每个部分是32位。该实施例中的中间值il…iN每个也是32位,因此,该实施例中由记录计数所需的总中间存储是128位。
[0179]在步骤1640,对于第一个散列值的每个部分1ι1_Ρ..1ι1_Ν来说,找到了最低的位组。例如,如果hl_l=6,或者二进制0110,则最低的位组是第二位。在步骤1645,在第一个中间值il设定相同的位。对于散列值hi的N个部分中的每一个来说,重复步骤1640和1645。最终,对于每个散列值h2,h3?",hM来说,重复从1635开始的步骤直到计数所有散列值。
[0180]为了在给定中间值ib-1N的情况下计算输出计数C,在步骤1660计算记录变量k。为了计算k,要找到每个中间值iP"iN中的最低未设定位。例如,如果il=0111011111,则最低未设定位是6。在步骤1664,对于所有iL...iN,将最低未设定位的值一起求平均。
[0181]然后在步骤1665由方程C=2~ (k_l)确定最终输出值。
[0182]在数学上理解该算法的关键是iL...iN中较大的位,比较小的位更少可能被设定。记录计数1422与在靶面上投掷飞镖类似,如图16B1610-1620所示,其中取代相似大小的目标,每个框是其前面框的1/2大小。在一半的时间中,飞镖将击中最大的框1610,很小的一部分时间中,飞镖将击中一个很小的框1620。在几次投掷之后,所有大的框1610-1616已经被击中,但是还有很小的框1620没有被击中。没有被击中的框越小,则计数越大。该方法仅是对计数的近似,计数的误差可能会相当大。但是,为了更精确地计数C,维持N个单独的靶面il-1N,并且将它们的计数平均。
[0183]相反,继续以靶面模拟,布隆过滤器像具有相等大小的框的靶面。因此,框的数量会非常大以计数大量的飞镖,这比记录计数1422使用了更多的存储。
[0184]最终,注意,如果再次计数散列值hl,则将在已经设置的iP"iN中设置位,导致计数没有增加。
[0185]在一些实施例中,为了使得记录计数更精确,N可以增加,iI...iN的大小可以增加至64位或更多。例如,可以产生称为记录计数64的变形,其中N=64,iP"iN的大小为32位。能够为非常小的计数提供更高精度的变形算法,通过将密钥本身(或它们的散列)存储于通常用于记录il…iN的存储字节,来为非常小的计数记录精确的应答。一个标志指示其什么时候完成。如果计数增加至没有更多存储剩余的点,那么算法切换至利用正常的记录计数。
[0186]如前所述,记录计数被表述为二次幂,因此,所有操作很容易表述为二进制算术,其是非常快的。在一些实施例中,另一种变形是使用不同于1/2的因数来确定在ib-1N中设定哪个位。这可以认为将图16B中的框1610-1620减小尺寸,但减小因数不是1/2。例如,因数9/10需要iL...iN的大小`增加到能够存储40亿个独特的密钥,但是该计数更加精确。
[0187]在一些实施例中,实施附加的变形,例如,其中给定位的估算器(计数)的精度取决于任意的指数式衰减€。由于记录计数1422具有能够相当精确地估计独特字符串的数量的能力,因此,其是非常有用的工具。但是,记录计数1422受到其可以计数的最大数的限制。例如,最大的记录计数值232通常用于快速的结果,并由于普遍使用32位而被选择。但是,在40亿次或更多次计数之后,这个大小的记录计数不再有用。记录计数1422也受限于大小/精度的折衷。可以发现,32字节的存储容量允许记录计数1422存储精度在+/-50%范围内的数字(计数)。但是,如上所述,一些变形可能包括需要更高或更低精度的系统。为了允许更高的灵活性,构造记录计数1422,其中给定位的概率不再是50%,而是任意的指数式衰减。这将使记录计数的估计变得复杂(最初通过位模式中的“洞”,其中这些“洞”不仅可能存在和承载有用的信息),但是允许以每个估算器为基础,平衡最大计数和大小/精度的折衷,这将在后面部分中描述。
[0188]在一些实施例中,记录计数1422可以通过对指数式衰减因数C (上述引入的)设置要求,来进行修改。作为另一记录计数变形,首先需要良好的消化(散列)功能,其中d(string)一>[0,1)。给定C,在位矢量中设定位,定义如下:
[0189]
【权利要求】
1.一种请求在网络浏览器中显示的搜索查询的方法,包括: 在与数据库通信的服务器中, 接收一个或多个搜索词和从多个斜线运算符中选择的斜线运算符;并 基于所述一个或多个搜索词和斜线运算符产生搜索结果。
2.如权利要求1所述的方法,其中产生搜索结果包括基于一个或多个搜索词提供组织内容的搜索结果列表,其中所述一个或多个搜索词位于由斜线运算符确定的一个分类中。
3.如权利要求1所述的方法,其中所述多个斜线运算符包括主流运算符。
4.如权利要求1所述的方法,其中所述多个斜线运算符包括内容运算符。
5.如权利要求1所述的方法,其中所述多个斜线运算符包括小方面运算符。
6.如权利要求1所述的方法,其中所述多个斜线运算符包括统一资源定位器(URL)运算符。
7.如权利要求1所述的方法,其中所述多个斜线运算符包括列表运算符。
8.如权利要求1所述的方法,进一步包括当产生搜索结果时,使用预交叉公共过滤器。
9.一种用于搜索数据库的系统,包括: 与至少一个数据库和网络通信的至少一个服务器; 所述至少一个服务器配置成: 通过网络从用户接收至少一个搜索词和斜线运算符; 基于搜索词和斜线运算符搜索所述至少一个数据库; 使得显示给用户的搜索结果包括基于搜索词和斜线运算符的搜索结果。
10.如权利要求9所述的系统,其中,斜线运算符是主流运算符、内容运算符、小方面运算符、URL运算符和列表运算符中的至少一个。
11.如权利要求9所述的系统,其中,服务器使用斜线运算符来限制仅基于搜索词返回的搜索结果。
12.如权利要求9所述的系统,其中,服务器还配置成使得建议的斜线运算符显示给用户。
13.如权利要求10所述的系统,其中,服务器还配置成允许用户输入列表运算符的建议。
14.如权利要求10所述的系统,其中,服务器还配置成向用户建议流行的搜索运算符作为主流运算符。
15.一种通过服务器搜索数据库的方法,包括: 在计算机网络中, 在服务器接收至少一个搜索词和至少一个斜线运算符; 使用接收的至少一个搜索词和接收的至少一个斜线运算符搜索数据库; 使得显示从数据库搜索返回的搜索结果; 其中,服务器使用斜线运算符来限制搜索结果。
【文档编号】G06F17/30GK103488681SQ201310357201
【公开日】2014年1月1日 申请日期:2010年6月21日 优先权日:2009年6月19日
【发明者】布林·罗伯特·多尔, 格雷戈里·B·林达尔, 迈克尔·马克森, 基思·彼得斯, 罗伯特·迈克尔·萨利巴, 里奇·斯科伦塔, 罗伯特·N·图尔, 克利须那·斯里尼瓦桑 申请人:布雷克公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1