首页 / 专利库 / 专利权 / 共同代表 / 可扩展的集群数据库

可扩展的集群数据库

阅读:87发布:2022-11-29

专利汇可以提供可扩展的集群数据库专利检索,专利查询,专利分析的服务。并且管理 数据库 系统的方法包括 搜索引擎 。该数据库系统从数据库系统中的一个或多个 节点 接收N个 请求 。在开始操作之前组合该N个请求,以处理请求。减少处理请求的操作的数量,并执行减少了数量的操作。该搜索引擎包括利用了蜂群 算法 的分散的蜂群系统。该N个请求包括N个增加请求,以向存储在数据库系统中的行增加一个值。组合N个请求包括将增加请求组合到数据库系统中存储的行;以及执行该减少了数量的操作包括执行下述操作,即对于少于N个处理中的N个增加请求,增加数据库系统中存储的行中的值。,下面是可扩展的集群数据库专利的具体信息内容。

1.一种管理数据库系统的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储由所述一个和多个处理器执行的一个或多个程序;
从所述数据库系统的一个或多个节点接收N个请求
在启动操作之前组合N个请求,以处理所述N个请求;
减少操作数量,以处理N个请求;以及
执行减少了数量的操作,以处理N个请求。
2.如权利要求1所述的方法,其中所述数据库系统包括搜索引擎
3.如权利要求2所述的方法,其中所述搜索引擎包括利用了一个或多个蜂群算法的分散的蜂群系统。
4.如权利要求1所述的方法,其中
所述N个请求包括N个增加请求,以增加在数据库系统中存储的行的值;
在启动操作之前组合所述N个请求,以处理所述N个请求包括组合对数据库系统中存储的行的值的N个增加请求;以及
执行减少了数量的操作包括在少于N个交易中对N个增加请求向数据库系统中存储的行中的值执行增加的操作。
5.一种在管理数据库系统中利用一个或多个组合算符的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序,其中所述一个或多个程序包括设定的组合算符;
从所述数据库系统的一个或多个节点接收与N个过程对应的一组值;
在启动设定操作之前组合N个过程,以将所述值设定至数据库系统的数据库存储器中存储的表中;
减少设定操作的数量,以设定N个过程的值;以及
执行减少了数量的设定操作。
6.一种在数据库系统中计数项目的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
识别M个项目;
计数M个项目中独特的项目;
确定用于M个项目中独特项目的记录计数;
存储独特项目的记录计数。
7.如权利要求6所述的方法,其中确定记录计数包括:
将M个项目中每个独特的项目分为N个部分的集合,其中每个N个部分包括M个项目中独特项目的子集,其中独特项目的每个子集表述为位值;
对于M个项目的每个子集,找到N个部分中每一个的最低未设定位
对于N个部分的集合中独特项目的每个子集,设定N个中间值中的最低位;
对于N个部分的每个集合,将N个中间值的最低未设定位的值进行平均;以及将平均值作为二次幂表达的对数值进行应用。
8.如权利要求7所述的方法,其中所述N个中间值存储在数据库的存储器中,并且执行将平均值作为二次幂表达的对数值进行应用的最后步骤。
9.如权利要求6所述的方法,其中确定记录计数包括确定一组独特项目的近似计数的精度近似等于正负50%。
10.如权利要求6所述的方法,其中确定记录计数包括:
将M个项目中每个独特的项目分为N个部分的集合,其中每个N个部分包括M个项目中独特项目的子集,其中独特项目的每个子集表述为位值;对于M个项目的每个子集,找到N个部分中每一个的最低未设定位;
利用任意指数式衰减因数,选择在N个中间值中设定哪个位,
对于N个部分的每个集合来说,将N个中间值的最低未设定位的值进行平均;以及将平均值作为以与任意指数衰减因数相关的任意底数表达的对数值进行应用。
11.如权利要求6所述的方法,其中N个中间值中较大的位值相对于较小的位值,更不可能被设置。
12.如权利要求6所述的方法,其中N个部分的集合中每个N个部分包括32位,所需的总共的记录计数存储器包括128位。
13.如权利要求6所述的方法,其中M个项目包括网站的导入链接的URL。
14.如权利要求6所述的方法,其中M个项目包括具有给定签名,用于检测垃圾邮件的电子邮件的收件人。
15.如权利要求6所述的方法,其中M个项目包括具有给定签名,用于检测来自僵尸网络的垃圾邮件的电子邮件发件人的C类IP网络。
16.如权利要求6所述的方法,其中M个项目包括链接网页的网页的地理位置
17.如权利要求6所述的方法,其中M个项目包括互联网服务器的IP子网,其中该互联网服务器包含链接网页的网页。
18.一种利用一个或多个组合算符的方法,包括:
在搜索引擎,具有包含一个或多个处理器和存储器的一个或多个节点,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序,其中所述一个或多个程序包括一个或多个组合算符;
接收搜索查询;
基于与搜索查询中一个或多个搜索词相关联的一个或多个预定的标准,响应于接收的搜索查询,在搜索引擎中进行搜索,其中每个预定的标准与一个或多个组合算符相关联;以及
组合一个或多个预定的标准以产生搜索结果。
19.如权利要求18所述的方法,其中与一个或多个搜索词相关联的所述一个或多个预定的标准包括由下述构成的组的子集,其中所述组包括:
基于与搜索查询匹配的网站的质量因数,在索引中排名网站;
基于日期,在索引中排名网站;
基于与搜索查询的一个或多个词相关联的最近的网站,在索引中排名网站;
基于重要性,在索引中排名网站。
20.如权利要求18所述的方法,其中响应于接收的搜索查询在搜索引擎中进行搜索包括在具有压缩数据的一个或多个索引中识别网站。
21.如权利要求18所述的方法,其中响应于接收的搜索查询在搜索引擎中进行搜索包括在一个或多个索引中识别网站,其中所述一个或多个索引具有利用模式表压缩的数据。
22.如权利要求18所述的方法,其中响应于接收的搜索查询在搜索引擎中进行搜索包括在一个或多个索引中识别网站,其中所述一个或多个索引具有利用编号值的表来压缩的数据。
23.如权利要求18所述的方法,其中一个或多个预定标准包括与每个标准相关联的索引组合算符,构造与每个标准相关联的所述索引组合算符,用以组合与第一标准相关联的第一索引和与相应的标准相关联的一个或多个其后的索引。
24.如权利要求23所述的方法,其中与每个单独的标准相关联的索引组合算符,包括多个片段组合算符,其构造为从搜索引擎中的多个位置提取数据。
25.如权利要求24所述的方法,其中搜索引擎中多个位置包括搜索引擎的一个或多个守护进程工具。
26.如权利要求18所述的方法,其中一个或多个组合算符包括全尺寸压缩输入的头加上作为全尺寸压缩输入位的子集的输入的尾。
27.如权利要求26所述的方法,其中头数据是32字节的压缩数据,尾数据是头数据输入的4个字节的子集。
28.一种在数据库系统中增加磁盘读取和写入操作速度的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
其中所述数据库中的数据被分为一个或多个存储桶,数据的每个存储桶的至少两个副本存储在所述一个或多个节点的不同存储设备中;
确定专用于写入的存储设备的子集,同时至少保留专门用于读取的每个存储桶的一个副本;
将剩余的存储设备的至少相当一部分专门用于读取。
29.如权利要求28所述的方法,进一步包括
产生映射,所述映射识别所述一个或多个节点的所述一个或多个存储桶中的哪个用于读取,以及所述一个或多个节点的所述一个或多个存储桶中的哪个用于写入;
将所述映射分布至所述一个或多个节点;以及
在每个节点内本地利用所述映射以通知每个存储桶是否它应当读取或写入。
30.如权利要求29所述的方法,在每个预定时期之后产生替代映射,并将替代映射分配至所述一个或多个节点。
31.如权利要求30所述的方法,其中所述一个或多个节点通过各自时钟同步,当所述一个或多个节点的各自的时钟达到N秒边界时,采用所述替代映射。
32.如权利要求28所述的方法,其中指定至少一个存储桶用于写入包括,基于自从各个存储桶最后一次写入事件开始的经过时间,确定用于写入的存储桶。
33.如权利要求28所述的方法,其中指定至少一个存储桶用于写入包括:
确定从最久被写入的一个或多个节点到最近被写入的一个或多个节点的环;
确定环中一个或多个节点的每一个中哪个存储桶需要读取操作;以及
如果各自的一个或多个节点上没有存储桶需要读取操作,指定该节点从而运行一组写入操作。
34.如权利要求28所述的方法,其中指定至少一个存储桶用于写入包括:
将所述一个或多个存储桶组织为多个存储区;以及
旋转只写操作通过所述多个存储区中的每一个,其中包含数据的至少两个复制中的一个复制的所述多个存储区中的至少一个被指定只读操作。
35.一种管理数据库系统的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
在多个节点的第一个节点与多个节点的第二个节点通信一个或多个任务,其中第一个节点和第二个节点都不是主机节点;以及
由第二节点响应一个或多个任务。
36.如权利要求35所述的方法,其中所述一个或多个节点被组织为至少两个集群。
37.如权利要求36所述的方法,其中组织为至少两个集群包括所述一个或多个节点的虚拟组织。
38.如权利要求36所述的方法,其中所述至少两个集群跨越不同的地理位置。
39.如权利要求36所述的方法,其中所述至少两个集群位于相同的地理位置。
40.如权利要求35所述的方法,其中通信包括局域网。
41.如权利要求35所述的方法,其中通信包括广域网。
42.如权利要求35所述的方法,其中所述通信包括无线通信。
43.一种管理数据库系统的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
在所述一个或多个节点的子集之间通信以共同做出数据库系统的决定,而没有来自主机节点的指示;以及
响应于由所述一个或多个节点的子集做出的决定,执行一个或多个动作。
44.如权利要求43所述的方法,其中在所述一个或多个节点的子集之间通信包括在每个节点接收写入指令,并在接收到读取请求时对所述读取请求作出响应。
45.如权利要求43所述的方法,其中在所述一个或多个节点的子集之间通信包括在所述一个或多个节点的子集之间通信状态报告,以在由下述构成的组的子集上报告,其中所述组由文件数,文件类型,接收新文件的可用性,以及修复项目构成。
46.如权利要求43所述的方法,其中在所述一个或多个节点的子集之间通信包括通信映射信息,其中所述映射信息识别各个节点中行的位置。
47.如权利要求46所述的方法,其中在一个节点从节点的子集中的其他节点收听到位于每个节点的存储桶的位置之后,通信映射信息。
48.如权利要求43所述的方法,进一步包括向节点的子集增加新节点,其中新节点通信从节点的子集中的其他节点接受文件和任务的可用性。
49.如权利要求48所述的方法,其中所述新节点向其他节点通信作为广播协议的零配置,指示其是节点的子集中的新节点,其中零配置不是结构文件。
50.一种管理数据库系统的方法,包括:
在具有一个或多个节点的蜂群数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
在两个或更多不同的存储桶中复制数据,其中所述不同的存储桶包括各个节点上的存储元件,其中没有两个相同的存储桶副本位于所述一个或多个节点中相同节点上;以及将与位于各个节点的副本有关的服务信息通信给所述一个或多个节点中的其他节点。
51.如权利要求50所述的方法,其中复制数据包括在位于所述一个或多个节点中的一个节点的表的行上,写入数据的拷贝。
52.如权利要求51所述的方法,进一步包括将所述一个或多个节点分组为多个物理网架,其中每个物理网架包括所述一个或多个节点的子集,其中数据的单个副本位于一个物理网架。
53.如权利要求51所述的方法,进一步包括将所述一个或多个节点分组为多个逻辑网架,其中每个逻辑网架包括所述一个或多个节点的子集,其中数据的单个副本位于一个逻辑网架。
54.如权利要求52所述的方法,进一步包括将所述多个物理网架分组为至少两个存储区,其中每个存储区包括物理网架的子集,其中数据的单个副本位于所述至少两个存储区的单个存储区中。
55.如权利要求50所述的方法,其中在至少三个不同的存储桶中复制数据包括在彼此相邻的至少三个不同的存储桶中复制数据。
56.如权利要求50所述的方法,进一步包括:
检测具有包括数据的副本的存储桶的故障节点上的错误;
与除了故障节点之外的具有包括数据的副本的存储桶的可用节点通信服务信息;以及绕过故障节点。
57.如权利要求56所述的方法,进一步包括调用修复守护进程,其中所述修复守护进程诊断故障节点的问题,并确定修复动作以修复故障节点。
58.如权利要求57所述的方法,其中所述修复守护进程确定是在另一个可用的节点上复制数据还是在故障节点上替换数据。
59.如权利要求50所述的方法,进一步包括:
利用散列函数,将数据映射至至少三个不同的存储桶,其中散列函数产生多个标识符,所述多个标识符映射至所述一个或多个节点中每个节点的表中;以及
通过每个节点在本地保持和更新表。
60.如权利要求59所述的方法,其中标识符包括由下述组成的组中的标识符的子集,其中所述组由密钥值对,行密钥,位置码,存储桶的名称,以及一致的散列槽组成。
61.如权利要求59所述的方法,其中散列函数将任意大小的密钥转换为固定大小的二进制散列输出。
62.如权利要求50所述的方法,其中所述一个或多个节点包括多个存储桶,其中所述多个存储桶的大小可变。
63.如权利要求62所述的方法,其中大小可变的所述多个存储桶至少包括嵌入的存储桶的子集。
64.一种定位数据库系统中行的方法,包括:
在具有一个或多个节点的蜂群数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
散列行的行密钥;
确定散列的行密钥的前缀;
基于所述前缀,识别包含所述行的存储桶列表;
确定所述一个或多个节点中哪些节点和所述存储桶列表中识别的存储桶的存储器通信;以及
确定具有行的副本的至少一个存储桶。
65.一种在数据库系统中组织数据的方法,包括:
在具有一个或多个节点的蜂群数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
识别数据以存储在存储桶中的一个或多个表中,其中所述存储桶是所述一个或多个节点中一个节点上分割的存储器的分配;
为每个识别的数据分配标识符和多个等级级别中的数据存储等级级别;以及映射至索引并根据索引和分配的等级级别存储每个数据。
66.如权利要求65所述的方法,其中所述多个等级级别包括:
第一级别,指示存储桶上一个或多个表中最旧的数据;
第二级别,指示存储桶上一个或多个表中稍新的数据;
第三级别,指示存储桶上一个或多个表中最近的数据。
67.如权利要求65所述的方法,其中存储每个数据包括通过写入器守护进程向所述一个或多个节点中一个节点的存储桶的表中的行写入数据,并记录写入节点交易记录的写入操作。
68.如权利要求67所述的方法,其中所述写入器守护进程延迟了写入各个存储桶的操作,以收集指定给相同的各个存储桶的附加写入操作。
69.如权利要求67所述的计算机实现的方法,进一步包括从写入器守护进程接收写操作,并在预定时期内由存储桶守护进程组合存储桶的写入任务。
70.如权利要求69所述的方法,其中由存储桶守护进程收集符合预定文件大小的写入操作的时期确定所述预定时期。
71.如权利要求69所述的方法,其中存储桶守护进程将收集的写入操作中的数据写入第三等级级别;在第一个预定时期后,将存储为第三等级级别的数据合并至第二等级级别;
在第二个预定时期后,将第二等级级别的数据合并至第一等级级别。
72.如权利要求71所述的方法,进一步包括:
为存储桶上的一个或多个表指定合并限值,其中所述合并限值指示所述多个等级级别中的级别;以及
当满足合并限值级别时,通过避免将数据文件合并到下一个级别,根据指定的合并限值来限制文件合并。
73.如权利要求72所述的方法,进一步包括:
存储用于每个等级级别的行密钥的布隆过滤器;以及
查阅布隆过滤器,以确定在存储器的给定等级级别中是否找到给定行密钥。
74.如权利要求69所述的方法,其中组合存储桶的写入任务进一步包括:
计量组合的写入任务以防止写入存储设备实质上利用存储设备的所有可用的读取/写入容量。
75.一种管理数据库系统的方法,包括:
在具有一个或多个节点的蜂群数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
由第一节点和所述一个或多个节点中的至少一个节点子集通信读取数据的请求;
在至少节点的子集中由每个各自节点检查标识符,以确定要求读取的数据是否存储在各自节点中;以及
如果至少节点的子集中的各自节点包括读取数据,那么向第一节点提供读取数据。
76.如权利要求75所述的方法,进一步包括在检查各自节点的其他存储器分配之前,检查与在至少节点的子集中的每个各自节点相关联的高速缓冲存储器
77.如权利要求76所述的方法,进一步包括通过与在至少节点的子集中的每个各自节点相关联的读取器守护程序,管理一个或多个读取操作。
78.如权利要求76所述的方法,其中所述高速缓冲存储器是由RAM,服务器存储器,固态驱动上的闪存以及在周边元件扩展接口快速卡的闪存构成的组中的一个。
79.如权利要求76所述的方法,其中所述高速缓冲存储器由高速缓冲存储器守护进程管理。
80.如权利要求75所述的方法,其中通信读取数据的请求包括从至少节点的子集中各自节点的存储桶内存储的表中散列密钥的行中获取数据,并且由每个各自节点检查标识符包括将行密钥散列为标识符,以确定节点子集中其中一个节点的一个或多个存储桶中的哪一个包含请求的数据。
81.如权利要求75所述的方法,其中读取的数据在节点的子集中存储为读取的数据的多个复制,并且至少一个复制存储在节点子集的其中一个的高速缓冲存储器中。
82.如权利要求75所述的方法,其中所述节点的子集彼此通信以确定读取的数据的位置。
83.如权利要求75所述的方法,其中读取的数据存储在从最新至最久存储的数据范围内的多个等级级别中,其中通信读取数据的请求包括指示寻找读取的数据的等级级别,直到所指示的节点子集中每个节点的等级级别。
84.一种在数据库系统中处理请求的方法,包括:
在具有一个或多个节点的蜂群数据库系统处,所述一个或多个节点包括一个或多个处 器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
从所述蜂群数据库系统中的节点接收请求;
散列行密钥以确定一个或多个存储桶是否可以服务于所述请求,其中所述一个或多个存储桶代表所述一个或多个节点中各个节点上存储器的分配;
请求具有可用于服务请求的一个或多个存储桶中的一个存储桶的所述一个或多个节点中的第一节点;
如果所述第一节点不能服务于所述请求,或者将对服务于请求的响应延迟预定时间,那么请求具有可用于服务请求的一个或多个存储桶中的一个存储桶的第二节点;以及向具有可用于服务的一个或多个存储桶中一个存储桶的随后的节点发送请求,直到请求由所述一个或多个节点中的一个服务。
85.如权利要求84所述的方法,其中所述一个或多个节点分组为多个节点子集。
86.如权利要求85所述的方法,其中所述第一节点,第二节点和随后的节点在节点的相同分组中。
87.如权利要求84所述的方法,进一步包括同时请求第一节点,第二节点和随后的节点以服务于接收的请求,首先响应的节点服务于所述请求。
88.一种管理数据库系统的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
计算可用于服务请求的存储桶的目标数,其中存储桶是所述一个或多个节点中一个节点上存储器的分配;
基于计算的存储桶的目标数,确定是否重新组织或重新分配存储桶和存储桶的大小;
确定需要无条件复制的一个或多个存储桶;
将需要无条件复制的一个或多个存储桶复制到可用于服务请求的一个或多个目标存储桶;以及
确定过载的一个或多个节点或存储设备,其中具有比计算的存储桶的目标数多的存储桶而过载。
89.如权利要求88所述的方法,进一步包括:
确定多余的一个或多个存储桶,其中多余的一个或多个存储桶包括数据的额外复制以及过期的数据;以及
丢弃多余的一个或多个存储桶。
90.如权利要求89所述的方法,其中丢弃多余的一个或多个存储桶包括删除数据的额外复制和过期的数据。
91.如权利要求88所述的方法,其中所述一个或多个节点中每一个包括修复守护进程,用于为每个各自的节点计算存储桶的目标数。
92.如权利要求91所述的方法,其中所述修复守护进程构造为向各个节点提供由下述组成的组中服务子集中的服务,其中所述的组由修复来自故障主机的损害,修复来自故障磁盘的损害,修复破坏的存储桶,从具有太多存储桶的节点向具有很少存储桶的节点移动存储桶,以及向蜂群数据库系统整合新节点构成。
93.如权利要求88所述的方法,其中确定需要无条件复制的一个或多个存储桶包括确定低于数据的预定复制数量的数据的复制数。
94.一种管理数据库系统的方法,包括:
在具有一个或多个节点的蜂群数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
确定要删除的一个或多个数据文件;
移动要删除的一个或多个数据文件至垃圾目录;
通过垃圾守护进程,将要删除的一个或多个较大的数据文件截断为较小的文件碎片;
以及
通过本地操作系统,删除较小的文件碎片。
95.一种管理数据系统的方法,包括:
在具有一个或多个节点的蜂群数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
将用于服务一个或多个节点中不同节点的至少两个存储桶的一个或多个任务划分为两个或更多分片;以及
并行处理不同节点上至少两个存储桶的服务。
96.如权利要求95所述的方法,其中所述至少两个存储桶的服务包括读取操作和写入操作。
97.如权利要求95所述的方法,其中所述至少两个存储桶的服务包括以散列顺序读遍表中所有行的读取操作。
98.如权利要求95所述的方法,进一步包括通过在数据库系统中设定数据或者将数据返回至主过程,产生应答。
99.如权利要求95所述的方法,进一步包括利用一个或多个组合算符来计算将一个或多个任务划分为两个或更多分片,并且并行处理不同节点上所述至少两个存储桶的服务。
100.一种在管理数据库系统中使用一个或多个组合算符的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序,其中所述一个或多个程序包括排名组合算符;
接收一个或多个排名标准;
基于所述一个或多个排名标准,将多个项目排名,其中由预定的数值N来限制所述多个项目的数量;以及
基于预定的时间替换排名,以更新所述多个项目。
101.如权利要求100所述的方法,其中将多个项目排名包括在多个项目的排名中利用记录计数组合算符以计数和更新独特的项目。
102.如权利要求100所述的方法,其中所述多个项目中的每个项目根据标量变量名称和排名序号来排名。
103.如权利要求102所述的方法,其中所述多个项目中每个项目进一步根据额外的数据结构排名,其中所述额外的数据结构用于记录有关标量变量名称的额外的信息。
104.一种管理数据库系统的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
将多个行分割,并将多个行的独特子集分配至所述一个或多个节点的子集中的每个节点,其中所述多个行的独特子集包含未复制的行;以及
从所述多个行的独特子集本地访问未复制数据的子集,而不和所述一个或多个节点的子集中的其他节点通信。
105.一种在数据库系统中压缩数据的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
产生列的名称和类型的第一压缩表的第一版本;
产生列的名称和类型的第二压缩表的第二版本;
基于所述第一压缩表和第二压缩表,接收要压缩的数据并分析接收的数据;
选择产生最小压缩数据大小输出的压缩表的版本;以及
根据选择的压缩表压缩所述数据。
106.如权利要求105所述的方法,进一步包括产生压缩表的多个版本,其具有列的名称和类型的变形
107.如权利要求105所述的方法,其中列的名称包括包含来自被构造为进一步压缩数据中的短字符串的编号的短字符串表的编号的至少一个列的名称,其中所述编号的短字符串表包括分配至独特数值的一组短字符串数据。
108.如权利要求105所述的方法,其中列的名称包括利用了一个或多个结构列值的至少一个列的名称。
109.一种操作搜索引擎的方法,包括:
在利用了蜂群数据库系统的搜索引擎中,其中所述搜索引擎包括一个或多个处理器和存储器,存储要由一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括一个或多个组合算符;
接收N个服务任务;
在启动操作之前,组合所述N个服务任务以处理N个服务任务;
减少操作数量,以处理N个服务任务;以及
执行减少了数量的操作,以处理N个服务任务。
110.如权利要求109所述的方法,其中接收N个服务任务包括从搜索引擎用户接收搜索查询。
111.如权利要求109所述的方法,其中服务任务包括通过排名组合算符排名数据项,其中所述排名组合算符将多个数据项排名并保留所述多个数据项的前N个。
112.如权利要求109所述的方法,其中服务任务包括通过所述一个或多个组合算符保留一个或多个记录文件,所述一个或多个记录文件包括收集网页点击数的数据并产生网页的概要信息。
113.如权利要求112所述的方法,其中通过所述一个或多个组合算符保留一个或多个记录文件包括一个或多个附加组合算符,其中所述一个或多个附加组合算符将文本行附加至文本行的已有集合中。
114.如权利要求112所述的方法,其中通过所述一个或多个组合算符保留一个或多个记录文件包括一个或多个comb_add组合算符,其中所述一个或多个comb-add组合算符被构造为计数项目数并将该计数组合至已有数据。
115.如权利要求109所述的方法,其中服务任务包括利用一个或多个垃圾邮件组合算符检查垃圾邮件,其中所述一个或多个垃圾邮件组合算符基于电子邮件头和内容计算一组签名,并检查在发送至许多人的大量电子邮件中是否存在相同的签名。
116.如权利要求115所述的方法,进一步包括利用记录计数组合算符,其中所述记录计数组合算符计数许多人中已经有多少人收到了相同的签名,并当符合预定的大的计数值时,确定签名是垃圾邮件。
117.如权利要求109所述的方法,其中N个服务任务包括通过一个或多个记录计数组合算符爬取网页中的URL,其中所述记录计数组合算符对多个项目分类的独特项目进行计数。
118.如权利要求117所述的方法,其中所述多个项目分类包括由下述组成的组中的子集,其中所述组由地理位置的级别,GeoIP地址,引用域的C类IP网络,导入链接的锚文本,广告,购物网页,以及小方面构成。
119.一种在搜索引擎中运行用户界面的方法,包括:
在蜂群数据库系统包括搜索引擎,其中所述搜索引擎包括一个或多个处理器和存储器,存储要由一个或多个处理器执行的一个或多个程序,所述一个或多个程序包括一个或多个组合算符。
120.一种用于观看在网络浏览器中要显示的内容的方法,包括:
响应于接收到搜索查询,产生搜索结果;以及
通过要在网络浏览器的至少两个选项卡上显示的至少两个分类组织搜索结果,其中每个选项卡根据各个分类将搜索结果排名并列出。
121.如权利要求120所述的方法,其中所述搜索结果的每个结果项目包括双行格式,其中
第一行专门用于超链接至各个页面URL的页面URL的题目;以及
第二行专门用于由网页题目、一个或多个内容标签、一个或多个网站标签以及可选摘要组成的组中的至少一个子集。
122.如权利要求120所述的方法,其中所述一个或多个网站标签包括在网络浏览器中显示的由链接、seo、rss、高速缓冲存储器、源、ip、排名、主机排名和运算符组成的组中的至少一个子集。
123.如权利要求122所述的方法,其中seo网站标签进一步包括以和数据库系统相关的方式提供有关搜索结果项目的网站的信息。
124.如权利要求122所述的方法,其中seo网站标签在网络浏览器显示多个seo分类的子集,其中所述多个seo分类显示为各个选项卡,其中多个seo选项卡包括:
概况选项卡,显示与数据库系统相关的信息,包括最后爬取日期,页面长度,导入链接,页面排名,IP位置;
导入链接选项卡,显示在爬取中链接至特殊结果页面网站的所有页面,包括锚文本,源IP,网站的数据库排名和其他链接的页面;
导出链接选项卡,显示有关由特殊页面产生的并链接至第三方URL或主机的链接的信息;
域选项卡,提供有关域的信息;以及
区域选项卡,显示与爬取器如何在特殊的搜索结果网站页面上解析信息相关的信息。
125.一种观看要在网络浏览器中显示的内容的方法,包括:
响应于接收的搜索查询,产生搜索结果;以及
通过可选择的筛选列表组织搜索结果,其中所述筛选列表包括用于组织搜索结果的多个分类标签。
126.如权利要求125所述的方法,其中每个分类标签包括,当被选择时来自与各个分类标签相关的搜索结果的项目的子集。
127.如权利要求125所述的方法,其中所述多个分类标签包括由新闻、博客、RSS、评论、音频、视频、商店、相片、成人、本地和不喜欢组成的组的子集。
128.一种请求在网络浏览器中显示的搜索查询的方法,包括接收一个或多个搜索词和从多个斜线运算符中选择的斜线运算符,并基于所述一个或多个搜索词和斜线运算符产生搜索结果。
129.如权利要求128所述的方法,其中产生搜索结果包括基于一个或多个搜索词提供组织内容的搜索结果列表,其中所述一个或多个搜索词位于由斜线运算符确定的分类中。
130.如权利要求128所述的方法,其中所述多个斜线运算符包括主流运算符。
131.如权利要求128所述的方法,其中所述多个斜线运算符包括内容运算符。
132.如权利要求128所述的方法,其中所述多个斜线运算符包括小方面运算符。
133.如权利要求128所述的方法,其中所述多个斜线运算符包括URL运算符。
134.如权利要求128所述的方法,其中所述多个斜线运算符包括列表运算符。
135.如权利要求128所述的方法,进一步包括当产生搜索结果时,使用预交叉公共过滤器。
136.一种管理数据库系统的方法,包括:
在具有一个或多个节点的数据库系统处,所述一个或多个节点包括一个或多个处理器和存储器,所述一个或多个节点的存储器存储要由所述一个或多个处理器执行的一个或多个程序;
接收涉及一个或多个线操作的一个或多个服务任务;
利用一个或多个有限状态机完成线操作,其中所述一个或多个有限状态机被分割为N个子任务,其中N个子任务中每一个由相应的框架集合组织;以及
根据表达为相应的框架集合的所述一个或多个有限状态机,执行所述一个或多个线操作。
137.如权利要求136所述的方法,其中所述相应的框架集合进一步包括指针,其定位在需要阻断的点,直到返回结果以进行下一个子任务。

