具体实施方式
下面结合附图对本发明进行具体的描述。但这些具体描述不是对本发明的限制。相反,其只是用于解释本发明。
系统结构
图1是总体系统的示意图,其中包括四层:索引层101、搜索层102、排序层103和应用层,该应用层又包括二进制文件搜索引擎104和下载引擎105。本申请中所使用的术语“二进制文件”包括多媒体文件,例如数字图片、MP3文件、数字视频文件和其他音频和视频文件。所述二进制文件还包含其他文件,例如可执行文件和压缩文件(如RAR文件和Zip文件)。索引层101为底层,它对由搜索蜘蛛获取的网页在该层中进行分析,并对该网页内的二进制文件的URL以及周围语境(context)的文本进行检索和索引。然后,在该层中建立索引图和语境索引映射图。第二层是搜索层102,该层提供隐式搜索(implicit search)和显式搜索(explicit search)两种服务。COINS搜索即为遍历COINS索引图的过程。第三层为排序层103,能通过加权属性和内容相关性对搜索结果进行排序。最后,第四层基于COINS包括两个应用:COINS二进制文件搜索引擎104和下载引擎105。
COINS技术是本发明的核心,其提供一种通过内容或数字签名来索引和搜索因特网上的二进制文件(例如可执行文件和多媒体文件)的模型。本节首先介绍内容签名,然后集中讨论索引层、搜索层和排序层的设计,最后解释COINS多媒体文件搜索引擎和下载引擎。
内容签名
内容签名用于标识COINS索引中的文件的唯一性。如果两个文件具有相同的内容签名,即使该两个文件存放在两个不同的URL下,这两个文件也将被作为相同文件来处理。这一点对搜索和下载因特网上包括有不同多媒体文件例如图片、MP3和音频/视频的二进制文件来说非常重要。例如,一张图片有时可能出现在不同的网页上,具有不同的名称不同的描述。然而,传统的搜索引擎将这种情况视为不同的图片,而本发明可正确地将其视为相同的图片。因此,本发明可用于明显地提高下载速度,同时提高搜索结果以及排序的精确性和相关性。
内容签名计算算法
实际用于计算内容签名的算法可根据执行者的选择而不同。唯一需要注意的是,要使用能保证每个计算结果的唯一性的算法。本发明可以采用各种算法来计算内容签名,例如戴维斯-迈耶(Davies-Meyer)哈希函数。其中,可直接使用、或经过用户化后使用“安全内容哈希”方法来计算二进制文件的内容签名。这种方法又称为“安全哈希算法”(SHA)。
安全哈希算法SHA-1用于计算消息或数据文件的压缩形式。当输入任何长度小于264位的消息时,SHA-1生成160位的输出,称为消息摘要。然后将该消息摘要输入签名算法,由该签名算法生成或验证该消息的签名。
SHA-1被称为是安全的,是因为该算法不可能找到对应给定消息摘要的消息,或不可能找到生成相同消息摘要的两个消息。
关于详细的计算介绍,请参考因特网RFC 3174,其可以从链接获得:http://www.faqs.org/rfcs/rfc3174.html。
生成内容签名的方法
二进制文件一般都很大。因此,如果整个文件需要由SHA-1算法进行计算以生成内容签名并将其传递给服务器,将需要占用大量的资源。一种改进方法是将该文件分割成每个大小为256K(或其他大小)的N个片段(最后一个片段可能没有256K),并从每个片段中取样。例如,从一个片段中提取的样本可以是该片段的开始部分,也可以是该片段的结尾部分。有些时候,提取的样本可以是该片段的开始部分和结尾部分的结合。
取样后,本发明可基于经SHA-1算出的样本而计算片段内容签名。所述片段内容签名可链接在一起表示源文件的签名。但是,缺点是签名通常会比较长(例如,假设每个片段ID为20字节,1GB的文件的签名将为20字节*4000=80KB)。因此,将在客户端与服务器之间占用大量的计算资源,包括网络资源、CPU资源、内存以及存储器资源,以用于执行内容签名相关计算,例如内容签名的完整性校验过程中的计算。
本发明介绍了一种明显减少所需的计算资源且不会影响签名的准确性的新方法。代替将片段ID链接在一起,本发明再次使用SHA-1算法基于这些片段ID计算出签名。然后将这一签名用作内容签名。使用这种方法的好处是增加了标识将要搜索或下载的文件的效率,并同时减少签名的大小,以及减少了需要的计算资源,特别是减少了网络流量。
COINS索引
COINS索引包括统一资源标识符(URI)索引图和语境索引映射图。
COINS URI索引图
该索引图包含有几种类型的元素,一般用于描述和标识二进制文件,包括内容签名、页面URI和文件URI。后两个元素又称为文件的主要识别信息。此外,二进制文件还可以有其他类型的识别信息,包括但不限于周围的语境文本例如锚文本(anchor text)和描述文本,以及文件URI属性例如文件大小和文件协议等。这些定义为文件的次要识别信息。主要识别信息和次要识别信息一起定义为文件识别信息。
本申请中,符号(P)用于表示页面URI,(F)用于表示文件URI,(C)用于表示内容签名。由于“统一资源定位”(URL)的概念是“URI”的子集,因而页面URI的一个示例便是页面URL,文件RUI的一个示例便是文件URL。(P)和(F)之间存在多对多的映射关系。“多对多”是指多个文件到多个页面之间的内部链接,反之亦然。
此外,定义以下条件:
理论1:如果其对应的(C)相同,任何两个不同的(F)指向相同的文件。
理论2:任何(F)可从多个(P)引出,同时任何(P)可指向多个(F)。
索引原理:基于索引文本的传统技术的输出是关键字列表,它指向具有该关键字的网页。不同地是,COINS索引的输出是包含(P)、(F)和(C)的三维图。(P)和(F)构成用于遍历搜索索引图的主要二维图,(C)位于第三维,与(F)有链接。
索引方法:搜索蜘蛛程序通过分析(P)来扫描因特网,(P)是通过输入的源网址以及从源网址递归的引用网址找出。当搜索蜘蛛程序发现一个合适的目标二进制文件(F)时,计算其(C)。如果(P)中含有(F),增加一个从(P)到(F)的链接。同样地,如果两个文件生成相同的(C),增加从两个(F)到(C)的两个链接,尽管这两个(F)的文件名和地址可能完全不同。因此,便可以建立3-D索引图数据库,并且将出现的多对多关系按照上述定义的条件在该数据库中表示出来。
图表:建立索引图后,理解其如何用于查找想要的二进制文件很重要。图2所示为索引图的一种可能形式。如图所示,一个(F)可被多个(P)引用。例如,F3被P1、P3、P4和P5引用。同时,一组(F)可来自一个(P),例如F1、F2和F3均来自P1。最后,如图中所示,有两个(F)即F5和F8指向位于第三维的一个(C2)。这表示位于F5和F8的文件具有完全相同的内容。也就是说,F5和F8指向相同的文件。
语境索引映射图
语境是一组与关键字相关的语言,用于描述一个文件。对于具有相同(C)的文件,他们的语境可以合并或相结合。因此便可能获得具有相同(C)的(F)的列表与一组关键字之间的映射关系。
此外,关键字在语境中出现的次数被记录下来。当将两个语境合并时,如果该关键字在两个语境中都有出现,则将给定关键字对应的在两个语境中出现的次数相加。因此,关键词结果集如下:{关键词1*次数1,...,关键词i*次数i}。这样的话,便可以建立映射关系列表,每个映射与以下表示类似:
{(F1),...,(Fi)}→(C)→{关键词1*次数1,...,关键词i*次数i}
执行以上步骤后,进行反向处理以生成每个关键字和(C)列表之间的新的映射关系如下:
关键字i→{(C1)*次数1,...,(Ci)*次数i}
...,其中每个(C)还映射至(F)列表
结果,搜索关键字“关键字i”生成多个(C),其中每个(C)与多个(F)相关联。更重要的是,通过遍历该索引图,可以找到更多相关的(F)。
COINS搜索
搜索二进制文件可分为显式搜索和隐式搜索。显式搜索从用户界面通过自动生成的关键字或者终端用户输入的关键字来触发(更像传统搜索引擎的搜索)。隐式搜索由一个事件触发,例如从下载引擎应用程序下载文件。本发明使用的搜索查询可以是关键字或文件URI。在隐式搜索和显式搜索这两种搜索中,搜索查询都可以是关键字或者文件URI。
搜索推论:当从因特网显式地或隐式地搜索任何(F)时,对COINS索引图执行遍历可生成相当大量的搜索结果。这些结果一般包含有嵌入(P)内的多种商业逻辑。该商业逻辑可以是瑞奇马丁新发行的专辑或拉丁男歌手的MP3文件的汇集。
定义:COINS搜索,是指为搜索某一特定二进制文件而进行的遍历索引图的过程。
为了开始所述搜索即遍历过程,深度优先(DFS)或广度优先(BFS)搜索算法皆可被用于遍历索引图。DFS和BFS是以系统的方式浏览索引图的有效方法。这两种方法从定向图中的一个节点v(图中的任意一个节点)开始,并访问从节点v可以到达的所有节点。这两种方法的区别在于其访问节点的顺序。
DFS首先从最近访问之节点的边界(edge)进行查找,也就是说,DFS首先尽可能的往深度方向查找。
BFS按源节点被访问的顺序查找其边界。它首先查找当前节点所有边界,然后访问下一个节点。
遍历将生成(F)的列表。所述遍历的步骤可直观化为如下:
1.搜索目标二进制文件(F4)的搜索查询被输入系统。此搜索查询可来自任一发起源,例如终端用户/客户端,或下载引擎生成的计算机命令,或通过其他合适的方式产生。为启动所述搜索过程,反向引用三个(P):(P2)、(P4)和(P6)。结果,根据反向引用的(P2)、(P4)和(P6),可以获得额外的四个(F),标识为(F2)、(F3)、(F6)和(F8)。这在图3-1、3-2和3-3中示出。第一步中,该组(P)的深度为1。
2.对于从前一步骤中获得的四个(F)中的每一个,执行相同的反向查找以获得另一组(P):(P1)、(P3)和(P5)。然后可以进一步获得一组三个(F):(F1)、(F5)和(F7)。这在图4-1和4-2中示出。第二步中,该组(P)的深度为2。
3.通过递归,可对整个索引图进行遍历直至遇到中止条件。该中止条件包括但不限于:
*遍历的深度数,
*汇集的(F)的总数量,
*遍历的超时,
*访问的(P)的数量。
4.为了避免索引图遍历的无止尽的循环,可忽略对较高深度级实体的引用。换句话说,步骤2中不会访问(P2)、(P4)和(P6),因为其深度为1,已经在第一层的遍历中被访问过了。
COINS排序
搜索过程完成后,一组二进制文件被呈现给终端用户。呈现的二进制文件包括与目标二进制文件相同的文件,或者与目标二进制文件不同但通过其共享的共用商业逻辑或其他文件属性与目标二进制文件相关的文件。
通常情况下,从索引和搜索过程获得的结果还需要进一步进行排序和分类,以便于该搜索结果更有用。因此,作为本发明的一个实施例,还需要根据几个对象模型对搜索结果进行评估和排序。
对象模型:以下关键信息将在对象模型中被存储,以增强排序结果以及实现增值商业逻辑。
·(P)将存储访问次数、引用次数、实时服务器或对等带宽、在线状态等。
·(F)将存储引用期、访问次数、源、源状态(即带宽、在线等)等。
通过加权属性排序(C)列表或源(F)
加权属性可在各种引擎中进行定制。具体来说,在下载引擎中,加权属性可基于以下确定:
*文件平均下载速度
*文件下载次数
*可用资源数量
*文件大小
因此,如果下载更快并且更流行的话,该(C)可以得到更高的排序。
通过内容相关性排序(C)列表或源(F)
通过内容相关性排序(C)列表主要基于相关的关键字“次数”值。例如,使用关键字“Hello World”搜索时,在语境索引映射表内具有如下关系:
“Hello”→{(C1)*50,(C2)*25}
“World”→{(C2)*30,(C3)*17}
然后,生成的(C)的排序组为{(C2),(C1),(C3)},因为(C)的对应次数组为{(25+30),50,17}。
(F)的访问次数
将访问次数作为排序规则之一,是本发明的首创。访问次数指被终端用户访问的总数量。但是,如果(Fi)和(Fj)指向同一(C),则认为(Fi)或(Fj)的访问次数为Count(Fi)和Count(Fj)的总和。
最后值得指出的是,这种策略也可应用于一般的搜索引擎。
(F)列表的排序
列表(F)的排序是(F)的加权属性的函数。对于搜索结果列表中的每个(F),可计算出一个排序值。排序计算应该掌握以下这些事实:
1)搜索深度级:level(n)(F)没有level(n-1)(F)的相关性高;
2)从其包含的实体的引用次数:次数越大,该(F)越流行,因此终端用户越感兴趣。在不止一个(F)映射至同一个(C)的情况下,每个(F)的引用次数是所有(F)的引用次数的总和。例如,如果
a)(F1)→(C)且(F2)→(C),以及
b)RC((F1))=10且RC((F2))=15
d)同样,如果(F1)→(C1),(F2)→(C2),且(C1)<>(C2),则FRC(F1)=
RC(F1)且FRC(F2)=RC(F2)
其中RC指引用次数的函数,FRC指最后引用次数的函数,(C1)<>(C2)表示C1不等于C2。
3)来自终端用户的累积访问次数:访问次数越多,该(F)对于终端用户来说越流行。
4)(F)的类型:相同类型(可能有不同的扩展名),例如音乐文件,意味着更大的相关性。
5)其包含的实体的访问次数:(P)包含的实体得到的访问越多,(F)对于终端用户来说越流行。
6)自定义挂钩(Custom Hook):为应用程序提供入口点以输入与应用程序相关的属性。
注意,上述每个属性具有相关联的系数,该系数受实时调整的影响。
COINS搜索引擎和下载引擎
以下将详细介绍COINS索引和搜索方法用于因特网搜索和文件下载的实际系统。以下结合COINS索引和搜索过程介绍了两种方法和系统。一个是针对二进制内容的基于COINS的搜索引擎,另一个是可优化内容传递的基于COINS的下载引擎。
COINS搜索引擎
二进制搜索引擎提供搜索二进制文件例如可执行文件和多媒体文件的服务,不仅可以从因特网搜索,还可以从P2SP网络搜索。此处使用的术语“P2SP”指端对服务器和端计算方法。换言之,与其他的P2P网络相比,P2SP网络包括有服务器也包括有对等机。以下是对COINS搜索引擎如何工作以及如何利用COINS的不同部分建立该搜索引擎的详细描述。
1)搜索前,先通过搜索蜘蛛和终端用户的日常使用建立包括有URI索引图和语境索引映射图的COINS索引数据库。
2)搜索过程中,基于关键字分割策略分析用户的输入,以便生成有意义的一组关键字。
3)针对每个关键字,搜索该语境映射图以获取一组(C)。此步中使用的语境映射图是在COINS索引过程中生成的第二映射:
关键字i→{(C1)*次数1,...,(Ci)*次数i}
4)根据次数信息对该组(C)进行排序。
5)针对步骤3中得到的每个(C),从在COINS索引过程中生成的第一映射图中导出一组源(F):
{(F1),...,(Fi)})→(C)→{关键字1*次数1,...,关键字i*次数i}
6)在步骤5中得到的(F)上执行COINS搜索,以获得一组最终的(F)。
COINS下载引擎
下载引擎引入了P2SP的概念。如果可从多个源下载某一内容,便可以明显地提高数据获取速度(通过并行地从多个计算较快的源获取数据的各个部分)以及数据访问的稳定性(通过避免网络忙和某些时候的无效链接)。所述源可以是因特网服务器或对等机或两者都有。
执行该操作的关键是获得用于获取数据的目标因特网服务器和对等机的列表。这可以通过COINS解决。
内容传递推论:当尝试从因特网获取任何(F)时,内容传递系统可通过COINS智能地选择除了提供该(F)的原始源之外的任何源来下载(F),因为已经确定位于这些源的内容是相同的,这是由相同的内容签名来保证的。
以下是对COINS下载引擎如何工作的描述:
1)在终端用户的机器内安装客户端软件。
2)下载前或下载过程中,建立COINS URI索引图。
3)客户端发送下载目标二进制文件的下载请求给服务器,由服务器使用COINS搜索能提供将要下载的内容的源。一组因特网服务器和对等机以URL的形式被返回,尽管该URL可能具有不同的因特网协议、不同的路径和不同的文件名,但它们都能提供将要下载的内容。在COINS搜索索引图数据库的过程中,在索引数据库中查找目标二进制文件。如果数据库中已包括有该目标二进制文件的文件URI,则将该目标二进制文件的内容签名链接至所述搜索查询。如果数据库中未含有该目标二进制文件的文件URI,则计算该目标二进制文件的内容签名并存储在数据库中。这一内容签名用于链接至数据库中具有相同内容签名的其他文件URI。
4)客户端继续以并行地方式从不同的源下载文件的各个部分,该不同的源包括不同的服务器和不同的对等机。成功下载后,客户端将数据的各个部分结合成一个文件。
5)客户端通过比较从刚下载的数据中计算出的内容签名与存储在服务器中的内容签名来执行文件完整性验证。如果内容签名相同,则下载结束。
6)如果在上一步中内容签名不匹配,客户端需要有效地识别出被破坏的片段。一个解决方法是循序地比较已下载的数据与存储在服务器内的数据的片段ID。然而,这一方法对于容量大的文件来说占用的资源相当大。例如,假设每个片段为256K且每个片段ID为20字节,1GB的游戏文件将有4000个片段ID,这样的话,4000次的片段ID比较将产生服务器内的80K带宽占用。相反,以下将介绍一种计算有效的方法,称为“在下载引擎内使用内容签名的有限分治算法(The limited Divide-and-ConquerAlgorithms with Content Signature in Downloading Engine)”。
该算法将片段ID分割成两部分A和B,并使用相同的内容签名计算方法计算每一部分的签名。然后在客户端和服务器之间比较签名A和B。如果签名A匹配,则表示A部分下载正确。但是如果不匹配,则将A部分再分割成两部分,并重复上述处理。
如果被破坏的片段数量大且随机的分布在一个文件内,则使用上述分治算法的代价也很大。因此,本方法设置可以查找的最大深度。例如,最大为3的深度只需要7次ID比较,在服务器内占用140字节的带宽,便可以找出任何被破坏的部分。这种情况下,每个部分是该文件的1/8。
7)客户端设法下载被破坏的部分,该部分的签名需要在下载后进行校验。
为了更好的理解下载引擎应用,分析以下给出的一例子:
假设Red Hat Linux发布其9.1版本的操作系统后,许多内容(镜像)站点都存储有该新版本操作系统的副本,以便服务其成员。同时,多个Linux终端用户开始设法(快速)下载。接近100MB的下载使得一些知名站点变得混乱,导致服务器极度繁忙,因此出现终端用户全球等待的现象。
作为示例,图5中由网络爬虫或搜索蜘蛛程序建立的索引图显示,标识为(FL)的待下载的Linux新版本实际上可从标识为(FL)、(F3)和(F7)的三个服务器源以及标识为(F12)的一个对等源获得。
源的实际格式可根据不同的实现而不同。此处,服务器源定义为:
(FL)为http://www.redhatlinux.com/releases/download/linux9-2-l.zip
(F3)为ftp://218.105.114.254:3044/pub/software/topl0/linux9-2-l.zip
(F7)为ftp://219.101.18.20/pub/linux/linux-latest.Zip
同样,在一对等机上的该源定义为jxta://uri-334/linux-latest-9-2-l.zip。
请注意,(FL)和(F3)具有相同的文件名linux9-2-l.zip,而(F7)和(F12)具有不同的文件名。但是,由于他们的内容签名相同,他们都指向相同的文件。
结果,根据这种设计建立的下载应用程序可选择从不止一个源中获取该新发布的Linux操作系统软件的各个部分。实际上,这一下载策略将服务器带宽的瓶颈转移至下载客户端。此外,服务器单点传输失败的情况下(因服务器忙或与该服务器的连接很差),客户端仍然可从其他源获取该软件。
简而言之,上述的智能和自动路由使用核心索引图,并且该过程对终端用户来说是透明的。可以建立全局负载平衡器来有效地减少任何内容服务器在遇到无法预料或预料之中的流量拥塞时传输失败的可能性。
本申请中引用的所有专利、公开物、网站内容和其他资料和文件,无论是印刷或电子格式,都作为本申请的一部分。
以上对本发明的具体实施例的描述仅出于解释和说明的目的,不是将本发明穷尽或限制为上述公开的具体形式。根据上述内容的教导,还可以做出各种修改和变更。可知,本发明的范围不受这些具体描述的限制,而由本申请的权利要求来限定。上述说明、示例和数据提供了对实施本发明的完整描述。由于还可以对本发明提出各种实施例而不脱离本发明的精神和范围,因此本发明的范围取决于权利要求及其等效替换。