说明书全文

可扩展的集群数据库

技术领域

[0001] 本应用涉及数字计算或数据处理的领域,其包括数据结构和数据库/文件访问和管理,尤其是用于分布式数据库系统中的传播,搜索和检索数据。

背景技术

[0002] 分布式数据库系统可以用于存储和访问联网结构,例如大型集群,分布式计算系统,局域网,互联网和其他信息检索系统中的大规模数据。分布式数据库系统包括存储和处理设备,其典型地由中央数据库管理系统管理和控制。中央数据库管理系统可以存储在位于相同物理位置的多个计算机中,也可以分散在互联的计算机网络中。
[0003] 由中央数据库管理系统控制的分布式数据库系统受多种原因限制。如果主机故障,即使主机是容错的,中央主机控制管理功能的事实也会导致暂时不可用。并且,诸如网络分区的问题经常引起集群中至少一部分不可用。最后,用于主机容错的算法,例如Paxos,经常需要大量的时间从故障中恢复,在此期间,系统部分或全部不可用。具有中央主机也可能损害可扩展性。
[0004] 在大规模分布式系统中,由于异常情况,例如网络断开和电源故障,系统设备会频繁故障或失去网络连接。面对这些频繁故障,确保连续的系统可用性对于提供良好、等待时间短的操作是非常重要的。
[0005] 分布式数据库系统的另一个问题是支持高写速率的困难。即使像在具有许多网络服务器网站上计算点击次数这样简单的事情在今天看来也是个难题。由于记录文件分析非常昂贵,导致其经常不能实时完成。统计数据,例如访问网站的独特顾客的数量的产生是非常昂贵的。
[0006] 今天在应用的尤其是应答搜索查询中的分布式数据库中,存在许多问题。搜索引擎对于在大型的文档数据库中定位文档,例如万维网(WWW)上的文档,或局域网的计算机上存储的文档,提供了有的工具。响应于用户提交的搜索查询,定位文档。搜索查询由一个或多个搜索词组成。需要的是用于从数据库有效地和更智能地抽取相关信息的创新型技术。比仅仅是输入几个搜索词更智能的查询搜索引擎的能力对于今天的搜索引擎来说是更大的进步。查询结果的显示也可以使用这种改进。附图说明
[0007] 为了更好的理解本申请中所述的实施例,应当结合附图,参照下面的具体实施方式,其中在所有附图中,相似的参考标记表示对应的部分。
[0008] 图1是根据一些实施例的分布式网络系统的框图
[0009] 图2是根据一些实施例的具有多个集群的分布式数据库系统的框图;
[0010] 图3A是用于示意分布式数据库系统中主机系统的框图;
[0011] 图3B是根据一些实施例的分布式数据库系统中蜂群(swarm)系统的框图;
[0012] 图4是根据一些实施例,用于示意向蜂群系统中节点的集群增加新节点的框图;
[0013] 图5A和5B是根据一些其他实施例,用于示意分布式数据库的蜂群系统的框图;
[0014] 图5C是根据一些实施例,用于示意集群中节点网架(rack)的框图;
[0015] 图6A-6C是根据一些实施例的蜂群系统中映射和分配存储桶(bucket)的框图;
[0016] 图7A-7C是根据一些实施例的如何在分布式数据库中组织和存储数据的框图;
[0017] 图8是根据一些实施例,用于示意蜂群系统中数据交换的框图;
[0018] 图9是根据一些实施例的分布式数据库系统中获取操作的框图;
[0019] 图10是根据一些实施例的分布式数据库系统中处理获取请求流程图
[0020] 图11是根据一些其他实施例的在分布式数据库系统中处理请求的流程图;
[0021] 图12是根据一些实施例的在分布式数据库系统中修复和管理存储桶的过程的流程图;
[0022] 图13A是根据一些实施例,用于示意在蜂群系统350,500中如何删除文件的框图;
[0023] 图13B是根据一些实施例,用于示意并行映射作业过程的框图;
[0024] 图14A是根据一些实施例的组合算符(combinator)工具的集合;
[0025] 图14B是根据一些实施例,用于示意在分布式数据库系统中用于节点的加法组合算符的框图;
[0026] 图15是根据一些实施例,示意在分布式数据库系统中用于写入三个存储桶复制的组合算符的框图;
[0027] 图16A是根据一些实施例,用于示意TopN排名的数据结构的图示;
[0028] 图16B是根据一些实施例,用于示意在分布式数据库系统中概念性的记录计数(Logcount)结构和过程的图示;
[0029] 图16C是根据一些实施例的,利用记录计数对一组独特的项目进行计数的过程的流程图;
[0030] 图17A是根据一些实施例,用于示意映射数据位置的数据结构的框图;
[0031] 图17B是根据一些实施例的映射的本地化子集的框图;
[0032] 图18是根据一些实施例的服务器的框图;
[0033] 图19是根据一些实施例的,在图17的服务器中守护进程(daemon)工具的集合;
[0034] 图20是根据一些实施例的客户端计算机的框图;
[0035] 图21是根据一些实施例的搜索查询框的屏幕显示的示例;
[0036] 图22A是根据一些实施例的搜索结果的屏幕显示的示例;
[0037] 图22B-22C是根据一些实施例的在搜索结果中列出的搜索结果项目的示例;
[0038] 图23是根据一些实施例的用于搜索结果的RSS页面的屏幕显示的示例;
[0039] 图24A-24B是根据一些实施例的用于搜索结果的链接页面的屏幕显示的示例;
[0040] 图25是根据一些实施例的用于搜索结果的高速缓存页面的屏幕显示的示例;
[0041] 图26是根据一些实施例的用于搜索结果的源页面的屏幕显示的示例;
[0042] 图27是根据一些实施例的扩展的搜索结果列表的屏幕显示的示例;
[0043] 图28是根据一些实施例的用于搜索结果的SEO页面的屏幕显示的示例;
[0044] 图29A-29B是根据一些其他实施例的搜索结果的屏幕显示的示例;
[0045] 图30A-30B是根据一些其他实施例的搜索结果的屏幕显示的示例;
[0046] 图31和32是根据一些实施例的用于搜索数据库系统的可视化工具的屏幕显示的示例。

具体实施方式

[0047] 现在详细参照实施例,其示例结合附图示意。在下述的详细描述中,为了充分理解这里提供的发明主题,提出了许多特定的细节。但是对于本领域技术人员显而易见的是该主题在没有这些特定细节的情况下也可以实施。并且,通过示例提供这里描述的特殊的实施例,其不应将本发明的保护范围限制在这些特殊实施例中。在其他情况下,没有详细描述公知的数据结构、时间协议、软件操作、程序和组件,以避免不必要地混淆本发明实施例的方面。
[0048] A.结构概况
[0049] 图1是根据实施例的分布式网络系统100的框图。具有多个节点(服务器)142A-N的一个或多个集群140A-N和客户端110连接至通信网络130。
[0050] 客户端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接收的搜索结果,系统信息,和/或有关用户的信息。
[0051] 在一些实施例中,每个集群140包括用于存储,组织和访问信息的多个节点142,其中所述信息例如是从网页和互联网中提取的信息。但是,信息可以任何类型的数据或元数据,其包括但不限于,文档,文件,表格,日志,媒体文件,数字数据,等等。在一些实施例,节点142由其所属的集群140组织,但是,在其他实施例中,节点142可以成组和类别的组织和访问,该组和类别不依赖于其所属的集群140。在一些实施例中,每个集群140A-N中的节点142在每个集群140内被分类或组织为子组。每个集群140A-N可以位于单个地理位置。但是,单个集群140A可以扩展到多个地理位置,或者多个集群140A-N可以扩展到多个地理位置。因此,集群和节点的概念与节点142的物理组织相关,也与节点142的抽象或虚拟组织相关。
[0052] 在一些实施例中,节点142利用蜂群算法在离散系统中自行组织。在其他实施例中,实施蜂群算法以组织一个或多个集群140或节点142使得节点142在本地彼此交互,以及与它们的环境交互。蜂群算法允许节点142彼此通信并通过通信链路150彼此合作以在数据库环境内完成各种任务,而不依赖主机节点。
[0053] 通信网络130可以是任意有线或无线的本地局域网(LAN),城市局域网,和/或广域网(WAN),例如内部互联网,外联网,或互联网,或者它可以是这些网络的组合。由通信网络130在集群140、节点142之间,以及在集群140和客户端110之间提供通信能力是足够的。在一些实施例中,通信网络130通过传输控制协议/互联网协议(TCP/IP),使用超文本传输协议(HTTP)传送信息。HTTP允许客户端计算机通过通信网络130访问各种可用的文件。但是,本发明的各种实施例不限于使用任何特殊协议。在本说明书中使用的术语“文档”是指可以从集群140访问的任何信息或服务,其可以是,例如,网页,某种格式的文件,数据库记录,图像,计算目标,或其他信息项目。
[0054] 图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所示,本发明的各种实施例不限于任何特殊的网络系统。
[0055] B.结构级别
[0056] 蜂群vs.主机
[0057] 图3A是用于示意分布式数据库系统(未示出)中主机节点310的框图。大多集群数据库系统选择单个节点312(利用例如Paxos的系统)作为“主机”。主机节点312典型地保留了数据库中的所有文件,包括表格,控制/状态信息,映射,以及当前文件位置。主机节点312也控制全系统活动,并管理其他节点314a-e以通信指令,管理复制,请求更新,以及其他管理任务。客户端(未示出)典型地必须通过主机节点312以访问存储在其他节点314a-e的数据,或者向其他节点314a-e发送请求。主机系统310中的数据库操作非常耗时,这是因为对于节点314的每个指令都必须通过主机节点312。例如,为了发送读取(或获取)操作的指令,时间花费在,在主机节点312从客户端(未示出)接收请求后,需要将指令通过通信链接320发送至服务节点,例如节点4 314d。在请求提供至客户端之前,当节点4 314d通过通信链路324向主机节点312返回请求响应时,要花费更多的时间。另外,进一步的延迟会由于节点故障引起,在节点故障期间,读取或写入数据库必须典型地等到故障被解决或者资源重新分配以弥补故障。延迟的一部分包括主机节点312确定故障位置的时间,以及与其他节点314通信指令以弥补故障的时间。
[0058] 图3B是根据一些实施例的分布式数据库系统(未示出)中蜂群系统350的框图。通常,蜂群系统350中的蜂群算法产生许多节点352a-e彼此协作而没有主机节点例如主机节点312的环境。蜂群系统350是可扩展的集群数据库,其中该数据库的许多算法是蜂群算法。蜂群系统350中的独立节点352在不利用主机节点,例如主机节点312协调的情况下,可以做出群体决定。蜂群环境的生物示例是昆虫群。取代依赖来自主机或一些中央智能机的引导或导向,昆虫群能够以在使用其环境时优化可用的资源的方式彼此指引。群体做出决定,而不是单独地或通过组内某一单个成员做出决定。例如,蚁群利用信息素来开发它们的环境并彼此指引至资源。蜜蜂同时在多个方向飞行很长的距离寻找食物。类似地,蜂群系统350中的节点352可以展示复杂的群体行为,无论其构成的有限智力和有限协调。
蜂群系统350具有高容错性和高可用性,这部分地由于缺少主机节点,其中主机节点的故障会引起其他系统中断。
[0059] 蜂群数据库系统350实施“宽松的最终一致性”方法。这代表普通的数据库一致性的ACID模型(原子性、一致性、分离和对偶性)的一些取舍,用以提供更高的性能。对于其他具有“最终一致性”的数据库来说,在写入后立即回读数据经常产生稳定的应答,或者延迟后的新数据的最终读取。但是,蜂群数据库系统350在一定意义上是“宽松的”,使得其不能对于数据库中的一小部分数据变得一致。尽管有小部分失效,但是蜂群系统350是高性能的数据检索和管理系统,其也可以在没有显著的人为干涉的情况下自动运行。具有宽松的最终一致性的蜂群数据库系统350是恰当的用于诸如搜索引擎应用的数据库模型。
[0060] 在一些实施例中,节点352a-e中的每一个构造为具有相似的容量和功能使得没有单个节点352统治任意其他节点352。在其他实施例中,节点352构造为具有可变的容量,不过,蜂群350中的每个节点352具有相等的功能。在一些实施例中,节点352通过通信链路354,356彼此直接通信。每个节点352能够和蜂群350中的任意一个节点352通信。每个节点352能够接收写入指令,并当从例如客户端(未示出)接收读取请求时,能够响应该请求。在一些实施例中,节点352彼此通过通信链路354,356发送状态报告以报告文件数量,文件类型,接收新文件的可行性,修补项目以及其他与群体组相关的状况。因此,蜂群
350群体地获知每个文件的位置,以响应读取请求,以及获知每个节点352的可用性以确定节点352中的哪个可以接收写入请求。
[0061] 蜂群操作:映射
[0062] 在一些实施例中,通过所有已知节点352经由通信链路354,356进行一系列一对一的数据交换来分配映射信息,识别在各个节点352中所有行的位置。交换的映射数据包括位于每个节点352的存储桶。在节点352从其他所有节点接听后,节点352具有完整的可以找到任意行的映射。
[0063] 蜂群操作:增加节点
[0064] 图4是根据一些实施例,用于示意增加至蜂群小区400中集群节点412的新节点416的结构框图。在一些实施例中,通信链路150,354,356是标准的以太网广播,其在蜂群小区400的有线以太网上传播。在其他实施例中,通信链路150,354,356可以是任意无线通信,例如无线LAN,其他RF通信,或任意前述的通信方法。节点412a-n通过广播420交流它们各自的状态信息。广播420可以遵循任意数量的通信协议。例如,广播420可以是短距离的广播协议,其用于查找局域网系统中的设备。但是,本发明的各种实施例不限于适用于任何特殊的通信链路或任意类型的协议。
[0065] 当新节点416增加至蜂群小区400时,广播420用于定位新节点416。新节点416通过广播422宣告“我在这里”,指示其已经加入蜂群小区400。节点412a-n通过广播420确认接收宣告,新节点416准备好接收蜂群小区400的工作。广播机制允许所有节点412通过单个网络包的传输发现新节点416。用于接收增加至小区的新节点,例如节点416的广播协议,不需要向新节点416装载列出了所有节点的配置文件。因此,配置增加至小区400的任意新节点所需的仅是该广播协议,即“零配置”。另外,零配置协议不需要为小区400中的所有节点412更新或分配更新的配置文件。因此,节点412,416不受下述发生在配置文件中的一般错误的影响,其中该一般错误例如为编码错误,上载延迟,运行和保留配置文件,以及剩余有效节点未使用。
[0066] 由于在没有配置文件和附加编码的情况下,多个新节点,例如节点416可以增加至小区400,因此,蜂群小区400的群体特征允许更大的可扩展性。由于在最小人为干涉(例如工程师和技工)的情况下,设备可以并入蜂群小区400,因此,当增加更多节点时,蜂群小区400允许均匀安装。蜂群小区400也被配置为处理更大的容错以处理节点故障,并恰当地具有下述部分描述的复制和修复协议。因此,尽管存在常规故障,蜂群小区400中的节点412可以更连续和可靠的运行。
[0067] 蜂群操作:数据复制
[0068] 图5A和5B是根据一些其他实施例,用于示意分布式数据库的蜂群系统500的框图。在一些实施例中,蜂群系统500包括复制协议,用于将任何信息(例如,接收或产生的信息)复制到至少三个不同的位置,其中每个位置称为“存储桶”。每当表格的一行被写入或更新时,其被写入或更新至所有恰当的存储桶的副本。系统500中每个表都有其应当具有多少副本的目标。在写入时,写入这些表中的行被发送至所有副本。这个目标可以随时改变,如果需要的话,守护进程会处理制作行的额外拷贝。例如,在蜂群系统500a中,第一个数据复制R1被拷贝到节点1 552a,第二个数据复制R2被拷贝到节点3 552c,第三个数据复制R3被拷贝到节点2 552b。在一些实施例中,当接收信息时,自动发生信息复制。在其他实施例中,当符合某种参数或条件时,发生信息复制。在一些实施例中蜂群系统500具有恰当的协议或分配的守护进程,以检查和保持副本R1-R3,以至于在所有时间,有效的、可利用的信息复制是可用的。可以理解的是,节点552a-e能够如通信链路554,556所示的彼此直接通信。每个节点552能够与蜂群500a中的任何一个节点552通信信息,以及从任何一个节点552接收信息。但是,为了简单起见,没有示出所有可能的通信链路。例如,虽然未示出,节点1 552a可以从节点5 552e接收信息和发送信息至节点5 552e,节点3 552c可以从节点4 552d接收信息和发送信息至节点4 552d。
[0069] 在一些实施例中,节点552中的每一个被分割为存储元素或“存储桶”,由节点552中每一个存储和保留的表映射该分割。在一些实施例中,存储桶的分配是指节点552中每一个的行空间的分割。在其他实施例中,存储桶的分配是多个节点552的物理空间概念上的分割。蜂群系统500中的存储桶的位置使得没有两个相同的存储桶的副本位于相同的节点552上。如前所述,集群140,240通常可以是一组概念上的设备,但是不总对应于节点142,242,552(例如,服务器或其他存储设备)的物理分组。该存储桶(其复制三次)存储在三个不同的节点552a,552b,552c。该定位使得每个节点至多具有一个特殊存储桶的副本。这允计在不影响任何信息的两个以上副本的情况下,在节点552上每次执行一个系统管理任务(例如重启动)。
[0070] 图5C是根据一些实施例,用于示意集群570中节点580-584的网架572-576的框图。在一些实施例中,节点580-584被分组,称为网架572-576,其将节点580-584的物理位置对应于物理网架,或不对应(例如,网架的逻辑组织,虚拟节点的组织,等等)。存储桶的副本,例如将存储桶B放置在节点580a,582c,584a,使得存储桶B仅有一个副本落在网架572-576中。这允许每次在集群570的一个网架上执行系统管理任务,且确保任意数据的两个副本可用。
[0071] 在一些实施例中,一组节点对应于一个以上的物理网架,这称为“存储区(zone)”。换言之,与单个网架相关联的节点也可以和存储区关联,该存储区包括属于其他物理网架的其他节点。存储区对于将节点分组来说很方便,其使得用于一个以上物理网架的物理组件的故障仅引起每个存储桶的至多一个副本损失。例如,在一些情况下,单个网络交换机服务于3个网架。实际上,为了使得每次完成的系统管理工作量最大,可以使用目标复制等级
3将数据库的节点组织为4个存储区。可以理解,一个存储区可以替换为多个逻辑网架的分组。
[0072] 在一些实施例中,蜂群系统500可以复制信息多于或少于三次,信息的复制次数取决于,但不限于,系统设计,容量,设备类型,或者其他因素。换言之,每个存储桶可以有三个以上或以下的副本。蜂群系统500允许节点552读取数据,或将存储桶复制到新节点552,而不考虑网络拓扑。节点552可以从相邻节点552读取或复制到相邻节点552。在一些实施例中,4-副本集群140,240取代3-副本集群140,240是可能的,其中两个副本的每一个都位于两个不同的位置。
[0073] 在一些实施例中,当单个集群,例如集群140,240跨越两个地理区域,并且在这两个区域之间具有较窄的网络管道时,那么例如,在确定存储桶应当去哪,以及在取读操作中哪个存储桶应当被访问时,拓扑可以是重要的。优选从附近的存储桶副本读取。另外,由于故障原因,有利的是每个存储桶具有四个副本,其中每个地理区域有两个。如果一个故障,仍然有一个附近的存储桶副本可以读取,修复守护进程(在下述部分描述)可以总是从附近的存储桶副本制造一个新的拷贝。
[0074] 蜂群操作:寻址故障
[0075] 图5B的系统500b根据一些实施例,示意了蜂群系统500b寻址故障的方式。通常,系统500b设计为具有一定程度的容错,允许正常的故障事件发生,而不中断从数据库读取或写入数据,并且该故障不需要人为干涉。如果存储桶的一个副本故障,那么在存储桶的另外两个副本的一个上可以获得相同的信息。因此,在蜂群系统500中复制的信息存储在磁盘中用于容错。磁盘故障包括可能出现的很广范围的错误,这包括由蜂群系统500b或客户端的操作系统(未示出)报告的“读取错误”,或者数据没能通过误差检测测试,例如校验和,CRC(循环冗余码校验),或者其他用于检查数据或数据故障以及校正检测到的任何存储在存储桶中的错误(例如,写入磁盘)的程序。当在存储桶中检测到错误时,没能通过测试的存储桶的副本将被丢弃,并读取或处理来自存储桶另一副本的数据。磁盘故障会引起节点562停止对该节点562上的存储桶的请求提供服务,节点562将停止宣告其为映射中的这些存储桶提供服务。随后,其他节点552和可用的节点552,而不是故障节点562继续通信564,566直到节点562的问题解决。在一些实施例中,如下述部分所述,磁盘故障会引起调用修复协议,例如修复守护进程,如下所述,这最终决定复制具有三个以下有效副本的那些存储桶。例如,修复守护进程诊断节点562的问题,并使得系统500b重新拷贝另一个可用节点552d或552e的副本,以替代节点562上不可用的副本R3。
[0076] 在一些实施例中,整个节点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通信。
[0077] 蜂群运行:分配存储桶和散列操作
[0078] 图6A-C是根据一些实施例的蜂群系统300,500中映射和分配存储桶620的框图。在一些实施例中,分布式数据库,例如蜂群系统300,500中的“存储桶”的分配由散列函数映射,该函数是将大块数据转为小块、有组织的信息,例如元数据、行、表、索引等的程序或数学函数。利用散列函数将随意大小的密钥转换为固定大小的二进制散列输出,可以实现行到存储桶的映射。在一个示例中,通过来自散列表610的行密钥的散列函数,可以识别特殊存储桶中存储的信息或信息位置,其中散列表指向存储桶620所在的特殊的位置。用于所有行密钥的散列函数,例如散列表610中列出的散列函数,映射至位于分布式数据库,例如系统300,500每个节点的表中(未示出),并在本地由每个节点保留和更新。行密钥在称为“一致性散列”的方案中包括位置码,例如位置=(hash mod n nodcs),或者可以是位于表,例如散列表610中的存储槽。
[0079] 在任一情况中,每个行密钥或存储槽指向存储桶620a-g。在一些实施例中,散列密钥的位前缀(例如,散列表610中的00X至11X......)用于产生或分配存储桶,其可以是变化大小的,密钥的前缀由存储桶的名称确定。因此,存储桶大小的变化允许在分配数据库的存储空间中具有灵活性和可扩展性。在一些实施例中,散列表610是前缀列表,其使用位模式散列来为存储桶620a-n(存储桶B1-Bn)分派或分配行密钥。如上所述,分布式数据库,例如系统300,500的映射中一条数据的位置由其行密钥的散列确定。散列的最高位,称为散列表610中的前缀,确定数据位于哪个存储桶。
[0080] 在一些实施例中,存储桶620a-n是嵌套的。例如,一个存储桶B1 620a可以包括所有行。存储桶B1620a的前缀是X,其中X可以是0或1。存储桶B2620b和B3 620c嵌套在存储桶B1 620a的内部。可以构造散列密钥使得如果行的散列以0开始,那么其在存储桶B2 620b中,以及如果行的散列以1开始,那么其在存储桶B3620c中,如图6B所示。如图6C所示,附加的存储桶B4 620d和B5 620c可以嵌套在图6B的存储桶B2 620b中。如果行的散列以00开始,那么其在存储桶B4 620d中,如果行的散列以01开始,那么其在存储桶B5 620e中。因此,根据散列表610的散列结构指示行密钥的散列以01开始时,其位于存储桶B5 620e,B2 620b以及B1 620a中。
[0081] 根据该散列结构,如图6B所示,存储桶B2 620b是存储桶B1 620a的一半大小。如图6C所示,存储桶B4 620d是存储桶B2 620b的一半大小,存储桶的分配由双数位前缀
00,01,10,11识别。也就是说,存储桶B2620b包括存储桶B1620a一半的散列范围,存储桶B4 620d包含存储桶B2 620b包含的散列范围的一半。如果散列函数成功将行密钥平均分配至散列空间,那么存储桶B2 620b将大概是存储桶B1 620a物理尺寸的一半。
[0082] 如果理想的是数据库中的存储桶大小基本相同,那么存储桶应该被相应地选择为具有一个范围的存储桶,例如图6B中的存储桶B2-B3 620b-c和图6C中的存储桶B4-B7620d-g,而不是其他的。在该系统中,行精确地存在于一个存储桶中。
[0083] 根据散列密钥限定映射具有几个益处。首先,存储桶的名称,一个小整数,确定存储桶中存储的密钥散列的范围。这与记录存储桶中任意范围的散列值相比,更方便调试和管理。第二,该方法允许不同大小的存储桶同时存在于系统中。给定行密钥的散列,结果是指示特殊行的映射可能会存在于一个以上的存储桶中,这在考虑存储桶的多个副本存在于数据库系统时是方便的。读取/写入行将会从所有这些存储桶读取或写入所有这些存储桶。许可不同大小的存储桶会允许各种灵活和可扩展的动作,例如在数据库运行时分割或组合存储桶。
[0084] 假设单个散列函数用于所有行至存储桶的映射,那么给定行对于所有包含该行的表来说,位于相同存储桶内。这在执行并行映射作业时是有效的技术。访问节点的存储桶中表的所有行的程序确保访问不同表中的行,但是相同的行密钥是本地访问。
[0085] 综上所述,如下定位行所在的特殊存储桶和节点的整个顺序:首先,散列行密钥。然后,利用该散列的前缀以及系统中存在的存储桶列表来确定哪个存储桶包含该行。最终,查看哪个节点已经宣布它们存储了这些存储桶。
[0086] C.组件级别
[0087] 数据写入
[0088] 图7A-7C是根据一些实施例,用于示出蜂群数据库系统100-300中如何组织和存储数据的框图。存储桶包含用于存储和管理数据的多个表。该数据需要以一种方式存储使得在多个表的行中读取和写入会比较便宜。并且,配置在每个各自存储桶中存储的表,使得改变一张表不会变动另一张表的任何内容。另外,该分隔降低了程序缺陷或存储错误的影响。
[0089] 数据存储在底层存储器,其示例包括,但不限于,硬盘,闪存,或随机存储器。一个实施例涉及在Linux文件系统的文件中存储数据。存储桶内的每张表由一组分等级的文件734组成。一个实施例使用了三个级别,称为“big”,“mid”和“inc”。每个文件734具有索引,用于将行密钥散列映射至磁盘文件中的位置。该索引装载于RAM中,确保提取行涉及单个的磁盘寻找和读取。“big”文件包括表中最老的数据,“mid”文件中包含稍新的数据,“inc”文件包含最新的数据。
[0090] 当应用希望写入表中的一行时,写入操作发送至本地节点或远程节点的“写入器守护进程”(未示出)。写入器守护进程将该数据写入交易记录(未示出),其在本地节点或远程节点崩溃,或者与远程节点通信失败之后,为了容错而重新播放。在一些实施例中,如前所述,给定的行写入需要被传送至存储桶的一个或多个(典型地是3)个副本中,其通常位于三个不同的节点。在一些实施例中,写入器守护进程将延迟给定写入一段时间,以希望找到更多的需要传送至相同的远程存储桶的写入。
[0091] 在一些实施例中,“存储桶守护进程”(未示出)从写入器守护进程接收写入。存储桶守护进程记忆并组合写入任务直到已经过去一段时间或者已经到达某些数据量(例如,N秒或者M兆字节的数据到达各个节点142,352的特殊的表)。然后该数据写入磁盘的Inc文件中。Inc文件最终组合为Mid文件,多个Mid文件组合为Big文件。在一些实施例中,另一个守护进程,存储桶维护守护进程完成该组合。
[0092] 操作系统参与向磁盘读取和写入的活动。在许多操作系统中,例如Unix或Linux,写入磁盘的数据变为“脏页”(例如,存储页具有需要被写入但是还没有被写入的数据)。本地操作系统(未示出)通常每N秒,或者如果脏页数量太大,每主要存储器(未示出)的一定百分比,来安排脏页的写入。因此,一次写入大块数据,通常是优选的,这是因为大块写入比许多小块写入更有效。但是,大块写入对于其他试图完成小块读取的过程来说是个问题。因此,在一些实施例中,写入操作被“计量”以打破大块的写入操作。换言之,系统写入受计量的限制,以留下磁盘容量用于快速应答读取。例如,可以以50MB/s写入数据的磁盘会被降低至将以8MB/s计量写入。因此,计量包含将任务分割成较小的块,然后每秒执行不超过N个。在另一示例中,通过将100兆字节划分为25个4兆字节的块并且每秒向磁盘写入两个4兆字节的块,以每秒8兆字节写入100兆字节的数据。
[0093] 另外,可以依靠操作系统的特征,例如fsync()函数,其允许系统300,500强制立即写入,而不是N秒后写入。函数fsync()通常用于在崩盘的情况下将数据损失降到最小。例如,Unix/Linux/POSIX fsync()函数强制写入立即写入磁盘,而不是保存在存储器缓冲中,使得数据不会承担丢失的危险。因此,写入操作可以更有效地执行。
[0094] 利用“写入映射”增加读取和写入的速度
[0095] 如前所述,这里所述的数据库存储每个存储桶的多个副本。另一种加快磁盘读取和写入速度的方式是在给定时刻将每个存储桶的给定副本专用于写入或读取。如果在短时间(少于1秒)物理磁盘或存储系统仅读取或仅写入,而不是在给定的物理磁盘或存储系统执行读取和写入的混合,那么磁盘运行会更快。例如,可以产生“写入映射”,其包含每个存储桶中哪个副本可以用于读取以及哪个可以用于写入的信息。包含多个副本的物理磁盘或存储系统需要具有用于读取或写入的所有存储桶副本,以获得利益。
[0096] 每N秒产生新的写入映射,例如N=30秒。这个稍长的时间允许有大量时间来将写入映射分配至集群的所有节点。这些节点将它们的时钟同步至几毫秒内,当每个节点的时钟到达N秒边界时,采用新的写入映射。重要的是,所有节点同意哪个磁盘专用于读取或写入,这是因为所有读取器必须知道哪个节点发送获取和下一行的操作。
[0097] 必须允许给定存储桶的给定副本最终写入,或者来自存储桶守护进程的写入数据会在存储器产生堆积(资源不足)。因此,每个存储桶副本都会给予在R=3的系统中至少写入1/3时间的机会。实际上,挑选用于写入的副本的算法考虑了从最后一次写入开始所经过的时间作为挑选哪个副本可以写入的主要因素。
[0098] 通过该算法,给定存储桶的至少一个副本必须可以用于读取,读取算法必须在截断n次运行“写入副本”之前,试图从“读取副本”读取。
[0099] 挑选哪个磁盘用于写入的算法的示例包括:
[0100] ●从最早写入的存储设备至最近写入的存储设备循环。
[0101] ●对于该存储设备上的每个存储桶副本来说,查看这些存储桶中的任一个是否需要成为该存储桶的1个读取副本。
[0102] ●如果没有存储桶的副本需要成为读取器,那么将该存储设备设定为写入器。
[0103] 挑选哪个磁盘写入的另一方法是利用数据库分为存储区的组织。简单地旋转通过存储区,每N秒挑选1个存储区写入。由于r3集群通常具有3个或3个以上存储区,该方法经常提供比前述方法更小的写入带宽。
[0104] 数据组织
[0105] 图7A示意了如何将数据写入分布式数据库,例如蜂群系统300,500中的各个节点。如前所述,存储桶守护进程从写入器守护进程接收写入。存储桶守护进程将写入712保持一段时间,希望接收到相同表的更多写入,但是最终对于每张表写出所有其拥有的写入712,作为新的Inc文件718。这些Inc文件激增,如Inc文件716...718所示意的,最终存储桶维护守护进程通知,并决定将一批Inc文件716...718合并为单个的Mid文件720。然后移除Inc文件716...718。在一些实施例中,多个Mid文件激增,在其他实施例中,具有至多1个Mid文件720,当Inc文件合并时,它们与现有的Mid文件720(如果存在的话)进行组合,以形成新的Mid文件。最终,存储桶维护守护进程将Mid文件720和Big文件722组合形成新的Big文件728。在一些实施例中,Big文件728是将类似Big文件722的多个Big文件合并的结果。
[0106] 相同的存储桶,例如存储桶2730中的不同的表,每张都具有其自己的文件组。在图7B中,我们看到三张表732,736,740。表Foo 732和表Bar 738最近已经被写入,因此,在等级734,738的所有三个级别都具有文件。表Nap740很长时间没有写入,存储桶维护守护进程将该表中的所有数据合并为单个的Big文件742。
[0107] 当从这些文件732,736,740中读取数据时,应答的成本和精确性取决于存在多少个文件。为了获得对于行的读取请求的完美应答,查看表的每个文件。对于表Nap740来说,这是精确的一个文件,因此有1个磁盘寻找。对于表Foo732来说,必须出现许多磁盘寻找,以确保定位正确的应答。例如,与要寻找的数据相关联的行可能存在于Big文件中,但是该行可能已经在Mid或Inc文件中被修改。因此,所有文件需要被查阅以获得精确的应答。如果假设这样,每个磁盘寻找需要2ms(毫秒)至10ms,具有200个文件的表可能需要一会来应答读取请求。
[0108] 分布式数据库,例如系统300,500允许为了速度牺牲精度。图7C示意了此情况。用于限制精度的值的名称是“寻找深度”。这是要完成的磁盘寻找的最大数量。在表Foo
1752中,进行行的读取,其中寻找深度=1。在这种情况下,仅查阅Big文件758,忽略Mid和Inc文件中的数据。在表Foo2760中,将行的读取设定为寻找深度=3。在这种情况下,查阅至多三个文件764。因此,表Foo 1 752的读取将比表Foo 2 760的读取更快,但比其精度差。以每张表为基础,或者在单独的读取请求中,可以将寻找深度设定为默认值。
[0109] 将Inc合并为Mid,将Mid合并为Big减少了表中文件的数量。该文件的数量也被称为寻找深度。为了确定多少合并工作需要完成以将所有数据留在Big文件中,计算系统中最差的寻找深度,该值命名为寻找100。也确定系统中所有存储桶的所有副本的寻找深度的计数,并且寻找深度的值在第50和第90个百分点计算。这些数值分别称为寻找50和寻找90。这些值可以绘制为时间的函数,以将写入和合并数据的相互作用可视化(例如,发生多少次写入,多少次合并是必要的)。
[0110] 在一些实施例中,布隆过滤器保存在存储器中,并且如果布隆过滤器指示特殊的行密钥不在该文件中,那么其可以用于避免查阅磁盘上的文件。这尤其有助于具有大的寻找深度的路径。
[0111] 组件数据读取/写入概述
[0112] 图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广播以帮助完成任务或接收用于存储的数据。
[0113] 一旦节点812成为集群810的一部分,则在集群810中的所有节点812共用或实施大量的管理工具和协议。例如,节点812上的修复守护进程(未示出)将开始运行。如果节点812是新节点并且没有存储桶,那么开始自愿复制位于过载节点812上的存储桶,直到新节点达到其存储桶的目标。节点812中的每一个包括多个程序或守护进程以执行与数据库系统相关的多个任务。这些程序包括,但不限于,网络服务器,爬取器(crawler),图像爬取器,垃圾守护进程,全球守护进程,记录器守护进程,文件服务器守护进程,映射作业守护进程,修复守护进程,随机存储守护进程,存储桶守护进程,存储桶_维护守护进程,读取器守护进程,写入器守护进程,心跳守护进程,监视守护进程:存储器溢出(oom)守护进程,以及check-r守护进程。一些守护进程将进一步详细讨论。
[0114] 读取(获取数据):一般和高速缓冲存储
[0115] 图9是根据一些实施例,示意在分布式数据库系统中用于获取请求任务的两个节点910,940之间合作的框图。在节点1 910接收获取数据的请求912。获取数据的请求912对应于从数据库,例如集群810获取行的请求。当进行了请求时,行密钥首先被散列,以确定行出现在哪个存储桶中。在节点1 910通过读取器守护进程914接收获取数据请求912,其执行get()请求。在一些实施例中,读取器守护进程914散列行密钥。
[0116] 除了存储在磁盘上的信息,其中该信息被存储复制用于容错,一些用于快速访问的信息位于高速缓冲存储器中,例如高速缓冲存储器916。在一些实施例中,高速缓冲存储器916由读取器守护进程914管理,但是在其他实施例中,高速缓冲存储器916也可以位于节点1 910内的本地磁盘或节点1 910的外部,并且可以由其他守护进程管理。在一些实施例,高速缓冲存储器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读取应答。
[0117] 如果获取数据请求912的应答不在RAM高速缓冲存储器或高速缓冲存储器916中,那么读取器守护进程914可以通过通信924向另一个节点940,节点2,发出请求,该节点2公知为包含对应于散列行密钥的存储桶。如果节点940不能快速回答,将向具有该存储桶的第三个节点(未示出)发出第二次请求,等等。
[0118] 在一些实施例中,下一个节点940,节点2中的存储桶守护进程942从读取器守护进程914接收获取请求。存储桶守护进程,例如存储桶守护进程942,管理各个节点的一个或多个存储桶,以完成包括处理请求,从磁盘944上存储的存储桶检索信息,或者向磁盘944写入信息的任务。存储桶守护进程942根据行密钥散列检查948本地磁盘944,用于请求的行。如果磁盘944包含请求行,那么将信息返回至存储桶守护进程946用于传送。在一些实施例中,检索的信息经由通信922返回至读取器守护进程914用于最终传送至请求器。在一些实施例中,存储桶守护进程942直接将检索的信息传送至请求器。
[0119] 在一些实施例中,在行密钥被散列后,获取数据请求912同时发送至两个或多个节点910,940。当获取数据请求912正在节点1910被处理时,请求也经由通信920发送至节点2940。在一些实施例中,获取数据请求912可以被类似处理,遵守用于所有节点910,940的公共协议。例如,获取数据请求912可以由本地读取器守护进程首先接收以检查本地高速缓冲存储器或ram高速缓冲存储器。如果本地高速缓冲存储器或ram高速缓冲存储器不包含该行,那么本地存储桶守护进程可以处理请求912。在一些实施例中,获取数据912可以被独立处理,例如读取器守护进程914可以首先检查节点1910中的高速缓冲存储器
916,而节点2940中的获取数据请求912首先由存储桶守护进程942接收和处理。因此,集群810中的节点遵守处理和管理信息的公共协议;节点可以彼此独立,在本地处理和管理信息;或者节点可以遵守两者组合的协议。
[0120] 读取(获取数据):截取和运行
[0121] 图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提供服务。
[0122] 图11是根据一些其他实施例的处理请求的流程图。与图11的步骤1010和1020类似,在步骤1110,基于接收的请求(例如,RPC),在步骤1120,行密钥被散列以确定存储桶是否能够为请求提供服务。在步骤1130,一旦确定一个或多个存储桶,那么具有存储桶的所有节点被要求向请求提供服务。第一个答复的可用节点为请求提供服务。当第一个可用的节点在步骤1140答复请求时,该过程停止。在一些实施例中,节点来自相同的集群810或不同的集群140,240。
[0123] Nextrow()
[0124] 在一些实施例中,第二种读取操作,nextrow(),用于以散列顺序读取表中所有行。这典型地用于映射作业任务,其为表中每一行进行计算。例如在映射作业(下述部分将描述)中,Nextrow()静静地从网络上的调用变为从本地磁盘读取的调用,这是更有效的过程。在一些实施例中,与映射作业和非映射作业相同的代码可以用于Nextrow()操作,其使测试和调试变得很容易。但是,映射作业的版本在大量数据上运行更快。
[0125] 在一些实施例中,在存储器中保留表中一些密钥(不是散列密钥)和/或一些列的索引。当nextrowing()有效地访问一定范围的密钥或列的值时,使用该索引。
[0126] 修复
[0127] 图12是根据一些实施例的在分布式数据库中自我修复和管理存储桶的过程的流程图。集群810的每个节点812包括修复守护进程,其在当一个节点增加至集群810时开始被调用。修复守护进程在不利用主机节点的情况下,利用蜂群算法来调整。修复守护进程是容错基础结构的一部分,并修复来自故障主机,故障磁盘,以及破坏的存储桶的损害。该修复守护进程也通过将具有太多存储桶的节点上的存储桶移动至具有很少存储桶的节点,来帮助平衡负荷。例如,可以通过修复守护进程给开始没有存储桶的新节点一些存储桶。
[0128] 在步骤1210,利用下述信息,例如每个节点812的磁盘数,CPU(中央处理单元)功率,磁盘使用,等等,修复守护进程计算每个节点存储桶的目标数。利用全球可用的信息,由每个节点为每个节点计算这些目标。例如,如果一个节点故障,那么剩余节点的存储桶的目标将稍微增加。如果增加了新节点,那么它将接收恰当的目标,所有其他节点的目标将稍下降。在一些实施例中,每个节点812利用相同的数据,以计算这些目标,因此,大多数节点812在大多数时间将计算出相同的目标目的。然后利用目标数确定是否重新组织或重新分配存储桶和存储桶的大小。在步骤1215,修复守护进程查找应当无条件被复制的存储桶。
例如,如果存储桶在相同的网架或者具有三个以下的副本的存储桶内被复制,那么存储桶要无条件被复制。例如,存储桶的少于三个的副本发起节点请求以制造存储桶的副本。在一些实施例中,该计数不包括已经被标记为“主机丢弃”或“主机故障”的存储桶或节点。标记为主机丢弃和主机故障的存储桶由人工设定管理条件,从而一旦移除它们的存储桶同时该移除不引起这些“故障”存储桶的数目小于三个副本的警告,就停止使用主机,。修复守护进程识别需要被复制的存储桶,在1220,选择具有可用存储桶空间的节点。在一些实施例中,在存储桶的另一副本不在的位置,选择可用的存储桶空间,使得没有两个存储桶位于相同的节点812上。在步骤1230,从下述节点复制存储桶,其中该节点被识别为具有要拷贝的存储桶,以确保存储桶的三个有效副本被存储。
[0129] 在一些实施例中,如果没有要制作的无条件副本,那么在步骤1235,修复守护进程会考虑从看起来过载的节点复制存储桶。基于将存储桶的目标数和当前主机上存储桶的实际数的比较,选择过载节点。节点812具有的实际存储桶比目标数要多,则其是过载的;节点812具有的实际存储桶比目标数要少,则是欠载的。在步骤1235,如果过载节点被识别,那么在步骤1240选择过载节点。在步骤1250,选择位于过载节点的存储桶进行复制。从过载节点选择一个或多个存储桶。由于典型地每个存储桶具有多个副本可以用于拷贝,因此修复守护进程基于下述因素,例如该节点当前参与多少拷贝或者在写入时存储桶落后多少等等,挑选从哪个节点拷贝。在步骤1260,从包含选择的存储桶的副本的某节点复制位于过载节点上的一个或多个存储桶的拷贝。在一些实施例中,重复卸载过载的节点直到所有过载节点被服务。
[0130] 在一些实施例中,在步骤1265,当具有四个或以上相同存储桶的副本时,修复守护进程也考虑丢弃存储桶。在一些实施例中,如果没有多余的存储桶,那么在步骤1270,完成修复守护进程。在一些实施例中,每个节点的修复守护进程利用相同的输入数据,完成相同的计算以识别多余的存储桶,以至于具有存储桶的所有节点都知道哪个节点最好丢弃多余存储桶。在步骤1280,在确定哪个节点应当丢弃多余存储桶时,例如,修复守护进程会考虑在特殊节点存储桶或存储桶的更新是否落后,存储桶是否在相同的网架内复制,或者节点是否过载。一旦识别出节点,在步骤1290丢弃多余的存储桶。在一些实施例中,如果多于一个的节点具有多余的存储桶,那么重复丢弃多余存储桶的过程。
[0131] 删除
[0132] 图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中,为了更快的响应时间,从其他过程(例如,响应于用户网络搜索)更快速的完成读取。
[0133] 映射作业
[0134] 图13B示意了根据一些实施例的系统1301中服务两个节点1313,1315的并行映射作业的过程。映射作业是并行程序,通过将工作分解为“分片(shard)”1323,1325来处理完整的表,以改善执行时间,从而有效运行。每个分片1323,1325从本地磁盘,示出为存储桶1317,1319,读取恰当的表的碎片。例如,数据库系统1301上的映射作业具有至少两个分片1323,1325。在示例中,分片2 1323在节点1 1313上运行,直接从本地磁盘读取存储桶2 1315a的内容。分片3 1325在节点2 1315上运行,直接从本地磁盘读取存储桶31317b的内容。映射作业通常通过在数据库中设置数据,或者向主过程返回数据,从而产生应答。大多数完成类似工作的其他系统称为“映射化简”,这是由于它们通过向主过程返回数据,而只有这一种方式返回应答。但是,映射作业允许多种方式返回应答。映射作业的立即写入数据库的能力意味着映射作业的部分结果可以立即用于读取器,并且任何化简(表示为组合算符)能够与映射计算一起重叠计算。
[0135] 在一些实施例,映射作业利用组合算符,而不是明确的化简阶段,来完成化简,其中组合算符将在下一部分描述。组合算符是远程基本操作,在其他用途中,组合算符可以用于从许多节点获得数据并将其组合为一个应答。例如,映射作业中的“增加”组合算符可以用于计算在表的所有行中单个列的和。可以完成这些组合算符“化简”以向调用者返回数据或者在数据库中设定数据。映射作业可作为上述的映射作业被计算,或者作为替换,在一段时间内进入的数据流被计算,例如,网页被爬取。
[0136] 映射作业对于数据库,而不是呼叫者完成化简的另一个有趣的方面是化简的工作量可以分散在映射作业的整个过程,而不是集中在最后。这产生了更好的性能。另外,映射作业是蜂群系统350,500的另一容错的方面。如果磁盘或节点的故障引起了分片,例如分片1323,1325不能完成,那么,映射作业的“分片”将在保护恰当的存储桶的不同的节点上重新运行。
[0137] 1.组合算符
[0138] 概述
[0139] 图14A根据一些实施例,列出了几个组合算符的工具1408,其可以作为应用1838存储在图18的存储器1822中。该组合算符1408将在后续部分进一步详细描述。这些组合算符1408可以用在各种数据库和搜索操作中,并会在各个部分详细描述。组合算符1408可以包括,但不限于,下述:
[0140] 记录计数(Logcount)1422-将一组项目中独特的项目近似计数
[0141] TopN 1424-将数据项排名,仅保留排名最高的N个
[0142] Set()1426-将最后的值视为应答
[0143] 附加1428-将字符串附加至现有字符串的末端
[0144] Comb_Add 1430-在现有的值上增加值
[0145] 图14B是根据一些实施例,用于示意分布式数据库系统,例如蜂群系统350,500中节点1410的增加组合算符的框图。在一些实施例中,组合算符在蜂群系统350,500的许多不同级别组合任务,这减少了网络上传送和写入磁盘的数据量。例如,考虑图14B中示意的“增加”组合算符。对于给定数量的请求,其中该请求为在节点3 1410的磁盘1412存储的行中增加值,那么第一过程1438(P1)的第一请求代表向磁盘1412的行中增加+1。另一过程1442代表另一增加+1。因此,在某些级别(这里是节点N1 1432),这些增加组合为一个组合操作,即增加+2。由请求处理器,例如节点3 1410的存储桶守护进程1414接收求和的请求。在一些实施例中,从单个过程,例如P3 1458和P4 1462所示,接收对于磁盘1412中行的多于以上的增加。过程P3 1458具有增加+3,过程P4 1462具有增加+4。因此,由节点N2 1452接收的请求之和等于增加+7。因此,增加请求可以来自不同的位置(例如,N1,N2),但是可以由存储桶守护进程1414组合。因此,存储桶守护进程1414对于磁盘1412中存储的行的值,接收总共增加+9。将操作组合会减少更新值所需的资源。
[0146] 三个存储桶复制中的组合算符
[0147] 图15是根据一些实施例,用于示意在分布式数据库系统,例如蜂群系统500中,用于写入三个存储桶复制(在节点1510a-c)的组合算符的框图。节点11530中的过程1538包括两个写入请求,即增加表的给定行和列,以发送至写入守护进程1532,该进程可以成功找到相同表中的相同行和列的更多增加,并组合它们。节点1 1530中的过程P2 1542也包括在相同行增加+3。因此,写入守护进程1532中总的增加是增加+5。类似地,过程P31558具有增加+2,过程P4 1562包括在相同行的增加+4。因此,节点21550的写入守护进程1552接收增加+6。这些增加被发送至若干远程的存储桶守护进程1514,1518,1520(每个副本一个),其依次组合存储器中更多的操作,直到将数据写入磁盘。在各自三个节点1510a-c的存储桶守护进程1514,1518,1520接收该增加。因此,每个存储桶守护进程1514,1518,1520向各个Inc文件1504,1506,1508写入总共增加+11。
[0148] 由于所有这些组合算符,在集群中对于表中相同列和行的上百万增加操作可能仅产生几个或者一个磁盘处理。
[0149] 组合算符可以以几种方式存储在数据库中。一种方式是将组合算符存储为数据库的行中的列。其他方式是将组合算符嵌入在复杂的数据结构中,例如Perl散列或Python字典,其存储在数据库的行中的列。这是特殊的组合算符,comb_hash,其是包含其他组合算符,例如comb_add或comb_logcount的Perl散列或Python字典。
[0150] 组合算符也作为普通变量的对象存在,即它们可以是Perl或Python变量。
[0151] 由特殊的组合算符,comb_delete代表删除的值,其作用有点类似Casandra中的“墓石”。
[0152] 在一些实施例中,记录产生组合算符的时间,该时间用于确定当情况出现时,选择哪个值,例如对相同值进行的2个comb_set,或1个comb_set和一个comb_delete,或一系列comb_add和一个comb_set。这有助于组合算符计算的决定方法。例如,如果被组合的操作是在11:00am,comb_set为零,在10:35am,comb_add为+1,然后结果将是在11am,comb_set为零。
[0153] 在一些实施例中,利用协议,例如NTP(网络时间协议),认真同步集群中节点的时钟,用以有助于前述段落中所述的过程。
[0154] Set()操作
[0155] 除了增加之外,在我们的系统中,已经对非常大量的操作实现了组合算符的使用。一种使用是“set()”。set()组合算符1426将最后的值视为应答。因为set()可以作为组合算符写入,因此,它使用了系统中所有可用的组合算符的基础结构。在大多数数据库中,如果100个节点上的10个过程将1000个不同的值设定到特殊表的给定行和列,那么将从节点向数据库服务器进行1000个RPC调用,每个调用产生一个处理记录的写入。相反,节点1530,1550上的写入器守护进程1532,1552可以将10个本地的set操作组合为一个,节点1510a-c上的存储桶守护进程1514,1518,1520可以将100个进入的set()操作组合为一个set(),产生一个磁盘处理,其中该节点1510a-c具有该存储桶的副本。这产生高很多的性能。
[0156] 在一些实施例中,在某些情况下组合算符1408可以和不同的组合算符1408组合,例如,单元可以在set和增加组合算符1426,1430上运行。如果两个组合算符是连带的,例如comb(comb(a,b),c)=comb(a,(comb(b,c)),然后,组合算符可以一起使用。
[0157] TopN
[0158] 图16A是根据一些实施例,用于示意TopN排名1603的数据结构的图示。如图16A所示,送入TopN 1603的单个项目是(名称,排名,备注)的元组,其中“名称”是标量(字符串,数值等等),“排名”是数值(越大越好),“备注”是任意的数据结构,可选择地用于记录有关“姓名”的附加信息。N的值设定了TopN 1603的存储器使用的界限。TopN 1603的示例性使用包括:记忆N个最重要(最高排名)的涉及单词“Obama”的网页,或者记忆涉及单词“Obama”的爬取的最新的N个网页。在该示例中,“网页”的排名是网页被爬取的时间。越大的时间值指示越近的爬取。
[0159] 记录计数(Logcount)
[0160] 图16B-16C示意了根据一些实施例的,在分布式数据库系统,例如蜂群系统350,500中来自记录计数组合算符1422和过程1601的记录计数结构1600的各种实施例。记录计数1422解决下述问题,即利用少量的存储器,获得一组项目中的独特项目的近似计数。
例如,记录计数1422可以用于计数导入网站的链接的数量。可能具有0或1个该导入链接,或者诸如yahoo.com的网站具有上百万个导入链接。理想的是在不必存储它们全部的情况下,计数这些链接。通过仅计数独特的导入链接,数据可以重复的重新处理,而仍保持对独特的导入链接的精确计数。
[0161] 通过称为“布隆过滤器”的技术典型地解决了对独特的项目,例如访问的网站进行计数的问题,当其被提供数十亿的项目时,其需要存储上百万字节以给出精确的答案。但是,记录计数1422是使用了少得多的存储器,但精度稍差的方法。在一个实施例中,仅利用16个字节的存储,对数十亿的独特项目进行计数,其精度大约是+-50%。该很小的存储使得可以利用少的资源对单独的多种数据进行记录计数,其比利用布隆过滤器仅对一种数据进行唯一计数使用的资源少。另外,记录计数1422可以用于两个映射作业并且是递增的。
[0162] 图16C中示意的过程1601是一个示例,其中记录计数1422可以用于计数一组M个输入值v1,v2,...vM。在步骤1630,每个输入值被散列为散列值h1,h2...hM。记录计数算法使用了N个中间数据i1,i2,...,iN。在计数任何项目之前,i1...iN是零。在步骤1635,为了计数第一个散列值h1,散列值h1被分为N个部分h1_1...h1_N。在一些实施例中,散列h1包含128位,如果N=4,那么,每个部分是32位。该实施例中的中间值i1...iN每个也是32位,因此,该实施例中由记录计数所需的总中间存储是128位。
[0163] 在步骤1640,对于第一个散列值的每个部分h1_1...h1_N来说,找到了最低的位组。例如,如果h1_1=6,或者二进制0110,则最低的位组是第二位。在步骤1645,在第一个中间值i1设定相同的位。对于散列值h1的N个部分中的每一个来说,重复步骤1640和1645。最终,对于每个散列值h2,h3...,hM来说,重复从1635开始的步骤直到计数所有散列值。
[0164] 为了在给定中间值i1...iN的情况下计算输出计数C,在步骤1660计算记录变量k。为了计算k,要找到每个中间值i1...iN中的最低未设定位。例如,如果i1=0111011111,则最低未设定位是6。在步骤1664,对于所有i1...iN,将最低未设定位的值一起求平均。
[0165] 然后在步骤1665由方程C=2^(k-1)确定最外输出值。
[0166] 在数学上理解该算法的关键是i1...iN中较大的位,比较小的位更少可能被设定。记录计数1422与在靶面上投掷飞镖类似,如图16B 1610-1620所示,其中取代相似大小的目标,每个框是其前面框的1/2大小。在一半的时间中,飞镖将击中最大的框1610,很小的一部分时间中,飞镖将击中一个很小的框1620。在几次投掷之后,所有大的框1610-1616已经被击中,但是还有很小的框1620没有被击中。没有被击中的框越小,则计数越大。该方法仅是对计数的近似,计数的误差可能会相当大。但是,为了更精确地计数C,维持N个单独的靶面i1...iN,并且将它们的计数平均。
[0167] 相反,继续以靶面模拟,布隆过滤器像具有相等大小的框的靶面。因此,框的数量会非常大以计数大量的飞镖,这比记录计数1422使用了更多的存储。
[0168] 最终,注意,如果再次计数散列值h1,则将在已经设置的i1...iN中设置位,导致计数没有增加。
[0169] 在一些实施例中,为了使得记录计数更精确,N可以增加,i1...iN的大小可以增加至64位或更多。例如,可以产生称为记录计数64的变形,其中N=64,i1...iN的大小为32位。能够为非常小的计数提供更高精度的变形算法,通过将密钥本身(或它们的散列)存储于通常用于记录i1...iN的存储字节,来为非常小的计数记录精确的应答。一个标志指示其什么时候完成。如果计数增加至没有更多存储剩余的点,那么算法切换至利用正常的记录计数。
[0170] 如前所述,记录计数被表述为二次幂,因此,所有操作很容易表述为二进制算术,其是非常快的。在一些实施例中,另一种变形是使用不同于1/2的因数来确定在i1...iN中设定哪个位。这可以认为将图16B中的框1610-1620减小尺寸,但减小因数不是1/2。例如,因数9/10需要i1...iN的大小增加到能够存储40亿个独特的密钥,但是该计数更加精确。
[0171] 在一些实施例中,实施附加的变形,例如,其中给定位的估算器(计数)的精度取决于任意的指数式衰减 由于记录计数1422具有能够相当精确地估计独特字符串的数量的能力,因此,其是非常有用的工具。但是,记录计数1422受到其可以计数的最大数的限32
制。例如,最大的记录计数值2 通常用于快速的结果,并由于普遍使用32位而被选择。但是,在40亿次或更多次计数之后,这个大小的记录计数不再有用。记录计数1422也受限于大小/精度的折衷。可以发现,32字节的存储容量允许记录计数1422存储精度在+/-50%范围内的数字(计数)。但是,如上所述,一些变形可能包括需要更高或更低精度的系统。
为了允许更高的灵活性,构造记录计数1422,其中给定位的概率不再是50%,而是任意的指数式衰减。这将使记录计数的估计变得复杂(最初通过位模式中的“洞”,其中这些“洞”不仅可能存在和承载有用的信息),但是允许以每个估算器为基础,平衡最大计数和大小/精度的折衷,这将在后面部分中描述。
[0172] 在一些实施例中,记录计数1422可以通过对指数式衰减因数 (上述引入的)设置要求,来进行修改。作为另一记录计数变形,首先需要良好的消化(散列)功能,其中d(string)->[0,1)。给定 在位矢量中设定位,定义如下:
[0173]
[0174] 其中i是用于计数算法的一组中间值的中间数据值。因此,对于给定的字符串来说,任何给定位将被设定的下述概率是:
[0175] p(bi)=ε
[0176] p(bi)=ε(1-ε)
[0177] ...
[0178] p(bi)=ε(1-ε)i
[0179] 并且,在下述部分中为了方便起见,第二变量fi定义为:
[0180] fi=ε(1-ε)i
[0181] 组合这些位矢量i和逐位“或”一样简单。
[0182] 给定上述定义,现在使用给定的位矢量估计产生的独特字符串的数量。这通过下述完成,即在给定多个独特字符串的情况下,对位矢量的概率建立模型,以及相对于该多个独特字符串最大化对数似然性。
[0183] 首先考虑将S个独特字符串放入位矢量的影响。位不被设定的概率是:
[0184] p(~bi|S)=(1-ε(1-ε)i)S=(1-fi)S
[0185] 因此,给定位被设定的概率是:
[0186] p(bi|S)=1-p(~bi)|S)=1-(1-ε(1-ε)i)S=1-(1-fi)S
[0187] 因此,在给定S个独特字符串的情况下,给定的位字符串的概率是:
[0188]
[0189] 对数似然性是:
[0190]
[0191]
[0192]
[0193] 相对于独特字符串的数量,使得对数似然性最大会导致:
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201] 其将常数项从设定的位上的和中分离出来。该根可以通过顿算法找到合理的近似。
[0202] 在选择 时,假设位的长度为N,理想的合理估计的最大计数是M,那么估算器在下述情况下位溢出:
[0203]
[0204] 这意味着最优的 将是:
[0205]
[0206] 可以理解前述部分描述的一个或多个记录计数的变形可以组合。并且,本领域公知的其他记录计数算法和方法可以用在蜂群系统350,500中,或者和本文所述的任何记录计数变形组合使用。例如,可以利用来自下述列表的一个或多个记录计数的概念:
[0207] · ″ Probabilistic Counting Algorithms for Data BaseApplications,″Philippe Flajolet andG.Nigel Martin,Journal of Computer and System Sciences,1985;
[0208] ·″ Loglog Counting of Large Cardinalities,″ Marianne Durand and Philippe Flajolet,ESA 2003,LNCS 2832,pp.605-617,2003;以及
[0209] · ″ Fast and Accurate Traffic Matrix Measurement Using Adaptive Cardinality Counting, ″ Min Cai,Jianping Pan,Yu-Kwong Kwok,Kai Hwang,Proceedings of the 2005ACM SIGCOMM workshop on Mining network data.
[0210] 上述文章中归纳出的记录计数的概念可以在蜂群系统350,500,或者其他类似的分布式数据库系统(例如,搜素引擎)中,以本领域技术人员公知的任何方式使用,其并入这里作为参考。
[0211] E.子集映射
[0212] 图17A是根据一些实施例,用于示意数据结构的框图,其中如节点1 1702中所示该数据结构用于数据子集的映射。映射数据的子集可以用在下述情况中,其中某项工作负荷或某组任务必须执行,使得每个节点1702,1710,1720应当在表的行中占有唯一的,未被复制的一部分。在该情况下,整张表应当被服务,在节点1702,1710,1720之间没有应当被复制的行,如果节点1702,1710,1720到来或者离开(由于设备崩溃,增加的新服务器等等),那么应当调整该组织结构。
[0213] 在“分区范围”协议中,有效节点,例如节点1702,1710,1720,通过例如IP地址存储在集群中。消化(digest)范围(其是0-2^128-1)被分割,基于节点1702,1710,1720在分类的IP地址列表中的位置,将消化范围的一部分分配至节点1702,1710,1720。最低编号的节点1702,1710,1720从消化0开始并增加至某一值a(N1 1704)。下一个服务器从消化a+1开始并增加至某一值b(N21706),等等,直到达到消化范围的末端,N31708。
[0214] 因此,每个节点1702,1710,1720通过检查它们是否位于其分割的消化范围内,则可以知晓其分配至表中的哪行。1702,1710,1720不必在正常通信之外彼此通信以获知它们负责哪个范围。
[0215] 节点负责的表中的行不必位于节点1702,1710,1720持有的存储桶上,因此,它们可能必须从网络中提取。并且,当映射改变(新节点1702,1710,1720到来或离开)时,所有边界都要移动。集群中的每个节点1702,1710,1720都受服务器映射的任何改变的影响。
[0216] 图17B示出了根据一些实施例的分布式系统1701中节点1711-1719的映射子集的本地化管理。映射子集的一组副本中一致的第一个副本是理想的,以至于每个节点1711-1719可以识别其本地存储桶的子集。该第一个副本识别的存储桶的总的集合形成完整的映射覆盖-每个存储桶将出现一次并且仅有一次。
[0217] 这对于存储桶1725-1731的三个副本中每一个都实现,识别存储桶所在的节点1711-1719。在三副本系统中,每个节点1711-1719的第一个复本映射平均包括存储桶的三分之一。根据由IP地址,存储桶数量的散列,等等进行的某些分类,来连续排序三个存储桶。因此,第一个节点Node 11711被分配存储桶4-6(1725a,1727a,1729a),第二个节点Node 2 1713被分配存储桶5,7,6(1727b,1729b,1731a)等等,以至于每个节点1711-1719负责其自己的存储桶集合。
[0218] 该结构允许每个节点1711-1719上数据的单个副本子集在磁盘上本地可用,并不需要在网络上提取。并且,如果服务器映射改变,仅有存储桶的一些子集会改变。由于再分配一些节点1711-1719不再负责它们之前负责的一些存储桶。一些节点1711-1719将对于新的副本存储桶负责。但是,整个数据库系统内的“搅动”被最小化-许多节点将没有发生在其身上的任何变化(增加或删除第一个副本存储桶)。该本地管理系统与分割范围相对,其中,主机增加或退出使得集群中所有节点1702,1710,1720必须调整它们负责的行。也可能存在其他的第一副本映射。使用散列和分类,因此每个节点1711-1719可以在本地确定一组存储桶副本的总的第一个副本映射,使得如果每个节点执行该过程,它们将到这相同的第一个副本映射,而不需彼此讨论。
[0219] 已经使用几种算法,用于在给定已有的三副本映射的情况下,在第一个副本子集映射中分配存储桶。一种算法使得第一个副本存储桶的数量在所有主机上尽量平均。该算法具有的益处是在主机上均匀平衡工作负荷。该算法也可以更新以相对于加权主机列表尽量平均分布,该权重代表,例如主机的相对CPU功率或磁盘带宽,或者主机中存储器的数量。
[0220] 考虑的另一个算法分配第一个副本存储桶,使得当由于主机或磁盘增加或故障而使得三副本映射改变时,需要移动的第一个副本存储桶的数量最小。另外一种考虑的算法是当三副本映射改变时,提供良好的负荷均衡,并同时将第一副本存储桶的拷贝的数量保持在很小量。
[0221] 为了在不丢失信息的情况下,成功拷贝组合算符,提供了获取组合算符的“原始数据”和组合算符的正常值的能力。在记录计数组合算符的情况下,“原始数据”是16字节,而“正常值”是整数近似计数。
[0222] comb_bloom组合算符用于有效地计算布隆过滤器。例如,1024位布隆过滤器b1和另一个相同大小的布隆滤波器b2通过将位进行“或”来组合。在搜索引擎的背景下,comb_bloom可以用于确定URL是否之前已经被爬取过。
[0223] comb_avg组合算符存储发送给它的数字的平均值。comb_avg_weight计算发送给它的数字的加权平均值。在搜索引擎的背景下,comb_avg可以用于映射作业以将表中的列求和,例如搜索引擎获知的所有网页的平均排名。
[0224] comb_eavg组合算符存储指数衰减的平均值,其中增加新值是将旧值乘以(1-衰减速度)。例如,如果衰减速度是0.5,那么,在一行中呈送10次值1,会产生值1+1/2+1/4+...+1/1024=2047/1024。
[0225] comb_escore组合算符是时间上的指数衰减。发送每个值都带有时间,旧的值在必要时衰减。例如,如果衰减速度是0.5,新值比旧值晚10秒,那么在旧值被增加到新值前,旧值除以1024。
[0226] comb_index
[0227] Comb_index是用于网页列表的TopN的特殊形式,其对于每个搜索词或双连字符串(bi-gram)是有好处的。“排名”是匹配的质量,或者日期。“密钥”是利用下述的压缩模式而压缩的数据,包括网页的URL,以及用于快速评价URL是否与运算符匹配的小方面和其他信息。重要的是,该压缩数据足够小以至于可以将每个可能的搜索词的很长的网页列表放入ram或闪存或其他快速存储设备中。
[0228] 在搜索应用中,为索引的每个词或双连字符串保存几个单独的comb_index组合算符。例如,对于词’Lindahl’来说,具有一个comb_index,其通过’Lindahl’的最高质量的网页排名来进行排名。也可以有一个通过时间日期来排名的comb_index,包含最近的含有’Lindahl’网页的时间日期。应答查询’Lindahl’会查阅第一个comb_index;应答查询“Lindahl/date”会查阅两者。对于利用日期分类的查询,第二个组合算符包含最近的Lindahl的网页,但不考虑质量,第一个组合算符加入旧的但排名高的Lindahl网页。第三个comb_index在锚文本,题目,或URL中存储最近的具有“Lindahl”的网页,;这是所有涉及Lindahl页面的较高质量的子集,其会比时间,以及比涉及Lindahl所有页面列表回顾的更远。
[0229] 也有comb_index组合算符,用于最重要的运算符。作为示例,’gov:obama’comb_index包含最重要的且与/gov小方面匹配的Obama的网页。简单的’gov:’comb_index用于应答简单的“/gov”查询。这些运算符comb_index组合算符中的一些使用时间日期作为排名。
[0230] 为了将更多的并行操作放入应答查询中,作为替换,每个comb_index可以由N个comb_index组合算符代表,称为“分割”。例如8个称为’0:obama’,’1:obama’,...,’7-obama’的comb_indexes取代仅是‘obama’comb_index。当这些分割的comb_index组合算符通过get():N存储桶守护进程提取或者使用N个ram守护进程取代仅有1个时,那么并行的好处就显现了。
[0231] 在一些实施例中,comb_index组合算符包含甚至压缩很高的数据的附加的“尾巴”。例如,如果每个网页完全压缩的数据是32字节,那么尾数据仅有4个字节,一些大约是网页9倍的信息存储在仅有2倍的大小中。但是,4个字节很小,以至于它不能唯一识别URL,或者存储排名或小方面信息。作为替换,挑选4字节数量作为URL的8字节散列值中的4个字节。这4个字节不能直接映射至URL,但是如果相同的URL存在于另一个在查询中正在被查阅的comb_index的“头”中,那么很可能该匹配的4个字节是指相同的网页。
[0232] 例如,考虑查询“Greg Lindahl”。Greg是普通的名,Lindahl是少见的姓。假设没有comb_index组合算符用于双连字符串“Greg Lindahl”。为了应答该查询,提取comb_index组合算符用于“Greg”和“Lindahl”。进一步假设Greg Lindahl主页(GLHP)的URL是“Lindahl”的头和“Greg”的尾。当将这两个列表交叉找到涉及“Greg”和“Lindahl”的网页时,我们注意到“Grep”的尾中GLHP的4字节数量恰好与“Lindahl”头中GLHP的散列URL的4字节相匹配。那么,我们可以猜想GLHP包含单词“Greg”“Lindahl”。从“Lindahl”的头入口找到GLHP的小方面;我们不知道词“Greg”的GLHP的排名,但是我们存储了“Greg”的尾中的网页的平均排名,可以利用此作为近似。
[0233] 用于多词或许多词查询的“尾巴”的益处实际上比将9倍数据放入2倍空间更大,这是组合算符的效果。
[0234] comb_TopN
[0235] TopN变量comb_TopN利用记录计数(或任意其他组合算符)来代替排名。例如,假设理想的是通过对进入链接使用给定锚文本的数量进行唯一计数,并记住这些进入链接的前N个,计算最重要的导入链接锚文本。网页http://skrenta.com/的输入数据将看起来像:
[0236] Rich Skrcnta:
[0237] Richard Skrenta:
[0238] First Virus Inventor:
[0239] 由于记录计数的数据很小,因此,对于整个互联网的每个网页都这么做会很划算。并且,由于记录计数是对独特项目计数,因此,网页可以重复爬取,并且这些记录计数可以在没有双倍计数任何内容的情况下进行更新。
[0240] F.压缩
[0241] 压缩方法1
[0242] 本专利中描述的数据库是公知为“自由模式”的数据库类型。自由模式的数据库是非常灵活的,但是会遭受数据规模膨胀的影响,这是因为列的名称和类型需要设法存储在每行中。相反,基于模式的数据库仅需要为整张表存储一次该信息。并且,知道给定列存在于表中每行的基于模式数据库可以压缩它:例如,布尔变量可以由1位代表。在自由模式数据库中,一般的实现方式需要在布尔列所在的数据库的每行中存储布尔列的名称,类型,以及它的值。
[0243] 为了将自由模式数据库压缩为和基于模式的数据库一样大,我们已经建立了专用的压缩引擎,其由列的名称和类型的加注版本的“压缩表”来驱动。可以压缩在压缩表中发现的实际数据中任何列的名称。没在压缩表中出现的任何列的名称可以存储为(名称,类型,值)三元组。版本数允许压缩表在数据发展时,随着时间发展。压缩子程序可以使用任何版本产生最小的输出。解压缩子程序可以使用压缩表中所有版本的知识,以解压缩由压缩子程序产生的任何内容。
[0244] 作为示例,考虑该压缩表:
[0245] 压缩表1
[0246] 版本1
[0247] 列的名称:列的类型:
[0248] ′名称′短字符串
[0249] ′年龄′小整数
[0250] 版本2
[0251] ′名′短字符串
[0252] ′姓′短字符串
[0253] ′年龄′小整数
[0254] 示例1输入:
[0255] 姓名′ Greg Lindahl′
[0256] 年龄 39
[0257] 为了压缩输入的示例1,压缩程序确定利用来自压缩表的版本1,以给出最小的输出。
[0258] 输出的示例性实施例是:
[0259] 压缩表ID,2字节,值1
[0260] 版本,2字节,值1
[0261] 第一固定列:′名称′,短字符串
[0262] 长度,2字节,值12
[0263] 值,12字节,值′Greg Lindahl′
[0264] 第二固定列:′年龄′,小整数
[0265] 值,2字节,值39
[0266] 额外列的计数,2字节,值0
[0267] 其总长度为20个字节。(选择的这些数据类型的字节长度和下述示例都是任意的,仅用于示意)。
[0268] 其尺寸很小的原因在于列的名称和类型(‘姓名’,’年龄’)都由压缩表ID和版本指定,不必存储在压缩的输出中。解压缩子程序将能够查阅压缩表的拷贝以查找和压缩子程序发出的相同顺序的固定列。
[0269] 示例2输入:
[0270] 额外′Blekko′
[0271] 名′Greg′
[0272] 姓′Lindahl′
[0273] 年龄39
[0274] 在第二个示例中,压缩程序可以看到该输入最好由版本2压缩,其中一列’额外’不作为固定列的名称存在。
[0275] 压缩表ID,2字节,值1
[0276] 版本,2字节,值2
[0277] 第一固定列:′名′,短字符串
[0278] 长度,2字节,值4
[0279] 值,4字节,值′Greg′
[0280] 第二固定列:′姓′,短字符串
[0281] 长度,2字节,值7
[0282] 值,7字节,值′Lindahl′
[0283] 第三固定列:′年龄′,小整数
[0284] 值,2字节,值39
[0285] count of additional columns,2bytes,1
[0286] 列名称长度,2字节,值5
[0287] 列名称值,5字节,值‘额外’
[0288] 列类型,2字节,短字符串
[0289] 列值长度,2字节,值6
[0290] 列值值,6字节,值′Blekko′
[0291] 该压缩结构的总大小为40字节。
[0292] 示例2的相同输入数据的未压缩存储实施例的示例性表示将必须记录为每行中存在的每列的(名称,类型,值)三元组:
[0293] 三元组计数,2字节,值4
[0294] 列名称长度,2字节,值6
[0295] 列名称值,5字节,值“额外”
[0296] 列类型,2字节,短字符串
[0297] 列值长度,2字节,值6
[0298] 列值数据,6字节,值′Blekko′
[0299] 列名称长度,2字节,值10
[0300] 列名称值,10字节,值“名”
[0301] 列类型,2字节,短字符串
[0302] 列值长度,2字节,值4
[0303] 列值数据,4字节,值′Greg′
[0304] 列名称长度,2字节,值9
[0305] 列名称值,9字节,值“姓”
[0306] 列类型,2字节,短字符串
[0307] 列值长度,2字节,值7
[0308] 列值数据,7字节,值′Lindahl′
[0309] 列名称长度,2字节,值3
[0310] 列名称值,5字节,值“年龄”
[0311] 列类型,2字节,短整数
[0312] 列值,2字节,值39
[0313] 这增加至70个字节,正如你所看到的,这比利用压缩表1压缩的示例2的数据要大的多。
[0314] 压缩方法2
[0315] 方法1的缺点在于压缩表和版本必须一致地分配至所有潜在的数据解压缩器,这在一个很大的数据库中将会是非常大数量,其中该数据库具有许多随时间发展的数据库表。作为替换,’编号的短字符串表’将用于压缩数据中的一些“短字符串”。由于列的名称是短字符串,通过仅利用编号短字符串的单张表来压缩所有数据库表是非常有效的。并且,一些列的值可能是在编号短字符串表中能找到的短字符串,因此也可以压缩。
[0316] 随着时间的发展,当新的短字符串变的足够普遍以至于可以从压缩中获益,那么数据库管理员或者自动系统将能够将新的短字符串附加至编号的短字符串表。字符串在表中不能移除或重新编号,除非公知的是没有压缩的数据指向这些特殊的字符串,因为这将引起老的压缩数据被销毁。
[0317] 该技术应用于上述示例2的输入数据的示例性实施例如下给出。通过设定为短字符串2-字节长度的高位来指示下述事实,即给定的短字符串应当在编号的短字符串表中查询。
[0318] 编号的短字符串表:
[0319] ′Greg′ 1
[0320] ′Lindahl′ 2
[0321] ′Greg Lindahl′ 3
[0322] ′姓名′ 4
[0323] ′名′ 5
[0324] ′姓′ 6
[0325] ′年龄′ 7
[0326] ′Blekko′ 8
[0327] 压缩的数据的表示:
[0328] 三元组的计数,2字节,值4
[0329] 列名称长度,2字节,值5(高位未设置)
[0330] 列名称值,5字节,‘额外’
[0331] 列类型,2字节,短字符串
[0332] 列值长度,2字节,值6+高位设置
[0333] 列值数据,2字节,值8,对应于‘Blekko’
[0334] 列名称长度,2字节,值10+高位设置
[0335] 列名称值,2字节,值5,对应于‘名’
[0336] 列类型,2字节,短字符串
[0337] 列值长度,2字节,值4+高位设置
[0338] 列值数据,2字节,值1,对应于‘Greg’
[0339] 列名称长度,2字节,值9+高位设置
[0340] 列名称值,2字节,值6,对应于‘姓’
[0341] 列类型,2字节,短字符串
[0342] 列值长度,2字节,值7+高位设置
[0343] 列值数据,2字节,值2,对应于‘Lindahl’
[0344] 列名称长度,2字节,值3+高位设置
[0345] 列名称值,2字节,值7,对应于‘年龄’
[0346] 列类型,2字节,短整数
[0347] 列值,2字节,值39
[0348] 这对应于压缩长度为43个字节。
[0349] 列内部的压缩
[0350] 上述技术也可以用于压缩具有结构的列的值。在BlekkoDB中,列的值的内容可以是归纳的数据结构,例如perl散列或python字典。
[0351] 压缩方法的归纳
[0352] 上述的压缩示例利用了有限的一组数据类型。在更一般的系统中,可以使用其他数据类型,例如整数或浮点数字,的编号表,这在下述情况非常有利,即用于浮点字段的整数仅是有限范围的值,例如美国电话的区域码数值小于256,因此,编号的整数表可以代表它们。
[0353] 上述的压缩示例使用了分类字符串长度字段的高位来发出下述信号,即数据应当在编号的短字符串字段中查询。另一种代表这个的方式是使用不同的类型,即编号的短字符串类型,用以指示需要表查询。这对于没有编码长度的类型,例如整数非常有用。
[0354] G.服务器系统
[0355] 图18是根据实施例,用于示意服务器系统1800的实施例的框图。服务器系统1800可以包括至少一个数据处理器或中央处理单元(CPU)1810,一个或多个可选的用户界面1814,用于和其他计算机、服务器和/或客户端通信的通信或网络接口1820,存储器1822和用于将这些组件彼此耦合的一个或多个信号线1812。用户界面1814具有键盘/鼠标
1816和/或显示器1818。一个或多个信号线1812可以组成一个或多个通信总线。
[0356] 存储器1822可以包括高速随机存取存储器和/或非易失性存储器,例如一个或多个磁盘存储设备。存储器1822可以存储操作系统1832,例如LINUX,UNIX或WINDOWS,该操作系统包括用于处理基本的系统服务和用于执行硬件依赖型任务的程序。存储器1822也可以存储网络通信模块1834中的通信程序。通信程序用于和客户端,例如客户端110(图1),以及其他服务器和计算机通信。
[0357] 存储器1822可以包括用于和分布式数据系统中其他服务器和/或设备通信的广播协议1836。例如,可以依赖广播协议1836将新节点,例如图4中的节点416整合至数据库系统。对于一个服务器(节点)或任务守护进程来说,也可以依赖广播协议1836和其他节点或节点的组件通信,用于读取,写入或更新在数据库系统各个位置的磁盘上本地存储的数据。
[0358] 存储器1822也额外地包括用于服务器1800的几个应用以参与分布式数据库小区,例如蜂群系统100,300,500。存储在存储器1822中的应用包括各种任务守护进程1840,其和其他服务器上的任务守护进程1840合作,以在本地或全球完成系统任务。前述部分描述的组合算符1842和蜂群算法1850可以存储在应用1838中。并且也包括读取/写入操作1844,1846,其确定任务守护进程1840的协议以从行提取数据和写入数据至行,包括各种操作,例如get(),set(),以及nextrow()请求。应用1838额外地包括搜索功能1852和合并功能1854,用于存储,合并,搜索和更新操作,以管理在服务器系统1800中存储的数据。
[0359] 存储器1822也包括数据存储器1858以存储由应用1838或其他服务器和设备的应用访问和管理的数据。存储的数据包括数据表1860和交易记录1862,其中交易记录用于存储和记录检索或访问的数据。数据存储器1858包括映射1864,用于存储在数据表1860中存储的数据的散列密钥和行位置(存储桶分区)。数据存储器1858也包括数据,该数据用于搜索和记录由搜索引擎检索的数据,例如爬取/标签索引1870,运算符库1872,标签库1874,等等。
[0360] 存储器1822也包括用于附加的存储的附加高速缓冲存储器1878和与保持可视化工具1880相关的应用/数据。
[0361] 图18更多的用作存在于分布式数据库系统中的各种部件的功能性描述,而不是所述实施例的结构示意图。实际上,如本领域技术人员所理解的,服务器1800的功能可以分布在大量服务器或计算机上,各种服务器的分组执行这些功能的特殊子集。图18中单独示出的项目可以组合,一些项目可以分割。例如,图18单独示出的一些项目可以在单个服务器上实现,单个项目可以由一个或多个服务器实现。分布式数据库系统中的服务器的实际数量以及在服务器中如何分配特征会在各个实施中彼此不同,并且部分取决于系统中存储的信息量和/或系统必须处理的数据交通量。
[0362] 图19代表多个守护进程应用1904,其可以包含在,但不限于,图18的服务器系统1800中。在其他部分将详细描述一些守护进程应用,例如复制1912,修复1914,垃圾1924,映射作业1932,存储桶1936,读取器1938和写入器1940。守护进程应用列表附加地包括,但不限于下述:
[0363] 网络服务器1916-http服务器的基于框架的实现方式。
[0364] 爬取器1920,图像爬取器1922,现场爬取器1923-分别爬取网页,图像,频繁更新的网页的基于框架的服务器。
[0365] 全球服务器1926-用于存储复制到集群的每个节点的数据。由于访问该数据不必在网络上发生,所以可以快速读取该数据。
[0366] 记录服务器1928-用于收集有关数据库系统的统计数据,并在数据库中记录该数据。
[0367] 文件服务器1930-用于通过网络发送文件,例如当修复守护进程拷贝存储桶以产生新的存储桶副本时。
[0368] RAM守护进程1934-在存储器中保存数据库表的子集用于快速访问。
[0369] 心跳守护进程1942-用于保持存储桶至节点的映射,以及用于和其他节点交换该映射信息。
[0370] 监视系统1944-用于监视数据库系统的性能和可用性。
[0371] 存储器溢出(OOM)守护进程1946-监视过程的存储器使用,如果数据库系统的存储器很少,那么决定哪个过程应当被禁止。结合如何组织分布式数据库系统的知识,做出这些决定,不像由Linux OOM系统做出决定。
[0372] Check-r 1948-监视数据库系统的R-level(复制级别),并宣告系统中节点和磁盘的出现和消失。
[0373] H.客户端系统
[0374] 图20示意了客户端系统2000的实施例的框图,例如由客户端110(图1)使用的系统。该客户端系统2000包括至少一个数据处理器或中央处理单元(CPU)2010,一个或多个可选的用户界面2014,用于和其他计算机、服务器和/或客户端通信的通信或网络接口2020,存储器2022以及用于这些组件彼此耦合的一个或多个信号线2012。该用户界面2014具有键盘/鼠标2016和/或显示器2018。一个或多个信号线2012可以组成一个或多个通信总线。
[0375] 存储器2022可以包括高速随机访问存储器和/或非易失性存储器,例如一个或多个磁盘存储设备。该存储器2022可以存储操作系统2032,例如LINUX,UNIX,或WINDOWS,其包括用于处理基本的系统服务和执行硬件依赖型任务的程序。存储器2022也可以存储网络通信模块2034中的通信程序。通信程序用于和服务器1800(图18)通信。
[0376] 存储器也可以包括下述元件,或者这些元件的子集或超集:浏览器或浏览器工具模块2036,搜索辅助模块2038,以及一个或多个用户或内容网站配置文件2070。通过监视用户活动,由搜索辅助模块2038可以产生配置文件2070,非常类似cookie,或者基于用户或内容网站访问或相关的一个或多个URL的内容,远程产生该配置文件。搜索复制模块2038可以包括下述元件,或者这些元件的子集或超集:用于监视用户输入或发送搜索查询的发送/监视模块2042,用于接收搜索结果的搜索结果接收模块(未示出),以及用于显示搜索结果的显示模块2044。搜索模块2038可以附加地包括运算符(“/”)的指令2040,以及用于显示可选择的内容/网站标签2048的过滤显示器2046,其以列表或选项卡显示。
在客户端系统2000耦合至本地服务器计算机的实施例中,存储器2022中的一个或多个模块和/或应用存储在与用户不同位置的服务器计算机中。存储器2022可以附加地包括用于附加存储的高速缓冲存储器2072。
[0377] 上述识别的每个模块和应用对应于执行上述一个或多个功能的一组指令。这些模块(即,指令集)不必实现为单独的软件程序,过程或模块,因此,这些模块的各种子集可以在各种实施例中被组合或重新布置。在一些实施例中,存储器2022或者1822可以存储模块的子集和上述识别的数据结构。例如,存储器2022可以在客户端数据存储器2056中存储运算符2058,交易记录2060,由用户访问的爬取/标签索引信息2062,以及标签库2064。在其他实施例中,数据存储器2056中存储的所有数据存储在服务器1800的存储器1822中。并且,存储器2022或1822可以存储附加的模块和上面未描述的数据结构。
[0378] I.搜索概况
[0379] 蜂群数据库系统350的一个应用是搜索引擎,用于应答用户做出的查询。显示的结果具有得到的URL,内容标签,网站标签,以及可选择的文本摘要。用户可以有选择地指定运算符,其专用于超出仅利用关键词获得的结果。运算符隐藏在特定的句法中。搜索结果的另一个界面是提高数据用于搜索引擎优化工业中。
[0380] 组合算符
[0381] 图14A中所述的通用组合算符在搜索和其他领域中有大量应用。组合算符1408不仅通用于在操作,例如写入期间减少交易量,而且组合算符1408也可以用于概括数据,尤其在搜索领域。如下面进一步所述,组合算符1408允许更有效地收集数据以及实时产生概要信息,同时减少产生概要所需的I/O量。
[0382] TopN和排名
[0383] TopN 1424是用于将数据项排名的另一组合算符1408。给定一系列数据项和排名,TopN 1424保留前N个数据项和排名。在一些实施例中,TopN 1424可以用于在映射作业中检查的项目(这很普遍),或者附加地,TopN 1424可以递增性地用于长期客户端检查的项目,例如爬取器。“递增”或“流动”TopN 1424的重要性在于它可以在不必运行映射化简作业并等待应答很长时间的情况下,被计算出来。TopN 1424也可以联机计算,例如在爬取器中同时爬取网络。
[0384] TopN 1424运算符可以用于保持网页列表,这些网页是给定词的最好的应答。在这种情况下,数据项可以是网页URL,排名是网页中单词的重要性。通过为字典中每个词保持单独的TopN 1424列表,我们具有粗糙的搜索引擎索引。
[0385] 记录文件
[0386] 搜索和其他领域中使用的组合算符1408的另一示例是记录文件分析。大多数大的网站在记录文件中为每次网络“点击”产生一行文本,记录时间,哪个页面被提取,请求来自的IP地址,以及发送成功或失败。这些记录文件每天在每个网络服务器设备共计数十亿字节,每天网站拥有者会想知道出现了多少次点击,发现了多少次故障,以及例如请求来自哪个国家。通常通过将记录文件从每个服务器拷贝到中心设备,并在所有数据上运行日常的打包作业,来产生这些概要项目。该打包作业需要一天中的大部分时间来运行,因此直到数据被取走后的两天才能获得应答。
[0387] 通过组合算符1408,该数据可以更有效收集,实时产生概要信息,并减少产生概要所需的I/O量。立即地,记录文件数据可以通过附加组合算符1428,增加至数据库的表中,其中附加组合算符将文本行附加至已有的一组文本行。接下来,附加了该数据的网络服务器也可以立即利用组合算符1408计算概要信息。例如,comb_add 1430可以用于计数来自每个国家的请求,comb_add 1430可以用于计数总点击数,等等。由于组合算符组合这些数据,因此产生该信息不会导致数十亿次的处理,仅仅是数百万次。
[0388] 由于所有概要实时完成,因此,在附加记录文件条目之后,仅经过很短的时滞,可能是五分钟,而不是两天内,获得概要应答。
[0389] 将组合算符应用至垃圾邮件
[0390] 组合算符1408的另一用途包括实时检测垃圾邮件。检测垃圾邮件的一种方法是基于Email标题和内容计算一组“签名”,并在发送至许多人的大量Email中检查是否存在相同的签名。Logcount()组合算符1422用于对有多少收件人已经收到给定签名进行计数。当该计数很大时,该签名可能被怀疑为是垃圾邮件。另外,每个签名都对多少个IP地址已经发送过该签名具有记录计数。这有助于确定垃圾邮件是否通过开放转发(通过仅有的几个IP地址高速发送)发送或者经由僵尸网络(在大量IP地址上低速发送)发送。
[0391] 查询服务
[0392] 通常在搜索引擎中,给定词的最高排名的页面保存在很小的头列表中,更长的列表称为深列表(deep list)。最简单的查询通过仅查阅头列表应答,其比查阅深列表更快。通过将所有查询词的列表交叉,来应答多词查询。再次,如果交叉头列表提供了足够的应答,那么将比交叉深列表更快的提供结果。存储在高速缓冲存储器中的搜索结果用于公共的查询。
[0393] 除了在字典中存储每个词的头列表和深列表之外,可以为公共的词对(例如,’iron chef’),和公共词组产生头列表和深列表,其中公共词组由“连接词”,例如“the”和“or”连接的词对构成。该词组的示例是“Jack the Ripper”或“William of Orange。”[0394] 由TopN组合算符代表这些头列表和深列表,其中排名是网页的排名。例如,“Jack the Ripper”的头列表和深列表将根据这些网页上词“Jack the Ripper”的排名来对网页进行排名。
[0395] 附加的头列表和深列表也通过不同标准来排名,例如根据从最新至最久的日期排序。这些替代的列表用于应答查询,例如“obama/date”,其中运算符/日期指定用户希望按照日期排序的应答。用于该排序的日期是“时间日期”小方面,即完成博客发帖或公布新文章的日期。
[0396] 除了基于网页相关度或质量,或者网页上的日期排名之外,可以使用由一些运算符调用的其他依赖查询的排名。/local运算符试图返回物理位置上接近查询的实体的网页,例如“pizza/local”将返回距离用户位置很近的披萨餐馆。
[0397] 爬取器应用
[0398] 爬取器应用监视该系统,并当系统看起来在合并上落后时,如“寻找100”的值,或者在数据库中出现“写入”所需的时间,或其他值所示,那么爬取器将其本身暂停。爬取器利用大量的启发式方法确定将来爬取哪个页面。由于网络上具有数万亿个URL,并且仅有几十亿个可以被爬取,因此,仅爬取最重要的URL是重要的。当链接中的URL首次在网页上可见时,那么在表中产生行,并由该新URL设定密钥,其包含一组记录计数组合算符。唯一的引用URL的数量和引用URL的唯一的地理位置的数量(利用引用域的GeoIP地址确定的)被计数。该计数位于地理位置的几个级别,包括国家,美国,和美国城市,引用域的唯一的C类IP网络的数量(32位IP地址的前24位),以及导入链接的唯一的锚文本。通过利用该数据的记录计数组合算符,可以在重复爬取URL时,获得不必双倍计数任何内容的好处。这些计数全部联机完成,并可以由爬取器使用来确定接下来爬取哪个URL。
[0399] 除了这些记录计数组合算符之外,也保留了TopN组合算符,例如进入链接(由进入的主机排名来排名),以及由进入链接的主机排名来排名的进入锚文本的TopN。comb_TopN组合算符可以用于由引用的URL的记录计数来排名的进入锚文本。
[0400] 除了上述独立的URL的质量数据之外,也为互联网上的每个主机保留类似的数据。
[0401] 除了用于URL和主机的数据之外,也为其他值保留其他组合算符。一个示例是“广告联盟(adsense)id”。显示谷歌广告的网页使得广告商的id在网页来源中可见。URL的TopN和主机的另一TopN用于遇到的每个广告联盟id。以后,如果一些网页由于具有伪造内容和大量广告而被处罚,那么来自相同广告联盟id的所有网页都会被处罚。在SEO网页中,会为搜索引擎的用户示出和他们查找的网页具有相同广告联盟id的其他网页。
[0402] 另一个示例是“可疑的共同主机”。对于每个IP地址来说,保留映射至该IP地址的域的TopN。如果后来确定一些域是坏的,那么由于具有坏的邻居,而处罚相同IP地址上的其他主机。
[0403] 在爬取器爬取网页之后,它立即运行若干编码(称为“分类器”),其用于确定网页是否具有各种属性,这些属性称为“小方面”。例如,在试图确定网页使用的语言(例如:英语,法语,...)时,执行“语言”的分类器以存储语言小方面。这些小方面可以后来用于排名过程中,也可用于“小方运算符”,这些运算符是用于详细说明搜索查询的类型的运算符。小方面的附加示例包括html要素,例如

标签的内容,色情/非色情/未知色情/,时间日期,具有视频(嵌入的视频),具有音频(嵌入的音频),具有(博客)评论(嵌入的博客),具有图像(嵌入的图像),具有图像库,个人网页,博客,新闻,政府网页,大学网页,购物网页,抒情歌曲或诗歌,论坛网页,回顾网页,具有正面/负面感情的网页,倾向于自由政治的网页,倾向于保守政治的网页,等等。

[0404] 更复杂的小方面的其中一个的示例是由小方面运算符“/date”小方面运算符使用的时间日期小方面。许多网页在其上具有日期,包括显示当前日期和时间的网页。错误地解释日期已经引起股市恐慌,例如最近错误的宣布美国联合航空公司已经破产。因此,我们的日期小方面分类器要认真考虑下述因素,例如页面上的日期,嵌入在页面URL上的日期(普遍用于博客),以及RSS提示的日期(feed),而不考虑页面是否是博客的索引页面或实际的博客入口。
[0405] 另一个示例是购物网页的检测。仅涉及产品不是充分的过滤器。在一些情况下,如果网页具有附加限定要素的要素,例如能够购买的产品的名称,价格,购物车,以及“购买”按钮,那么可以判断该网页是购物网页。
[0406] 除了在爬取网页时实时确定小方面,也可以在批处理,例如映射作业中计算该小方面。如果算法改变,以及用于已经爬取的网页的小方面需要重新计算,这就是有用的,这也可以用于其值取决于查看多个网页的小方面。
[0407] 框架版本-FSM
[0408] 框架是写入线程代码的不同方式。通常,线程借助操作系统的功能,在相当低的平实现,或者通过每个过程的单独的堆栈在最低点实现。但是,线程代码很难编写,很难理解,并经常效率很低。
[0409] 线程的替代物是利用一组有限状态机(FSM)。框架是用于表述一组有限状态机的更有效方式。例如,考虑爬取器。对于给定的URL,爬取器寻找网络主机的IP地址,检查robots.txt,抓取实际页面,运行针对返回数据的各种分类器,然后利用爬取的数据更新数据库中各种表。在线程实施方式中,一个线程用于每个同时被爬取的页面。这些线程需要多线程库与数据库对话,并且调用需要异步版本,所有这些版本需要复杂编码。
[0410] 通过FSM,爬取任务可以分为N个子任务,每个子任务由没有阻断就能完成的操作组成,例如直到为IP地址发布请求的任务。然后,下一个子任务将采用IP查询的结果并继续,直到完成所有子任务。FSM可以表述为单线程,并利用单线程库访问数据库,但是这些任务和子任务的编码会很长和很复杂。
[0411] 框架是表述FSM的有效方式。在FSM码的框架版本中,指针定位于需要阻断的点,直到返回结果。该指针允许过程返回到下一个子任务。该框架的编码简化了传统的FSM。框架和蜂群系统350,500整合,使得,例如,如果子任务完成了N个get()操作,下一个子任务想获得这些结果,那么框架系统将不会运行下一个子任务,直到获得所有N个get()操作的结果。这和传统的FSM类似,但是框架+蜂群系统追踪N个get()结果需要对于程序员来说是透明的。框架也允许程序员写入常规码,并以多线程事件驱动码结束。
[0412] 除了爬取器之外,网络服务器利用了许多框架。通常,网络服务器(例如Apache或Microsoft ISS)产生许多线程,或过程,或两者都有,以应答许多请求。框架的使用除了使得来自数据库的许多get()容易编程之外,也允许处理很高的负荷。作为框架有用的示例是,当网络服务器接收若干通信流时,其中一些快速应答是理想的。例如,考虑从用户,RSS阅读器,以及爬取器获取点击的网站。理想的是比RSS阅读器更快,比爬取器更快的应答用户。在框架系统中,分配每个访问类别的优先级,该框架系统在每次机会中会挑取优先级最高的工作来完成。
[0413] 过程IPC
[0414] 过程IPC通过相当传统的“主动消息”的范例来完成。perl散列(等价地,Python字典)被转换为利用cram()的一系列线性字节,并且在远端,程序被调用(由散列中的元素指定),并给出未填满(uncrammed)的散列作为参数。类似cram()/uncram()的程序经常被称为“串行/解串行”程序或“参数整理”程序。Cram计算弱的校验和,其可以首尾相连地校验以防止讹误。(更强壮的/更贵的校验和用于写入磁盘的数据。)
[0415] J.用户界面搜索
[0416] 概况
[0417] 图21是根据一些实施例的搜索查询框2110的屏幕显示2100的示例。屏幕显示2100示意了用户在客户端,例如图1的客户端110看到的显示2100的示例。在一些实施例中,用户输入关键词,快捷方式,运算符,和/或其他搜索文本以及符号,这些统称为“搜索词”,来进行搜索查询。一旦用户输入一个或多个搜索词,用户选择(例如点击)搜索按钮2112用于,例如在前面部分所述的分布式数据库系统(统称为“搜索数据库”)的任意一个中,启动数据库搜索。在一些实施例中,名字,题目,公司标志,或者任何其他标记,例如TM
“blekko ”,可以紧挨着查询框2110显示。在一些实施例中,普遍访问的网站,主题,分类,更新,简短新闻或者任何其他用户感兴趣或与题目2108相联系的标题的列表可以在“检查这些:”标题2124下面显示。在一些实施例中,列为标题2124的关键词或搜索词被高亮或加粗,并在高亮或加粗文本附近提供简短描述。在一些实施例中,标题2124包括一组输入到查询框2110中的搜索词以搜索高亮主题或分类。在一些实施例中,用户选择“查看更多”选项2126以查看在搜索数据库中进行有效搜索的运算符,快捷方式和指令的列表。
[0418] 图22A是根据一些实施例的搜索结果的屏幕显示2200的示例。在一些实施例中,当在查询框2110中输入搜索词并选择搜索按钮2112时,在屏幕显示2200中显示搜索结果列表2220。在一些实施例中,显示项目的总数量和搜索结果2212的大小。例如,响应于搜索词“tiger woods”,在列表2220中显示50个项目中的12个。列表2220的大小是460K。与列表2220中每个搜索结果项目对应的数量指示在项目的总列表2220中,各个搜索数据库将一个特定网站排在第几位。在一些实施例中,列表2220显示在网络选项卡2214,其是显示2200中七个选项卡的选项中的一个。显示2200可以使用7个以下的选项卡选项,或者作为替换,可以使用7个以上的选项卡选项。网络选项卡2214显示由搜索数据库确定,来自互联网的最相关的“网络”标题的列表2220。网络选项卡2214和其他选项卡在后续部分会进一步描述。搜索可以进一步改进,或者在显示2200的查询框2110中输入新的搜索。在一些实施例中,可以选择附加的运算符,以查看运算符,快捷方式和指令的列表,从而进行附加搜索。
[0419] 图22B是根据一些实施例,来自图22A列出的搜索结果项目2220的搜索结果项目2222的示例。在一些实施例中,提供搜索结果项目2222,其与标准搜索引擎不同。列表2220中的结果,例如结果项目2222,遵循双行格式。在一些实施例中,第一行专用于结果项目
2222的页面URL标题2230和网站2232的名称。例如,搜索“Tiger Woods”的第一个结果项目2222的第一行包括页面UR L的标题2230“Tiger Woods”和网站标题2232“Wikipedia,the free encyclopedia。”页面URL的标题2230是页面URL的超链接,网站标题2232是顶级网站URL的超链接。在一些实施例中,每个搜索结果项目2222的第二行包含三个不同的元素:内容标签,网站标签和可选摘要。
[0420] 图22C是基于搜索查询,显示搜索结果2240的另一实施例。在一些实施例中,不使用图22A的选项卡特征2214,取而代之的是可选择的内容标签的筛选列表2242,其中该内容标签与用于组织搜索结果2240的各种分类相关。在这种情况下,“tiger woods”的搜索结果显示为内容标签列表(在下一部分描述),其包括点击数和与标题“tiger woods”相关的位置。筛选列表2242是基于在框2110中输入的搜索查询,动态产生的内容标签列表,用于将产生的搜索组织为各种可选分类。对于一些搜索查询来说,筛选列表2242可以是较小或较大的列表,这取决于与查询相关的网站数和网站分类。筛选列表2242中的每个项目在括号中显示与内容标签项目相关的网站数。当用户在筛选列表2242中选择内容标签时,浏览器显示那个内容标签的项目列表。在一些实施例中,显示项目列表,或者按照与项目的子组的相关度顺序对项目列表排序。
[0421] 内容标签
[0422] 设计内容标签以给予用户辨识内容的类型,其中该内容包含在特殊的搜索结果2222中。可以将搜索结果(从搜索查询获得的项目)组织为内容标签列表,该列表可以包括,但不限于下述:
[0423] ○新闻-由数据库将结果网站确定为新闻来源
[0424] ○博客-由数据库将结果网站确定为博客
[0425] ○RSS-结果网站具有RSS提示
[0426] ○评论-结果网站具有用户产生的评论,作为其内容的一部分
[0427] ○音频-结果网站播放音乐或具有音频能力
[0428] ○视频-结果网站播放视频或具有视频能力
[0429] ○商店-结果网站具有电子商务能力(如果可以,也显示价格)
[0430] ○图像-结果网站包括图像
[0431] ○成人-结果网站被确定为是色情的
[0432] ○本地-结果网站的物理位置是已知的
[0433] ○仇恨-结果网站包含仇恨言论
[0434] 内容标签可以是用户感兴趣的任何主题,可以为所有用户或者为一类用户归纳,或者是为一组特定用户定制的,也可以包括来自技术或流行来源的标题。来自流行来源或特别来源的附加的内容标签包含,但不限于,下述:
[0435]
[0436] 内容标签可以作为选项卡项目2214显示,如图22A所示。或者作为标签列表,例如图22C的筛选列表2242所示。当用户选择内容标签2242时,重新显示搜索结果列表2220使得仅显示与选择的内容标签2242相关的项目2222。重新显示的列表2220根据各自搜索数据库的排名(例如,通过相关度)显示。每个内容标签2242可以和每个标签特定的附加信息一起列出。例如,与各个内容标签2242相关的列表的大小也可以显示,例如括号中所示。在一些实施例中,筛选列表2242可以根据主要的内容标签2242,例如“网络”,和内容标签2242的列表子分类,例如日期,运动,视频等等,来进行组织。
[0437] 在一些实施例中,返回查询框2110中的搜索结果“tiger woods”和搜索结果项目2220的一般列表,如果用户选择标记为“movie”的筛选项目2242,那么与“movie”相关的“tiger woods”的搜索结果项目列表2220(例如,有关Tiger Woods,涉及Tiger Woods的电影,等等)将显示在显示2240中。如果用户选择筛选项目“aviation”,那么显示2240将示出与aviation标题相关的“tiger woods”的搜索结果项目列表2220,等等。在一些实施例中,响应于选择的筛选项目的搜索结果列表2220是来自搜索查询,例如“tiger woods”的通用项目列表的搜索结果项目的子组。在一些实施例中,搜索结果列表2220是新的搜索结果,其基于用户输入的查询词,以及一个或多个与从筛选列表2242中选择的筛选项目相关的词。
[0438] 网站标签
[0439] 每个搜索结果,例如结果项目2222的第二行,包含第二组称为“网站标签”的标签。当选择网址标签时,其为用户提供有关结果网站本身的信息。下述包括,但不限于,网站标签列表2302,2404:
[0440] ○链接-显示链接至结果网站的页面
[0441] ○seo-显示用于结果网站的搜索引擎优化数据的主机
[0442] ○rss-显示网站内容的更新和变化
[0443] ○高速缓冲存储-显示根据搜索数据库的结果网站的高速缓冲存储的版本[0444] ○源-显示结果网站的源文档
[0445] ○ip-显示结果网站和在相同地址上的其他网站的ip地址.
[0446] ○排名-显示根据搜索数据库查询的每个结果的排名列表
[0447] ○主机排名-对查询主机而不是页面的排名结果进行重新排名
[0448] ○运算符-根据分类组织查询结果(在下述部分详细描述)
[0449] 图23是屏幕显示2300的示例,用于示出搜索结果2222的内容标签中的一个,rss标签2302。例如,当用户选择结果项目2222第二行中的rss标签2302时,在显示2300中示出rss的提示页面。rss提示页面包括rss提示2304的简要概括以及加入该特殊rss提示的指示。用户可以获得特殊的搜索结果项目2222的更新或者查看结果项目2222页面上内容2308的最近的变化。该rss提示可以额外的包括最新的日期更新2306。当其他内容标签对于特殊的搜索结果2222可用时,在和rss标签2302相同的部分会列出其他标签。
[0450] 图24A是根据一些实施例的,搜索结果2222的选择的LINKS标签2402的屏幕显示2400的示例。对于来自“tiger woods”搜索的结果项目2222来说,显示四个网站标签seo,链接,高速缓冲存储,和源。当选择LINKS标签时,显示链接至搜索结果项目2222的页面列表2408。在一些实施例中,根据搜索数据库的排名计算来显示链接。
[0451] 图24B示出根据其他实施例,显示搜索浏览器2401的替换实施例。如前所述,图24A中显示为选项卡的内容标签现在作为标签列表2442显示。当用户选择“链接”网站标签时,浏览器2401显示来自与“链接”相关联的搜索结果的项目列表,并且显示的结果包括列表2242中附加的内容标签。在一些实施例中,可以在“链接”的分类内选择附加的内容标签以改进或调整搜索结果列表至与选择的内容标签相关的项目。
[0452] “运算符”网站标签用于显示和编辑哪个运算符包括该URL:列表运算符,小方面运算符等等。列表运算符的列表可以由用户编辑,以建议增加新的或删除现有的运算符。
[0453] 图25是根据一些实施例的,搜索结果2222的选择的CACHE标签2502的屏幕显示2500的示例。搜索结果2222的高速缓冲存储的页面包括搜索结果项目2222的URL2506以及显示的高速缓冲存储网页的内容2508中高亮的搜索词。URL2506也包括高速缓冲存储的页面的日期。内容2508示出了之前在2008年12月2日发布的URL网站2506的数据。
[0454] 图26是根据一些实施例的,搜索结果2222的选择的SOURCE标签2602的屏幕显示2600的示例。因此,源代码2608用于搜索结果项目2222。
[0455] 内容标签和网站标签,为用户扩展了在其他数据库系统中不是典型地可获得的附加信息。用户通过点击鼠标访问详细信息,该信息不仅包括搜索项目的内容,而且包括有关各个网页的信息和其他技术信息。用户通过构造其优选项(位于每个页面的顶端,未示出)来确定显示哪个内容或网站标签。
[0456] 可选摘要
[0457] 在一些实施例中,搜索结果浏览器通过不显示结果列表2220中每个项目的摘要,将其搜索结果的显示压缩为两行。摘要是网站结果页面2222的一部分,其包含原始输入的查询词。在一些实施例中,不从搜索结果2220中省略摘要。图27是根据一些实施例,示出扩展形式的结果网站网页2222的屏幕显示2700的示例,其包括相应的摘要部分2704。每个结果网站网页2222的第二行包括扩展链接2702,当被选择时,其显示(a)特殊结果网站2222的摘要2704,和(b)该特殊结果网站2222的页面URL 2706。在一些实施例中,一旦点击扩展链接2702,改变扩展2702以读取“折叠”(未示出)。如果用户点击折叠链接,该特殊结果网站2222的摘要2704和页面URL 2706隐藏,结果网站2222的显示返回双行显示。可以理解,显示2700的另一实施例可以不包括一行内容选项卡,但是作为替换,可以包括内容标签列表,如图22C和24B所示。
[0458] 在一些实施例中,用户可以扩展或折叠结果列表2708中的单个结果网站2222。在其他实施例中,当用户选择搜索显示2700的右上的“全部扩展”按钮2710时,整个结果列表2708可以扩展。当全部扩展按钮2710被选择时,显示的结果列表2708中所有的结果显示(a)其摘要(未示出)和(b)其各自的页面URL(未示出)。一旦点击,全部扩展按钮2710变为读取“全部折叠”(未示出)。如果用户点击全部折叠按钮,结果列表2708中每个网站的摘要和页面URL隐藏,结果列表2708中所有网站返回至双行显示。
[0459] SEO信息
[0460] 图28是根据一些实施例的,搜索结果2222的选择的SEO标签2802的屏幕显示2800的示例。搜索结果2220的一个网站标签包括SEO标签2802。如上所述,当用户选择一个网站标签2402时,例如SEO标签2802,那么提供有关产生的网站2222本身的信息。例如,当用户选择SEO标签2802时,显示SEO信息。SEO信息包括有关分布式数据库(例如,搜索引擎)查看该结果网站页面2222的方式的很多信息,该信息包括各种有关页面的技术信息。在显示2800中有SEO页面的4个主要部分:概况2810,链接2812,域2814,以及区域2816。
[0461] 显示的SEO页面2800中的概况选项卡/页面2810提供了查询的结果页面的概况。概况选项卡2810是SEO页面2800上的默认选项卡,其示出了收集的有关结果网站页面222的各种信息(例如,包括,但不限于,题目,描述,语言,CMS(内容管理系统,例如,WordPass或者Drupal),最后爬取日期,页面长度,总的导入链接,页面排名,页面导入链接的IP的物理位置,等等)。由各种图形和表格支持SEO信息。
[0462] 与链接2812相关的SEO页面2800上的三个选项卡包括导入链接,导出链接以及内部链接的信息。这些选项卡中的每一个提供详细信息,该信息是关于与结果网站页面2222相关的链接的类型和属性。导入链接选项卡显示在爬取中链接至该特殊结果网站页面
2222的所有页面,包括,但不限于,与这些链接相关联的锚文本(如果有的话),这些链接的源IP,这些网站的数据库排名,其他链接至结果网站页面2222的页面,等等。
[0463] SEO页面2800上的导出链接选项卡/页面提供类似的有关链接至第三方URL和/或主机的信息,该链接由特殊网页产生。SEO页面2800上的内部链接提供类似的有关链接至相同主机内的URL的信息,该链接由特殊的结果网站页面2222产生。对于这些链接选项卡2812中的每一个来说,由各种图形和表格支持提供的信息。
[0464] 除了取代提供特殊的页面URL的信息之外,SEO页面2800上的域选项卡/页面2814与概况页面2810相似。域页面2814为整个域提供相同的信息。和其他选项卡2810,
2812一起,由各种图形和表格支持域页面2814上的信息。
[0465] SEO页面2800上的区域选项卡/页面2816提供有关爬取器(未示出)如何解析特殊的结果网站页面2222上的信息的信息。收集的信息以及该信息是否用于为那个页面2222和/或其他相关页面分配排名都在区域页面2816上显示。区域页面2816采用彩色编码以至于红色区域是数据库排除或忽略的页面区域,绿色区域是考虑或包含的区域。由各种图形和表格支持区域页面2816上的信息。
[0466] 可以理解,由选项卡组织的内容也由内容项目列表,例如前述实施例示出的筛选列表来组织。
[0467] 运算符-概况
[0468] 用户与搜索引擎的交互典型地从用户产生查询并通过查询输入框提交至引擎开始,并且通过显示一组结果应答该查询。经常是,用户查找的东西不是示出的结果,因此,用户改进他或她的查询以产生一组新的结果。该过程反复进行直到获得一组正确的结果(从用户的角度)。
[0469] 当前,为用户提供的在该过程中起帮助作用的工具仅是用户编制的关键词。前面部分描述的分布式数据库提供更全面的搜索结果,其允许用户从多个信息中选择,其中该信息包括内容特定的信息和有关内容来源的技术信息。蜂群构造的组织结构提供有力的搜索工具,用于允许用户快速找到他们要查找的结果。
[0470] 图29A-29B和30A-30B是根据一些其他实施例的结果网站页面2222的屏幕显示2900,3000的示例。图29A-29B和30A-30B包括运算符2960,3060,其用于扩展搜索经验至关键词搜索之外。运算符2960,3060本身包裹在由前述数据库,以及任何构造为使用运算符2960,3060的其他数据库系统结构辨识的特定句法中。在一些实施例中,用户对任何查询都附加“/”符号,然后是选择的运算符2960,3060。例如,如果用户仅对查询框2910中指示的查询“Tiger Woods”的新闻文章感兴趣,那么提交的搜索查询是“Tiger Woods/news”。
用于将搜索仅限制在新闻文章的运算符2960是“/news”。如果用户仅对搜索博客结果感兴趣,那么用户将提交“Tiger Woods/blogs”,其中用于将搜索仅限制在博客的运算符3060是“/blogs”。已经发展了运算符,例如运算符2960,3060的许多类型和分类,还会继续发展。下面是当前可用的运算符的几个列表。但是,可以理解,将会继续发展出更多的运算符,因此,运算符不限于下述提供的列表中。
[0471] 图29A和30A显示搜索结果,其用于组织内容或运算符,例如运算符2960,作为运算符选项卡2916,3016。在一些实施例中,运算符2916,3016可以包括和内容标签以及内容筛选相同类型的内容或标题,或者主题可以和前述部分所述的内容标签和内容筛选重叠。在一些实施例中,如前所述,由内容标签列表2942,3042(或筛选列表)显示和组织查询的搜索结果,该查询包括运算符2960。内容标签列表2942,3042包括一个或多个由运算符2960指示的标题,其中运算符2960作为查询框2910中的搜索查询的一部分输入。在一些实施例中,内容标签列表2942,3042包括也是普通运算符的预定标签,例如运算符2916,3016。在一些实施例中,内容标签列表2942,3042包括如前所述的更广范围的标题。
[0472] 主流运算符
[0473] 主流运算符。选择初始的一些运算符2916,3016作为最普遍使用的或主流的运算符。可以理解这些普通的运算符2916,3000可以被修改,修正或被其他普通的运算符或与特殊数据库、组或组织相关的普通的运算符代替。普遍使用的运算符可以作为选项卡显示在每个搜索引擎结果页面的顶端,例如在2900,3000显示。这些选项卡包括:
[0474] ●相关性-提供通过确定相关性来分类的结果列表。这是默认选项卡。
[0475] ●日期-提供按照时间顺序分类的结果列表(最新至最老)。记录从网页抽取的特殊的数据,例如在网页上发现的日期。这成为那个网页的“时间日期小方面”的值。选择“日期”选项卡或者使用“/日期”修正符,将根据它们的时间日期排名来显示结果。
[0476] ●新闻来源-提供结果,该结果来自一组编辑选择的确定为新闻来源的来源(可以利用算法确定)
[0477] ●博客-提供结果,该结果来自一组编辑选择的确定为博客的来源(可以利用算法确定)
[0478] ●照片-提供仅来自下述页面的结果,该页面包含通过相片数量和大小来分类结果的相片。
[0479] ●商店-提供仅来自具有电子商务能力的页面的结果,其通过相关性分类。
[0480] ●本地-提供通过与用户物理位置(由用户提交,或者如果没有提交,利用用户的物理IP位置)的接近度分类的结果。
[0481] 当选择运算符组2916,3016中的任意选项卡时,原始的查询会附加相关的运算符句法-例如,如果在搜索“TigerWoods”后选择“新闻”选项卡,查询自动在查询框2910中调整为读取“Tiger Woods/news”。
[0482] 这些内容标签时常对应于运算符。因此例如,如果结果包括内容标签“新闻”,点击“新闻”标签将在相同的查询中开始新的搜索,但是仅用于新闻结果(以及利用/news运算符修正原始查询)。
[0483] 网站标签时常对应于运算符。因此例如,如果用户点击网站标签“链接”,查询变为(a)点击链接按钮的结果网站的URL,以及(b)附加“/links”。
[0484] 在一些实施例中,在数据库/搜索引擎中预先定义运算符,用户不允许创造运算符。在一些实施例中,数据库允许用户输入,并且用户能够创造用户指定的运算符或者设置优选项以创造、修改或删除预先定义的运算符。在一些实施例中,在数据库中可以利用预定定义的运算符和用户指定的运算符的组合。
[0485] 内容运算符
[0486] 在一些实施例中,使用特殊的查询运算符来将搜索限制在特殊标题。例如,“/traffic”提供指定位置的交通情况,“笑话”显示随机笑话。其他标题包括,但不限于,表1中描述的运算符。在一些实施例中,这些特殊的查询运算符提供来自不同数据库的应答结果,即/map查询可能通过显示来自Microsoft Maps的地图来应答,或者/define查询可能通过在特殊字典来源中查找单词来应答。
[0487] 表1
[0488]/calendar 搜索日历中的一天 Thanksgiving/calendar
/define 查询单词的定义 Awesome/define
/help 导航至该帮助页面 /help
/joke 显示随机笑话 /joke
/map 显示特定地点的地图 San Francisco,Ca/map
/quote 显示特定交易符号的股价 BAC/quote
/randquery 搜索随机查询 /randquery
/traffic 显示特定地点的交通情况
San Francisco,CA/traffic
/weather 显示特定地点的天气 San Francisco/weather
[0489]
[0490] 小方面运算符
[0491] 在一些实施例中,某些运算符,小方面运算符,在特殊类型的搜索中起辅助作用,例如,通过“anchoronly”将搜索仅限制在锚文本,以及通过包括运算符“/blog”将搜索仅限制在博客网站。一些小方面运算符可以暗示与平常不同的排名算法。例如,/porn搜索可能根据页面中图片的尺寸和数量将URL排名。这将使结果偏向于免费的图片库,而不是付费的色情网站的入口页面。表2中列出的小方面运算符示出了小方面运算符的全面列表,但不限于此。
[0492] 表2
[0493]
[0494]
[0495]
[0496] URL运算符
[0497] 在一些实施例中,搜索被限制在URL运算符,如表3所列出的。例如,“/seo”产生特殊URL的SEO网页。其他URL运算符包括,但不限于,表3中的运算符。
[0498] 表3
[0499]
[0500] 列表运算符
[0501] 在一些实施例中,运算符的另一种分类包括列表运算符。
[0502] 表4
[0503]
[0504]
[0505] 这些列表运算符由包含各种内容类型的列表驱动,其中各种类型包括,但不限于,域名(google.com),URL路径前缀(espn.com/nfl,这与espn.com/nfl/team1以及espn.com/nfl/team2相匹配),以及单独的URL。另外,列表运算符可以包括其他列表运算符,或使用特殊的查询运算符,小方面运算符,或者用于从列表运算符中增加或减少的URL运算符。
[0506] 除了上述之外,列表中的元素可以包括列表中该元素,以及所有与网页的图形距离为N的网页。例如,与techcrunch.org的距离为1将包括网站techcrunch.org的所有网页以及由techcrunch.org上的任意页面指向的每个网页。
[0507] 例如,/huffpo列表运算符启动了在索引中搜索所有网页,其中这些网页在域huffingtonpost.com的任意网页上或从这些网页链接(距离为1)。为了示意,如果用户输入搜索查询“Barack Obama/huffpo”,并且huffingtonpost.com上的网页链接至NY时报的页面,那么NY时报的页面将作为应答的一部分返回。
[0508] 这些用户编辑的运算符以多种类型存在。一种类型可以由任何人使用以及编辑。例如,全球列表运算符可以由每个人编辑和使用。另一种类型可以用于其产生者使用,并仅由其产生者编辑。其他类型包括由其产生者和朋友使用,或由其产生者和朋友编辑的运算符。以及上述所有组合。用户编辑这些列表运算符可能产生或删除整个运算符,或者可能在包含于运算符的域名的列表中增加或删除,等等。
[0509] 为了多个用户具有相同名称的运算符,且不发生冲突,使用“名称空间”命名运算符。名称/gerg/linux用于指示/linux运算符,其对于用户Greg来说是特定的。该运算符不同于全球/linux运算符。
[0510] 社交方法用于辅助发现用户的运算符。例如,如果用户1在过去已经使用了几个用户2的运算符,那么引擎更可能建议用户2的另一个运算符作为可能有用的运算符。
[0511] 除了以肯定方式使用运算符(例如/linux)之外,还可以以否定方式使用运算符(例如!/linux)。这样删除所有与/linux运算符匹配的查询结果。在另一个示例中,“/linux!/blogs”将返回所有与/linux运算符匹配,但与/blogs运算符不匹配的结果。
[0512] 除了否定整个运算符外,列表运算符还可以包含否定输入,其从结果中删除任意匹配网页。例如,如果所有NY时报的观点信息在http://nytimes.com/opinion下,那么用户可以在她的标签/newsonly增加nytimes.com和nytimes.com/opinion的否定。
[0513] 列表运算符中的否定输入也可以标记为仅用于某些情景中。可以考虑列表运算符/linux,其包括网站lkml.org,该网站拥有高容量的Linux内核邮件列表(LKML)。查询“/linux/date”将由LKML发帖支配,而淹没其他所有的。在这种情况下,用户可以为lklm.org增加否定输入,其仅在结果通过日期分类,例如当使用/date运算符时应用。那么“/linux/date”将包含有关Linux的时事性信息,而没有被LKML发帖淹没。
[0514] 作为这些特征中的几个组合在一起使用的示例,假设用户想增加/linux列表运算符。用户可以搜索[linux/!linux],即出现在搜索[linux]的结果中,但已经不包含在/linux列表运算符中的网页。然后用户选择一些URL,其中用户相信这些URL可以很好的被看作/linux的一部分,点击每个的“slashtags”按钮,观看每个选择的URL的已有标签,最终将/linux列表运算符增加至包含每个选择的URL的运算符列表中。
[0515] 作为列表运算符改变查询含义的一个示例,可以考虑小方面运算符/news和列表运算符/golf,其包括多个打高尔夫的网站。搜索[Tiger Woods/news]可能返回大量Mr.Woods个人生活的点击,而搜索[Tiger Woods/golf]可能返回许多有关Tiger Woods高尔夫职业生涯的更多的点击。
[0516] 在一些实施例中,列表运算符可以由多个终端用户,可能由雇员社区管理员辅助,来集体编辑。在一些实施例中,社会反馈用于辅助选择编辑的过程,该编辑实际用于用户指定的运算符,即编辑能够看到User Foo具有其拒绝的最后10个编辑中的9个,或者User Foo倾向于反对更多受信任的编辑的观点。
[0517] 在一些实施例中,专业的“社区管理员”会帮助选择允许哪个编辑,并且,仲裁者在终端用户中争辩。在一些实施例中,志愿者团体和专业社区管理员执行这些功能。创建讨论论坛来讨论每个列表运算符的编辑。历史特征允许使用特殊域名的历史或URL路径。
[0518] 预交叉列表
[0519] 在一些实施例中,为了更快速或更有深度,各个搜索操作利用了的预交叉公共筛选器(未示出)。搜索数据库的网络索引存储许多用于特殊搜索词的列表。例如,在包含单词“Greg”的网页列表中,每个列表根据网页与单词“Greg”的相关度排序。这些列表在固定限值被截断,因此(例如)仅有涉及单词“Greg”的前10,000个网页位于列表中。
[0520] 当请求查询的应答时,例如“Greg/blogs”(涉及单词Greg的博客发帖),计算这个最自然的方式是查看单词Greg的网页列表,以及查看我们已经标记为博客发帖的帖子。如果与涉及Greg的相比,涉及Greg的博客发帖很少,那么在Greg列表中可能就没有有关Greg的博客发帖。
[0521] 为在这种情况下给出更好的答案,产生“Greg”列表,其包含涉及“Greg”的前N个网页,并具有成为“/blog”的属性。产生许多这样的列表,其中每个/operator一个列表以提供更好的答案。
[0522] K.数据库和搜索管理
[0523] 可视化工具
[0524] 图31和32是根据一些实施例的,用于搜索数据库的可视化工具3100,3200的屏幕显示3100,3200的示例。可视化工具3100,3200基于结构或行为提供有关数据库信息的可视化表示,测量系统活动,收集软件度量数据以检查系统状况,分析操作,以及检查系统异常。可视化工具3100包括地理区域图3110,其中多个点代表爬取页面的GeoIP(在欧洲,美国和世界)。系统中每个存储桶的复制级别的图形表示3120,3220也由指示整个系统复制级别的叠加整数表示(颜色指示R,3=绿色,0=黑色等)。利用增加组合算符监视和计算网络服务器负载3130以计数点击量。在特殊RAM高速缓冲存储器中存储的数据状态在窗口3140中示出。在窗口3140中示出的还有当前被爬取的url列表。这利用发布/订阅机制实现。各种测量节点正常的状态的指示,例如交换空间的使用,磁盘空间的使用,坏死磁盘,cpu的使用,等等可以通过图形数据3250监视。全球数量的图形3260,例如全球磁盘读取和写入带宽,全球网络带宽,系统中最差的寻找深度(寻找50,寻找90,寻找100)等等由数据3260监视。
[0525] 为了解释起见,已经参照特定实施例描述了前述的描述。但是,上述示意性的讨论不意在穷举或将本发明限制在已公开的精确的方式。根据上述的教导,许多修改和变形也是可以的。为了更好的解释本发明的原则和其实际应用,选择和描述了上述实施例,使得本领域中其他技术人员能够更好的利用本发明以及具有各种变形的各种实施例,其适于设想的特殊用途。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