GOOGLEæœç´¢å¼•æ“Žå‰–æž
æ’°æ–‡/Sergey Brin. Lawrence Page 翻译/万æ€
æ–‡ç« æ¥è‡ªã€Šç¨‹åºå‘˜ã€‹
英文原文å¯ä»¥åœ¨è¿™é‡Œæ‰¾åˆ°http://dev.csdn.net/develop/article/12/12657.shtm
作为一ç§åŠŸèƒ½å¼ºå¤§çš„æœç´¢å¼•æ“Žï¼ŒGoogic的背åŽä¼¼ä¹Žéšè—ç€å·¨å¤§çš„奥秘,本文是Googic的两ä½åˆ›å§‹äººåœ¨1998年国际互è”网大会上å‘表的论文,通过对Google进行完整地剖æžï¼Œå¸®åŠ©è¯»è€…ç†è§£Google的实现过程
1。为什么è¦ç”¨Google
Web结构的特殊性为信æ¯æ”¶é›†å·¥ä½œå¸¦æ¥äº†æ–°çš„挑战。Web上的信æ¯æ•°é‡è¿…速增长的åŒæ—¶ï¼Œå¯¹äºŽWebæ¯«æ— ä½¿ç”¨ç»éªŒçš„新用户也在与日俱增。使用高质é‡çš„æœç´¢å¼•æ“Žï¼Œæ— ç–‘å¯ä»¥ç¼©çŸWebåŒæ–°ç”¨æˆ·ä¹‹é—´çš„è·ç¦»ã€‚大家关心的问题是,æœç´¢è´¨é‡å’Œæ•ˆçŽ‡ã€‚
Yahoo曾一度是用户的最佳选择。Yahoo的人工维护方å¼å¯ä»¥æœ‰æ•ˆæ¶µç›–最æµè¡Œçš„主题。然而,维护人员的主观性ã€é«˜æ˜‚的维护代价ã€è¾ƒæ…¢çš„更新速度都是Yahoo的缺陷。更é‡è¦çš„事,这ç§æ–¹å¼å¹¶ä¸èƒ½è¦†ç›–所有用户所关心的è¯é¢˜ã€‚所有这些制约了Yahoo的进一æ¥å‘展。基于关键å—çš„æœç´¢å¼•æ“Žéšä¹‹å‡ºçŽ°ï¼Œä½†æ–°çš„问题接踵而æ¥ï¼šæœç´¢å¼•æ“Žåˆ¶é€ 出的大é‡â€œåžƒåœ¾â€ç»“æžœé®ä½äº†ç”¨æˆ·çš„视线,也考验了更多人的è€å¿ƒã€‚一些广告商为了å¸å¼•ç”¨æˆ·çš„目光,采用一些手段欺骗æœç´¢å¼•æ“Žï¼Œè¿™ä½¿äº‹æƒ…å˜å¾—更糟。
Google为上述问题æ供了新的解决方案。首先,Google是基于关键å—çš„ï¼Œè¿™æ ·çªç ´äº†æŸ¥è¯¢ä¸»é¢˜çš„é™åˆ¶ï¼›å…¶æ¬¡ï¼ŒGoogle利用网页超级连接的深度和独创的PageRank算法,为网页赋予了“级别(Rank)â€å«ä¹‰ï¼šç”¨æˆ·çš„检索结果,是按照网页的级别(Rank)进行排åºçš„.级别高的网页链接排在å‰é¢ï¼Ž
  Google这个åå—çš„æ¥åŽ†ä¹Ÿå¾ˆæœ‰æ„æ€ï¼šGoogle的创建者å‚考了å•è¯googol(1ï¼ï¼‘ï¼ï¼ï¼‰çš„拼写,也许这和作者è¦å»ºç«‹å¤§è§„模的æœç´¢å¼•æ“Žçš„ç›®æ ‡ä¸è°‹è€Œåˆï¼Ž
2ï¼Žè®¾è®¡ç›®æ ‡
  æ£å¦‚ä½ æƒ³åˆ°çš„ï¼ŒGOOGLE的主è¦ç›®æ ‡æ˜¯æ高æœç´¢å¼•æ“Žçš„æœç´¢è´¨é‡å’Œæ˜“用性.1997年11月的一项调查ä¸ï¼ŒæŽ’åå‰å››ä½çš„商业化æœç´¢å¼•æ“Žï¼Œåœ¨æ‰§è¡Œä»¥å®ƒè‡ªèº«çš„åå—作为关键å—的查询时,仅有一个æœç´¢å¼•æ“Žåœ¨å…¶æœç´¢ç»“果的å‰ï¼‘ï¼æ¡æŸ¥è¯¢ç»“æžœä¸æ‰¾åˆ°è‡ªå·±ï¼Žé—®é¢˜å·²ç»å˜å¾—很明显:用户关心的ä¸æ˜¯æœç´¢å¼•æ“Žæ‰€èƒ½æ供的查询结果,而是在æœç´¢å¼•æ“Žä¸æ‰€èƒ½æ供的å‰æ•°åæ¡æŸ¥è¯¢ç»“æžœä¸ï¼Œèƒ½å¦æ‰¾åˆ°è‡ªå·±çš„满æ„ç”案.æ£å› 为如æ¤ï¼Œå½“Web文档æˆå€å¢žé•¿æ—¶ï¼Œå¦‚何æ供一个既易于æ“作,åˆèƒ½æ供准确查询的新的æœç´¢å¼•æ“ŽæŠ€æœ¯ï¼Žè¿™æˆä¸ºäº†å…³æ³¨çš„焦点.
ã€€ã€€è¿‘å‡ å¹´çš„ä¸€äº›ç›¸å…³ç ”ç©¶ä¸ºGoogle打开了æ€è·¯ï¼Žè¿™äº›ç ”究的主è¦æ–¹å‘是:如何从页é¢çš„超链接文本ä¸èŽ·å–对开å‘人员有用的信æ¯ï¼Žæ£æ˜¯é€šè¿‡å¯¹HTML文档ä¸è¶…文本链接的深度分æžï¼ŒGoogle为自己的精确度算法æ供了ç†è®ºä¾æ®ï¼Ž
  Google希望通过自己的努力,把原本åªå±žäºŽå•†ä¸šé¢†åŸŸçš„æœç´¢å¼•æ“ŽæŠ€æœ¯å¸¦åˆ°ç†è®ºç ”究的范畴,并能让更多的人å‚与和完善.GoogleæŠŠè‡ªå·±çš„ç³»ç»Ÿæ¯”å–»ä¸ºä¸€ä¸ªå¤§çš„å®žéªŒå®¤çŽ¯å¢ƒï¼Œå¹¶æ¬¢è¿Žå…¶ä»–é¢†åŸŸçš„ç ”ç©¶äººå‘˜å‚与其ä¸ï¼Žæ£æ˜¯åœ¨åƒåƒä¸‡ä¸‡å¦‚Googleè¿™æ ·çš„ç»„ç»‡çš„å¸¦åŠ¨ä¸‹ï¼ŒWeb获å–了它å‰æ‰€æœªæœ‰çš„å‘展动力.
3.技术分æž
  Google之所以能获å–高效率的查询结果,得益于其两相é‡è¦çš„技术特性:第一,Google分æžæ•´ä¸ªWeb的链接结构,然åŽè®¡ç®—出æ¯ä¸€ä¸ªç½‘页的级别,并进行综åˆè¯„分,这就是Google所采用的PageRank技术;第二,Google充分利用链接æ供的信æ¯ä»¥è¿›ä¸€æ¥æ”¹å–„查询质é‡ï¼Ž
 3.1 PageRank:页é¢çš„排åºæŠ€æœ¯
  Googleçš„æ ¸å¿ƒæŠ€æœ¯ç§°ä¸ºPageRank,这是Google的创始人Larry Pageå’ŒSergey Brin在斯å¦ç¦å¤§å¦å¼€å‘出的一套用于网页评级的系统.作为组织管ç†å·¥å…·ï¼ŒPageRank利用了互è”网独特的明主特性åŠå…¶å·¨å¤§çš„链接结构.在浩瀚的链接资æºä¸ï¼ŒGoogleæå–出上亿个超级链接进行分æžï¼Œåˆ¶ä½œå‡ºä¸€ä¸ªå·¨å¤§çš„网络地图(Map).ä¾æ®æ¤åœ°å›¾ï¼ŒPageRank技术能够快速的计算出网页的级别(Rank).这个级别的ä¾æ®æ˜¯ï¼šå½“从网页A连接到网页B时,Google就认为"网页A投了网页B一票".Googleæ ¹æ®ç½‘页的得票数评定其é‡è¦æ€§ï¼Žç„¶è€Œï¼Œé™¤äº†è€ƒè™‘网页得票数(å³é“¾æŽ¥ï¼‰çš„纯数é‡ä¹‹å¤–,Google还è¦åˆ†æžæŠ•ç¥¨çš„网页。“é‡è¦â€çš„网页所投出的票就会有更高的æƒé‡ï¼Œå¹¶ä¸”有助于æ高其他网页的“é‡è¦æ€§â€ã€‚
Google以其å¤æ‚而全é¢è‡ªåŠ¨çš„æœç´¢æ–¹æ³•æŽ’é™¤äº†äººä¸ºå› ç´ å¯¹æœç´¢ç»“果的影å“。所以说,PageRank相对是公平的。在这个æ„义上,对于基于关键å—æœç´¢çš„引擎技术æ¥è¯´ï¼ŒPageRankæ— ç–‘æ˜¯ä¸€é¡¹ä¼˜ç§€çš„æŠ€æœ¯ï¼ŒGoogleå¯ä»¥æ–¹ä¾¿ã€è¯šå®žã€å®¢è§‚地帮您在网页上找到任何有价值的资料。
3.1.1 PageRank算法æè¿°
近些年æ¥ï¼Œå¤§é‡çš„å¦æœ¯ç ”究æˆæžœè¢«åº”用到Webä¸ï¼Œä¸»è¦è¢«ç”¨æ¥ç»Ÿè®¡ç½‘页的引用或返回链接。这些数æ®ä¸ºç½‘页的é‡è¦æ€§å’Œä»·å€¼åˆ†æžæ供了粗略的ä¾æ®ã€‚基于æ¤, PageRank还进一æ¥ç»Ÿè®¡é“¾æŽ¥åœ¨æ‰€æœ‰ç½‘页ä¸å‡ºçŽ°çš„次数。PageRank定义如下所述:
å‡å®šé¡µé¢A有很多指å‘他的链接,分别定义为页é¢T1...Tn。我们å†å®šä¹‰é˜»å°¼ç³»æ•°d(0〈=d〈=1)。通常指定d=0.85(译者注:下一节给出实例分æžï¼‰ã€‚函数C(A)表示页é¢Aä¸æŒ‡å‘其他页é¢çš„链接的个数。那么,页é¢Açš„PageRank(PR(A))å¯ä»¥é€šè¿‡ä¸‹é¢çš„å…¬å¼è®¡ç®—出:
PR(A)=(1-d)+d(PR(T1)/C(T1)+...PR(Tn)/c(Tn))
注æ„到PageRank的值是通过整个Web计算出æ¥çš„,所以,所有页é¢çš„PageRank值的和必然为1。
通过简å•çš„递归计算,并å‚ç…§Webä¸è§„范型链接矩阵的主特å¾å‘é‡ï¼Œæˆ‘们就å¯ä»¥è®¡ç®—出一个页é¢çš„PageRank(PR(A))。å‡è®¾è®¡ç®—大约26,000,000个页é¢çš„PageRank,使用一å°ä¸ç‰è§„模的工作站,大约需è¦æ•°ä¸ªå°æ—¶çš„时间。具体实现的细节已ç»è¶…出文本的讨论范围,读者å¯ä»¥å‚考相关文档。
3.1.2 PageRank模型
为了更好地ç†è§£ PageRank,我们建立以下一个å‡æƒ³çš„模型。我们å‡å®šæœ‰ä¸€ä¸ªWeb用户æ£åœ¨éšæœºæµè§ˆæŸä¸ªç½‘页,éšç€å…´è¶£çš„å˜åŒ–,他也å¯èƒ½éšæœºç‚¹å‡»é¡µé¢ä¸çš„å¦ä¸€ä¸ªé“¾æŽ¥ï¼Œè·³è½¬åˆ°å…¶ä»–页é¢ï¼ˆæš‚且å‡å®šè¯¥ç”¨æˆ·æ²¡æœ‰ä½¿ç”¨è¿”回按钮)。在这个模型ä¸ï¼Œå¸å¼•ç”¨æˆ·ç‚¹å‡»æŒ‡å‘æŸä¸ªé¡µé¢çš„链接的概率就是页é¢çš„PageRank。而由于æŸäº›å› ç´ å¯¼è‡´ç”¨æˆ·é€‰æ‹©äº†å…¶ä»–é“¾æŽ¥çš„æ¦‚çŽ‡å°±æ˜¯è¯¥é¡µé¢çš„阻尼系数d。有一些æžç«¯çš„情况,如有些页é¢å¯èƒ½å¾ˆå°‘被人访问,这些页é¢å°±ä¼šç§¯ç´¯èµ·å¾ˆé«˜çš„阻尼系数。所以说,PageRank的技术å¯ä»¥å…¬å¹³æœ‰æ•ˆåˆ°é¿å…有些系统为了获å–较高级别而采å–一些欺骗æœç´¢å¼•æ“Žçš„行为。
一般æ¥è¯´ã€‚网页的链接指å‘越多,PageRank的值就会越高。åŒæ ·ï¼Œè¢«ä¸€äº›â€œé‡é‡çº§â€çš„网站(例如yahoo)引用的次数越多,PageRank的值åŒæ ·ä¹Ÿä¼šå¾ˆé«˜ã€‚相å,那些设计ä¸ä½³ï¼Œæˆ–è€…è¢«é“¾æŽ¥ç ´å指å‘的网页,将é€æ¸è¢«ç”¨æˆ·æ‰€é—å¿˜ã€‚æ‰€æœ‰çš„è¿™äº›å› ç´ éƒ½åœ¨PageRank技术的综åˆè€ƒè™‘之ä¸ã€‚
3.2锚文本(anchor text)
在Googleä¸ï¼Œé“¾æŽ¥æ–‡æœ¬ï¼ˆtext of link )被使用一ç§ç‰¹æ®Šçš„æ–¹å¼è¿›è¡Œå¤„ç†ã€‚大多数的æœç´¢å¼•æ“Žéƒ½æ˜¯æŠŠé“¾æŽ¥æ–‡æœ¬å’Œå®ƒæ‰€åœ¨çš„页é¢ç›¸å…³è”,而Google则把链接文本和它指å‘的文档è”系到一起(想想的确应该如æ¤ï¼‰ã€‚è¿™æ ·åšçš„优点很多:首先,锚(anchor )一般都会æ供它所指å‘的文档的准确的æè¿°ï¼Œè€Œè¿™æ ·ä¿¡æ¯ï¼Œé¡µé¢æœ¬èº«å¾€å¾€ä¸èƒ½æ供;第二,对于那些ä¸èƒ½è¢«åŸºäºŽæ–‡æœ¬çš„æœç´¢å¼•æ“Žå»ºç«‹ç´¢å¼•çš„文档,例如图象,程åºä»¥åŠæ•°æ®åº“ç‰ï¼ŒæŒ‡å‘它们的链接å´å¯èƒ½å˜åœ¨ï¼Œè¿™æ ·å°±ä½¿å¾—那些ä¸èƒ½è¢«å¼•æ“Žå–回分æžçš„æ–‡æ¡£ä¹Ÿèƒ½ä½œä¸ºæŸ¥è¯¢ç»“æžœè¿”å›žã€‚ä½†æ˜¯ï¼Œè¿™æ ·åšä¹Ÿå¯èƒ½ä¼šå¼•èµ·ä¸€äº›é—®é¢˜ï¼Œå› 为这些文档在返回给用户之å‰å¹¶æœªç»è¿‡æœç´¢å¼•æ“Žçš„有效性检查。在这ç§æƒ…况下,æœç´¢å¼•æ“Žå°±å¯ä»¥ç®€å•åœ°è¿”回查询结果,甚至ä¸ç”¨è€ƒè™‘页é¢æ˜¯å¦å˜åœ¨ï¼Œè€Œåªç®¡æ˜¯å¦æœ‰æŒ‡å‘它们的超级链接å˜åœ¨ã€‚ä¹Ÿè®¸ä½ ä¼šé—®ï¼Œè¿™åˆé€‚å—?ä¸ç”¨æ‹…心,由于查询结果是ç»è¿‡çº§åˆ«æŽ’åºè¾“出的,这ç§ç‰¹æ®Šçš„æƒ…å†µä¹Ÿè®¸æ ¹æœ¬çœ‹ä¸åˆ°ã€‚
其实,这ç§ä½¿ç”¨é”šæ–‡æœ¬æŠ€æœ¯çš„æ€æƒ³æ›´æ—©å¯ä»¥è¿½æº¯åˆ°World Wide Web Wormæœç´¢å¼•æ“Žã€‚它使得WWWWå¯ä»¥æ£€ç´¢åˆ°éžæ–‡æœ¬ä¿¡æ¯ï¼Œç”šè‡³æ‰©å±•åˆ°ä¸€äº›å¯ä»¥ä¸‹è½½çš„文档,Google继承了这ç§æ€è·¯ï¼Œå› 为它å¯ä»¥å¸®åŠ©æ供更好的æœç´¢ç»“果。然而,使用这ç§æŠ€æœ¯éœ€è¦å…‹æœå¾ˆå¤šçš„技术难题,首当其冲的就是如何处ç†å¦‚æ¤åºžå¤§çš„æ•°æ®é‡ã€‚我们æ¥çœ‹çœ‹ä¸€ç»„æ•°æ®ï¼Œåœ¨Google爬虫å–回的24,000,000个网页数æ®ä¸ï¼Œéœ€è¦å¤„ç†çš„链接数高达259,000,000之多。
3.3其它功能
除了PageRank和锚文本技术之外,Google还有一些其它的技术。首先,对于所有命ä¸ï¼ˆhits),Google都记录了å•è¯åœ¨æ–‡æ¡£ä¸çš„ä½ç½®ä¿¡æ¯ï¼Œè¿™äº›ä¿¡æ¯åœ¨æœ€ç»ˆçš„查询ä¸å¯ä»¥è¢«ç”¨æ¥è¿›è¡Œå•è¯çš„相似度分æžã€‚第二,Google还记录了页é¢ä¸çš„å—体大å°ã€å¤§å°å†™ç‰è§†è§‰ä¿¡æ¯ã€‚有的时候,大å·å—体和粗体的设置å¯ä»¥ç”¨æ¥è¡¨ç¤ºä¸€äº›é‡è¦çš„ä¿¡æ¯ã€‚第三,在repositoryæ•°æ®åº“ä¸ä¿å˜æ‰€æœ‰é¡µé¢çš„HTML代ç 。
(译注:命ä¸(hit)是Google定义的一个数æ®ç»“构,有关命ä¸å’Œç›¸ä¼¼åº¦çš„æ述,详è§ä¸‹æ–‡ã€‚)
4.系统剖æž
从上文ä¸ï¼Œæˆ‘们已ç»äº†è§£Google的一些工作原ç†ã€‚åœ¨è¿™ä¸€ç« èŠ‚ä¸ï¼Œæˆ‘们将一起深入探讨Google的体系框架,然åŽå…·ä½“介ç»Google用到的一些数æ®ç»“构。最åŽï¼Œæˆ‘们å†ä¸€èµ·åˆ†æžGoogle用到的三个关键技术:网页抓å–(crawling)ã€ç´¢å¼•(indexing)以åŠåŸºäºŽå…³é”®å—çš„æœç´¢(searching)。
4.1 Google体系框架
本节ä¸ï¼Œæˆ‘们共åŒæŽ¢è®¨Google体系框架的è¿è¡Œæµç¨‹ï¼Œå¦‚图1所示。下é¢çš„å‡ ä¸ªç« èŠ‚å°†è¯¦ç»†çš„ä»‹ç»æ‰€ç”¨åˆ°çš„技术和数æ®ç»“构。考虑到执行效率,Google ä¸çš„大部分代ç 都是用C/C++è¯è¨€å®žçŽ°çš„,并且å¯ä»¥åŒæ—¶è¿è¡Œåœ¨Solariså’ŒLinux系统ä¸ã€‚
图1
在Google的体系框架ä¸ï¼Œç½‘页爬行技术(Crawling,指网页的下载过程)是由若干个分布å¼çš„网络爬虫(Crawler)软件实现的。其ä¸ï¼Œä¸€ä¸ªå«åšURL Serverçš„æœåŠ¡å™¨è´Ÿè´£æŠŠéœ€è¦åˆ†æžçš„URL地å€åˆ—表分派给这些网络爬虫进行处ç†ã€‚网页数æ®å¦‚果被å–回,将立å³è¢«é€åˆ°Store Serverä¸ã€‚Store Server对网页数æ®è¿›è¡ŒåŽ‹ç¼©ï¼Œç„¶åŽä¿å˜åˆ°Repositoryæ•°æ®åº“ä¸ã€‚æ¯ä¸€ä¸ªæ–‡æ¡£éƒ½æ‹¥æœ‰ä¸€ä¸ªä¸Žä¹‹ç›¸å…³çš„唯一的IDç¼–å·ï¼ŒGoogle称它为docID。æ¯å½“有一个新的链接从页é¢ä¸è¢«è§£æž(parse)出æ¥ï¼Œå®ƒæ‰€æŒ‡å‘的文档就将自动获得一个docID。建立索引的任务则交给索引器(Indexer)和排åºå™¨(Sorter)æ¥å®Œæˆã€‚Indexerä¾æ¬¡ä»ŽRepositoryä¸å–出文档,对文档解压缩,然åŽå¯¹æ–‡
档进行解æžã€‚éšåŽæ–‡æ¡£è¢«è§£æžä¸ºä¸€ç»„命ä¸ã€‚在Googleä¸ï¼Œå‘½ä¸(hit)是一ç§æ•°æ®ç»“构,用æ¥è®°å½•å•è¯åœ¨æ–‡ä¸æ¯ä¸€æ¬¡å‡ºçŽ°çš„ä¿¡æ¯ã€‚在命ä¸ç»“æž„ä¸ï¼Œè®°å½•äº†æ¯ä¸ªè¯(word)ã€è¯åœ¨é¡µé¢ä¸çš„ä½ç½®ã€å¤§å°å†™ã€å—体相对大å°ç‰ä¿¡æ¯ã€‚è¿™æ ·ï¼Œæ¯ä¸ªè¯éƒ½æœ‰å¾ˆå¤šä¸åŒçš„命ä¸ï¼Œè¿™äº›å‘½ä¸çš„组åˆåˆç§°ä¸ºè¯¥è¯çš„命ä¸åˆ—表(hit list)。索引器把这些命ä¸å†å†™å…¥åˆ°ä¸€ç»„桶(barrel) ä¸ï¼Œå¹¶å»ºç«‹ä¸€ä¸ªéƒ¨åˆ†æŽ’åºçš„å‰å™ç´¢å¼•(foward index)。索引器还åŒæ—¶æŠŠç½‘页ä¸æ‰€æœ‰çš„链接的é‡è¦ä¿¡æ¯è§£æžå‡ºæ¥ï¼Œå¹¶è®°å½•åˆ°ä¸€ä¸ªå«åšAnchors的文件ä¸ã€‚该文件包å«äº†è¶³å¤Ÿå¤šçš„ä¿¡æ¯ï¼Œä»Žä¸å¯ä»¥æŸ¥è¯¢å‡ºæ¯ä¸€ä¸ªé“¾æŽ¥çš„æ¥æºã€æŒ‡å‘以åŠè¯¥é“¾æŽ¥çš„文本。
(译注:索引器还把解æžå‡ºçš„è¯å†™å…¥åˆ°ä¸€ä¸ªè¯å…¸(Lexiconä¸ï¼Œè¿™å°†åœ¨ä¸‹æ–‡ä¸æ到。)
URL ResolveræœåŠ¡å™¨è´Ÿè´£ä»Ž Anchors文件ä¸è¯»å–这些链接,把相对路径改为ç»å¯¹è·¯å¾„,å†è½¬æ¢ä¸ºç›¸åº”çš„ docID。通过docIDçš„å…³è”,锚文本的信æ¯ä¹Ÿè¢«åŠ 入到å‰åºç´¢å¼•çš„anchor hit结构ä¸ã€‚URL ResolveråŒæ—¶åˆ›å»ºäº†ä¸€ä¸ªLinksæ•°æ®åº“,用æ¥å˜æ”¾ä¸¤ä¸¤å¯¹åº”çš„docID。Linksæ•°æ®åº“被用æ¥è®¡ç®—所有文档的PagePank 。
接ç€æŽ’åºå™¨æŽ¥ç®¡è¿‡è¿™äº›æ¡¶ã€‚如å‰æ‰€è¿°ï¼Œè¿™äº›æ¡¶å·²ç»æŒ‰ç…§ docID进行了排åºã€‚排åºå™¨çš„主è¦ä»»åŠ¡æ˜¯æŒ‰ç…§WordIDé‡æ–°è¿›è¡ŒæŽ’åºï¼Œä»Žè€Œä¸ºè¿™äº›æ¡¶ç”Ÿæˆä¸€ä¸ªå€’排索引(inverted index)。这个æ“作是在æ¯ä¸ªæ¡¶ä¸æ‰§è¡Œçš„,所以åªéœ€è¦ç”¨åˆ°å¾ˆå°‘的临时空间。排åºå™¨è¿˜å»ºç«‹äº†ä¸€ä¸ªWordID列表,列表ä¸åŒæ—¶è®°å½•äº†è¯¥WordID在倒排索引ä¸çš„å移é‡å¤§å°ã€‚有一个å«åšDumpLexicon的工具,用æ¥æŠŠwordID和上文ä¸æ到的由索引器产生的è¯å…¸ï¼ˆLexicon)相结åˆï¼Œå¹¶äº§ç”Ÿä¸€ä¸ªæ–°çš„è¯å…¸ã€‚这个新的è¯å…¸è¢«ç”¨åœ¨æœ€ç»ˆçš„æœç´¢ç¨‹åºä¸ï¼Œè¿žåŒPageRank和倒排åºç´¢å¼•ä¸€èµ·ï¼Œä¸ºç”¨æˆ·æ供查询æœåŠ¡ã€‚
4.2 æ•°æ®ç»“æž„
Google对数æ®ç»“构进行了很多优化,其目的主è¦æ˜¯ä¸ºäº†æœ‰æ•ˆçš„å‡å°‘在处ç†å¤§æ–‡æ¡£çš„抓å–ã€ç´¢å¼•ä»¥åŠæŸ¥è¯¢æ—¶æ‰€éœ€è¦è€—费的æˆæœ¬ã€‚虽然这些年æ¥è®¡ç®—机的性能得到了很大的改善,但对于ç£ç›˜çš„检索ä»ç„¶éœ€è¦å¤§çº¦10ms的时间æ¥å®Œæˆã€‚基于性能的考虑,Googleå°½å¯èƒ½åœ°é¿å…使用ç£ç›˜æ“作,而这个想法也很大的影å“了数æ®ç»“构的设计æ€è·¯ã€‚
4.2.1 巨型文件(BigFile)
巨型文件(BigFile)被设计æˆä¸ºè·¨è¶Šå¤šæ–‡ä»¶ç³»ç»Ÿåœ°ã€64ä½åœ°å€ç©ºé—´çš„虚拟文件,并能够在多文件系统ä¸è‡ªåŠ¨è¿›è¡Œæ–‡ä»¶åˆ†é…ã€‚å› ä¸ºæ“作系统ä¸èƒ½ä¸ºæˆ‘们æ供有用的支æŒï¼Œå·¨åž‹æ–‡ä»¶åŒ…(BigFile package)被设计用æ¥è´Ÿè´£æ“作文件æ述符的创建和销æ¯ã€‚å¦å¤–,巨型文件也支æŒä¸€äº›åˆæ¥çš„压缩喧å“。
4.2.2 æ•°æ®ä»“库(Repository)
æ•°æ®ä»“库(Repository)ä¸ä¿å˜äº†æ¯ä¸€ä¸ªç½‘页完整的HTML代ç 。为了节çœç©ºé—´ï¼Œé¡µé¢åœ¨å˜å‚¨å‰ä½¿ç”¨zlib技术进行了压缩。压缩技术的选择综åˆè€ƒè™‘äº†é€Ÿåº¦å’ŒåŽ‹ç¼©æ¯”çš„å› ç´ ã€‚å°½ç®¡bzip技术在压缩比方é¢æŠ€é«˜ä¸€ç¹ï¼ˆåŽ‹ç¼©æ¯”达到了4:1),Google还是基于速度的考虑最终选择了zlib(压缩比åªæœ‰3:1)。文档记录在数æ®ä»“库ä¸é¡ºåºæŽ’列,并以docIDã€lengthã€URLç‰ä½œä¸ºæ–‡æ¡£è®°å½•çš„å‰ç¼€ï¼Œå¦‚图2所示。数æ®ä»“库的访问ä¸éœ€è¦ä½¿ç”¨ä»»ä½•å…¶ä»–çš„æ•°æ®ç»“æž„ï¼Œè¿™æ ·æœ‰åŠ©äºŽä¿æŒæ•°æ®çš„完整性,并且使得开å‘å˜å¾—更为容易。
图2
4.2.3 文档索引(Document Index)
文档索引(Document Index)用æ¥è·Ÿè¸ªæ¯ä¸€ä¸ªæ–‡æ¡£çš„ä¿¡æ¯ã€‚它是一ç§å®šå®½çš„ISAM(Index sequential access mode)类型的索引,并按照文档的docID进行了排åºã€‚索引ä¸çš„æ¯ä¸€é¡¹å˜å‚¨äº†å½“å‰æ–‡æ¡£çš„状æ€ã€æŒ‡å‘æ•°æ®ä»“库的指针ã€æ–‡æ¡£æ ¡éªŒå’Œï¼Œä»¥åŠä¸€äº›ç»Ÿè®¡ä¿¡æ¯ã€‚如果文档被爬虫å–回,则该索引项还将包å«ä¸€ä¸ªæŒ‡å‘docinfo文件的指针。docinfo文件包å«è¯¥æ–‡æ¡£çš„URLå’Œæ ‡é¢˜ï¼›å¦åˆ™ï¼Œè¿™ä¸ªæŒ‡é’ˆå°±è¢«æŒ‡å‘一个仅包å«ä¸€ç§æ¯”较紧凑的数æ®ç»“构,以åŠåœ¨ä¸€æ¬¡æœç´¢æ“作ä¸æŸ¥æ‰¾ä¸€æ¡ç£ç›˜è®°å½•çš„执行效率。
å¦å¤–,在转æ¢URLs到docIDs时需è¦ç”¨åˆ°ä¸€ä¸ªæ–‡ä»¶ã€‚这个文件其实是一个包å«URLæ ¡éªŒå’Œï¼ˆchecksum)和与它对应的docID的列表,并且按照checksum进行排åºã€‚通常,我们需è¦æ ¹æ®URLæ¥æŸ¥æ‰¾æ–‡æ¡£çš„docID。这时,首先计算出该URLçš„æ ¡éªŒå’Œï¼ˆchecksum)进行二进制的检索,然åŽæ ¹æ®æ£€ç´¢ç»“果找到其所对应的docID。其实,URL Resolveræ£æ˜¯ä½¿ç”¨è¿™ä¸ªåŠžæ³•æŠŠURL转æ¢ä¸ºdocID的。在这里使用批处ç†æ¨¡å¼å¾ˆæœ‰å¿…è¦ï¼Œå¦åˆ™å¯¹äºŽåŒ…å«322,000,000å„链接的数æ®é›†æ¥è¯´ï¼Œè¦æ£€ç´¢æ‰€æœ‰çš„链接至少得耗费数月之久。
4.2.4 è¯å…¸ (Lexicon)
  è¯å…¸æœ‰å¥½å‡ ç§ä¸åŒçš„æ ¼å¼ï¼Žéšç€å†…å˜æˆæœ¬çš„下é™ï¼ŒçŽ°åœ¨å¯ä»¥å®žçŽ°æŠŠè¯å…¸åµŒå…¥åˆ°å†…å˜ä¸è¿è¡Œï¼Œè¿™å°†å¯ä»¥å¤§å¤§æ高è¿è¡Œçš„效率.在一个256M电脑的内å˜ä¸ï¼Œå¯ä»¥è¿è¡Œä¸€ä¸ªåŒ…å«14,000,000个è¯æ±‡çš„è¯å…¸ã€‚è¯å…¸ç”±ä¸¤éƒ¨åˆ†æ¥å®žçŽ°ï¼šä¸€ä¸ªè¯åˆ—表(彼æ¤ä¹‹é—´ä»¥Null分隔)和一个包å«æŒ‡é’ˆçš„哈希表.
4.2.5 命ä¸åˆ—表(Hit Lists)
命ä¸åˆ—表(hit list)对应于æŸä¸ªç‰¹å®šçš„è¯åœ¨æŸä¸ªç‰¹å®šçš„文档ä¸ä¸€æ¬¡æˆ–多次的出现,它主è¦ç”¨æ¥è®°å½•è¯åœ¨æ–‡ä¸å‡ºçŽ°çš„ä½ç½®ã€å—体ã€å¤§å°å†™ç‰ä¿¡æ¯ã€‚命ä¸åˆ—表在å‰åºç´¢å¼•å’Œå€’排索引ä¸éƒ½å æ®äº†ç»å¤§éƒ¨åˆ†çš„ç©ºé—´ã€‚å› æ¤ï¼Œå‘½ä¸åˆ—表需è¦å°½å¯èƒ½åœ°ä»¥ä¸€ç§é«˜æ•ˆçŽ‡çš„æ–¹å¼æ¥å®žçŽ°ã€‚æœ‰å‡ ä¸ªå¯ä»¥ç”¨æ¥å‚考的编ç 方案:一个是简å•ç¼–ç æ–¹å¼ï¼ˆä¸‰ä½æ•´æ•°æ³•ï¼‰ï¼Œç¬¬äºŒæ˜¯åŽ‹ç¼©ç¼–ç æ–¹å¼ï¼ˆå¯¹ä½çš„分é…进行手工优化),最åŽä¸€ç§æ˜¯æœ‰åçš„éœå¤«æ›¼ç¼–ç æ–¹å¼ã€‚Google在æƒè¡¡äº†ç©ºé—´çš„å 用é‡ä»¥åŠå¯¹äºŽä½æ“作的å¤æ‚性之åŽï¼Œé€‰æ‹©äº†ç¬¬äºŒç§åŽ‹ç¼©ç¼–ç 方案。命ä¸çš„实现细节,å‚è§å›¾3
图3。
在这ç§åŽ‹ç¼©ç¼–ç ä¸ï¼Œæ¯ä¸ªå‘½ä¸å 用2个å—节的空间。命ä¸åˆå¯ç»†åˆ†ä¸ºä¸¤ç§ç±»åž‹ï¼šç‰¹æ®Šå‘½ä¸ï¼ˆfancy hit)和普通命ä¸ï¼ˆplain hit)。特殊命ä¸ï¼ˆfancy hit)是指出现在URLã€é¡µé¢æ ‡é¢˜ã€é”šæ–‡æœ¬æˆ–者metaæ ‡ç¾ä¸çš„命ä¸ï¼Œé™¤æ¤ä¹‹å¤–的全部命ä¸éƒ½æ˜¯æ™®é€šå‘½ä¸ï¼ˆplain hit)。普通命ä¸ï¼ˆplain hit)包å«æ ‡è¯†å¤§å°å†™çš„ä½ï¼ˆ1ä½ï¼‰ã€å—体大å°ä½ã€ä»¥åŠ12ä½çš„为之心系(如果在文档ä¸çš„ä½ç½®å¤§äºŽ4095,则一律以4096表示)。å—体大å°æ˜¯å—体在文档ä¸çš„相对大å°ï¼Œç”¨3ä½æ¥è¡¨ç¤ºã€‚å—体大å°åªä½¿ç”¨ä»Ž000到110这七个数,111被用æ¥å•ç‹¬è¡¨ç¤ºä¸€ä¸ªç‰¹æ®Šå‘½ä¸ï¼ˆfancy hit)。特殊命ä¸ï¼ˆfancy hit)也包å«ä¸€ä¸ªå¤§å°å†™çš„ä½ï¼ˆ1ä½ï¼‰ã€å—体大å°ï¼ˆè®¾ä¸º7=111)ã€4ä½çš„类型编ç ã€ä»¥åŠ8ä½çš„ä½ç½®ä¿¡æ¯ã€‚对于出现在锚文本的命ä¸ï¼ˆanchor hit)æ¥è¯´ï¼Œ8ä½çš„ä½ç½®ä¿¡æ¯åˆç»†åˆ†ä¸ºé”šä¸çš„ä½ç½®ä¿¡æ¯ï¼ˆ4ä½ï¼‰ä»¥åŠé”šæ‰€åœ¨çš„文档docIDçš„hash值(4ä½ï¼‰ã€‚è¿™æ ·ï¼Œåœ¨é’ˆå¯¹æŸäº›ç‰¹å®šçš„è¯è¿›è¡ŒæŸ¥è¯¢æ—¶ï¼Œå¦‚果找ä¸åˆ°è¶³å¤Ÿçš„链接匹é…,就å¯ä»¥ä»Žè¿™äº›anchor hitä¸æ‰¾ä¸€äº›æ¥è¡¥å……。以åŽï¼Œè€ƒè™‘到对于ä½ç½®ä¿¡æ¯å’ŒdocID的哈希值哈还会有更多的解决方案,anchor hitçš„å˜å‚¨æ–¹å¼å°†ä¼šæœ‰æ‰€æ”¹å˜ã€‚å¦å¤–,Google之所以使用å—体的相对大å°ï¼Œä¸»è¦æ˜¯è€ƒè™‘到在对文档计算级别时,我们ä¸èƒ½ä»…ä»…å› ä¸ºA文档使用了较大的å—体就说A文档比B文档级别高。
命ä¸åˆ—表的长度ä¿å˜åœ¨å‘½ä¸åˆ—表的å‰é¢ã€‚为了节çœç©ºé—´ï¼Œé‡‡ç”¨äº†ä¸€äº›ç‰¹æ®Šçš„技巧,从å‰åºç´¢å¼•çš„worldID自段和åŽæŽ’索引的docIDå—段ä¸åˆ†åˆ«åŽ‹ç¼©å‡º8ä½å’Œ5ä½ç©ºé—´ï¼Œç”¨æ¥å˜å‚¨è¯¥é•¿åº¦å€¼ã€‚如果长度值出现溢出,这些ä½å°†ä½¿ç”¨ä¸€ä¸ªæº¢å‡ºç¬¦è¡¨ç¤ºï¼Œå¹¶åœ¨ç´§æŽ¥ç€çš„下两个å—节ä¸åŒ…å«å®žé™…的长度值。
4.2.6 å‰åºç´¢å¼• (Forward index)
å‰åºç´¢å¼•å®žé™…å·²ç»ç»è¿‡éƒ¨åˆ†æŽ’åºã€‚它由许多个桶组æˆï¼Œæ¯ä¸ªæ¡¶ä¸ä¿å˜ä¸€å®šèŒƒå›´çš„wordID。如果æŸç¯‡æ–‡æ¡£ä¸è¯å¯¹åº”到æŸä¸ªæ¡¶ä¸çš„wordID,该文档的wordID也会被记录到该桶ä¸ã€‚æ¯ä¸ªdocIDåŽé¢ç´§è·Ÿç€ä¸€ä¸ªå±žäºŽå®ƒçš„wordID列表,而这些列表ä¸æ¯ä¸ªwordIDçš„åŽé¢åˆç´§è·Ÿç€è¯¥word的命ä¸åˆ—表。
å› ä¸ºå¤§é‡é‡å¤docIDçš„å˜åœ¨ï¼Œè¿™ç§å˜å‚¨æ–¹æ¡ˆä¹Ÿè®¸ä¼šå¸¦æ¥æ›´å¤§çš„空间需求。但是由于索引被分散在许多个桶ä¸ï¼Œè€Œä¸”è¿™ç§è®¾è®¡åœ¨æœ€åŽç”±æŽ’åºå™¨æ‰§è¡Œçš„çŸè¯ç´¢å¼•æ“作ä¸å¯ä»¥åˆç†åœ°èŠ‚çœæ—¶é—´ä¸Šçš„开销,并é™ä½Žäº†ç¼–程的å¤æ‚度,所以,空间上的这点浪费是完全å¯ä»¥å®¹å¿çš„。而且,wordIDä¸å˜å‚¨çš„实际上是WordID与其所在的桶ä¸çš„WordID最å°å€¼ä¹‹é—´è®¡ç®—出æ¥çš„ç›¸å¯¹å·®ã€‚è¿™æ ·ï¼ŒWordIDå°±åªéœ€è¦24ä½æ¥å˜å‚¨ï¼Œä½™ä¸‹çš„8ä½æ°å¥½å¯ä»¥è¢«ç”¨æ¥å˜å‚¨å‘½ä¸åˆ—表ä¸çš„长度(å‚è§ä¸Šæ–‡ï¼‰ã€‚
4.2.7倒排索引(Inverted Index)
å’Œå‰åºç´¢å¼•ä¸€æ ·ï¼Œåˆ°æŽ’索引也是由åŒä¸€ç»„桶所组æˆï¼Œåªæ˜¯è¿™äº›æ¡¶ç»è¿‡äº†æŽ’åºå™¨çš„进一æ¥å¤„ç†ã€‚对于æ¯ä¸€ä¸ªæœ‰æ•ˆçš„WordID,è¯å…¸ä¸éƒ½ä¼šæœ‰ä¸€ä¸ªæŒ‡å‘包å«è¯¥WordID的桶的指针。这个指针指å‘一个docID的列表(doclist),列表ä¸çš„æ¯ä¸€é¡¹éƒ½ç”±docID和该WordID的命ä¸åˆ—表组æˆã€‚该WordID所在的所有的文档的docID都包å«åœ¨è¯¥doclistä¸.
一个é‡è¦çš„问题是,doclit列表ä¸çš„docID应该如何排åºï¼Ÿä¸€ä¸ªæ¯”较简å•çš„è§£å†³æ–¹æ¡ˆæ˜¯ç›´æŽ¥æ ¹æ®docID排åºã€‚è¿™ç§æ–¹æ¡ˆåœ¨å¯¹å¤šå—è¯çš„å¤åˆæŸ¥è¯¢æ—¶ï¼Œå¯ä»¥å®žçŽ°å¤šä¸ªdoclist之间的快速归并(merge)æ“作。å¦å¤–一个å¤æ‚一点的方案,是按照word在æ¯ç¯‡æ–‡æŒ¡ä¸å‡ºçŽ°çš„级别进行排åºã€‚
è¿™ç§æ”¾æ¡ˆå¯¹äºŽå•å—è¯çš„查询作用ä¸å¤§ï¼Œä½†å¯¹äºŽå¤šå—è¯çš„查询,å¯ä»¥å®žçŽ°æŠŠæœ€è¿‘的查询结果排到å‰é¢ã€‚两ç§æ–¹æ¡ˆå„有自己的ä¸è¶³ã€‚首先,归并æ“作具有一定的难度;而级别计算函数的æ¯ä¸€æ¬¡æ”¹å˜éƒ½å¯èƒ½éœ€è¦å¯¹ç´¢å¼•è¿›è¡Œé‡å»ºï¼Œç€æ— 疑会给开å‘å·¥ä½œå¢žåŠ æ–°çš„éš¾åº¦ã€‚æ‰€ä»¥ï¼Œæœ‰å¿…è¦é‡‡å–一ç§æŠ˜ä¸çš„方案。在这个方案ä¸ï¼Œä¿æŒä¸¤ç»„排åºçš„桶,其ä¸ä¸€ç»„用æ¥åŒ…å«åœ¨æ ‡é¢˜æˆ–锚文本ä¸å‡ºçŽ°çš„命ä¸åˆ—表,å¦ä¸€ç»„则包å«æ‰€æœ‰çš„命ä¸åˆ—表。首先,查询第一组桶(short barrel)ä¸è¿›è¡Œï¼›å¦‚果找ä¸åˆ°è¶³å¤Ÿçš„匹é…,则转到å¦ä¸€ç»„桶(full barrel)ä¸ç»§ç»æŸ¥æ‰¾ã€‚
4.3 Web爬行技术(Crawling the Web)
  事实上,在Web上è¿è¡Œä¸€ä¸ªç½‘络爬虫(crawler)的工作颇具挑战性。这ä¸ä»…兼顾棘手的性能和å¯é æ€§å› ç´ ä¹‹å¤–ï¼Œæ›´é‡è¦çš„,还需è¦è€ƒè™‘ä¸€äº›ç¤¾ä¼šå› ç´ ã€‚ç”±äºŽéœ€è¦å®žæ—¶çš„å’Œæˆåƒä¸Šä¸‡å°çŠ¶æ€ä¸å¯æŽ§çš„WebæœåŠ¡å™¨è¿›è¡Œäº¤äº’,Web爬行技术也æžå®¹æ˜“崩溃。
为了更好的适应Web上数以åƒäº¿çš„网页数é‡ï¼ŒGoogle采用了一ç§åˆ†å¸ƒå¼çš„Web爬行系统,由于URL server负责把URL需求æ交给若干个爬虫软件进行处ç†ã€‚需è¦è¯´æ˜Žçš„是,URLServer以åŠçˆ¬è™«éƒ½æ˜¯ç”¨Pythonè¯è¨€å®žçŽ°çš„。æ¯ä¸ªçˆ¬è™«ä¸€æ¬¡å¯ä»¥åŒæ—¶æ‰“开大约300ä¸ªè¿žæŽ¥çº¿ç¨‹ï¼Œè¿™æ ·ï¼Œç½‘é¡µçˆ¬è¡Œè¶³ä»¥ä¿æŒä¸€ä¸ªè¶³å¤Ÿå¿«çš„进度。å‡å¦‚使用4个crawler,系统就å¯ä»¥å®žçŽ°æœ€å¿«æ¯ç§’抓å–超过100个页é¢ï¼Œä¹Ÿå°±æ˜¯å¤§çº¦600k/秒的数æ®æµã€‚性能上的影å“主è¦æ¥è‡ªå¯¹äºŽDNS(域åæœåŠ¡ï¼‰çš„æŸ¥è¯¢ï¼Œå› æ¤ï¼Œæ¯ä¸ªçˆ¬è™«éƒ½é…有一个å•ç‹¬çš„DNS高速cacheï¼Œè¿™æ ·å¯ä»¥æœ‰æ•ˆçš„é¿å…å½±å“效率的DNSæŸ¥è¯¢ã€‚çˆ¬è™«æ‹¥æœ‰çš„çº¿ç¨‹åˆ†ä¸ºä¸‹åˆ—å‡ ç§çŠ¶æ€ï¼šDNS查询阶段,æ£åœ¨è¿žæŽ¥ä¸»æœºï¼Œå‘é€è¯·æ±‚阶段,以åŠå¤„ç†æœåŠ¡å™¨å“应过程。ä¾æ®çŠ¶æ€çš„ä¸åŒï¼Œçº¿ç¨‹è¢«åˆ†åˆ«æ”¾åœ¨ä¸åŒçš„队列ä¸ã€‚当线程的状æ€å‘生改å˜æ—¶ï¼Œå¼‚æ¥IOçš„æ–¹å¼è¢«ç”¨æ¥å‘出事件通知,åŒæ—¶çº¿ç¨‹è¢«è½¬ç§»åˆ°å¦ä¸€ä¸ªç›¸å…³é˜Ÿåˆ—ä¸ã€‚
事实上,由于é¢å¯¹å¦‚æ¤å·¨å¤§çš„æ•°æ®å¤„ç†ï¼Œæ€»ä¼šæœ‰ä¸€äº›éš¾ä»¥é¢„料的事情å‘生。举个例åæ¥è¯´ï¼Œå¦‚果爬虫试图处ç†çš„链接是一个在线游æˆï¼Œé‚£ä¼šå‡ºçŽ°ä»€ä¹ˆæƒ…况?情况的确很糟,自作èªæ˜Žçš„爬虫将å–回大é‡çš„垃圾页é¢ï¼Œè€Œå½“ä½ å‘现问题并试图处ç†æ—¶ï¼Œä½ å°†é¢å¯¹çš„是数以åƒä¸‡è®¡çš„å·²ç»è¢«ä¸‹è½½çš„网页。看æ¥ï¼Œæœ‰äº›å¯¼è‡´é”™è¯¯çš„å› ç´ ä¹Ÿè®¸æ ¹æœ¬æ˜¯æ— æ³•é¢„æµ‹çš„ã€‚ç³»ç»Ÿå¿…é¡»ç»è¿‡è®¤çœŸçš„测试。然而,Internet如æ¤ä¹‹å¤§ï¼Œæµ‹è¯•å·¥ä½œä»Žä½•å¼€å§‹ï¼Ÿè¿™ä¸ªæ—¶å€™ï¼Œåˆç†å¤„ç†ç”¨æˆ·çš„å馈信æ¯æ˜¾å¾—尤为é‡è¦ã€‚
4.4 Web索引技术(Indexing the Web)
解æžæŠ€æœ¯ï¼ˆParsing)--任何一ç§ä¸ºWeb设计的解æžæŠ€æœ¯å¿…须能够有效处ç†å„ç§å„æ ·å¯èƒ½å‡ºçŽ°çš„错误,包括HTMLæ ‡ç¾çš„æ‹¼å†™é”™è¯¯ï¼Œæ ‡ç¾å®šä¹‰ä¸ç¼ºå°‘çš„ç©ºæ ¼ï¼ŒéžASCIIå—符,错误嵌套的HTMLæ ‡ç¾ä»¥åŠå½¢å½¢è‰²è‰²çš„其它错误类型。这些错误都在挑战ç€è®¾è®¡è€…çš„æƒ³è±¡åŠ›ï¼Œä¿ƒä½¿ä»–ä»¬æ‹¿å‡ºåˆ›é€ æ€§çš„è®¾è®¡æ–¹æ¡ˆã€‚è€ƒè™‘åˆ°é€Ÿåº¦çš„æœ€å¤§åŒ–ï¼ŒGoogle没有采用由YACCæ¥äº§ç”ŸCFG解æžå™¨çš„åšæ³•ï¼Œè€Œä½¿ç”¨Flex(一ç§å¿«é€Ÿçš„è¯å…¸åˆ†æžå™¨åˆ¶ä½œå·¥å…·ï¼‰è®¾è®¡äº†ä¸€ä¸ªå…·æœ‰è‡ªå·±å †æ ˆçš„è¯å…¸åˆ†æžå™¨ã€‚当然,分æžå™¨å¿…é¡»åŒæ—¶å®žçŽ°ç¨³å®šæ€§å’Œé«˜é€Ÿåº¦çš„è¦æ±‚。
文档的哈希索引(Indexing Documents into Barrels)--文档被解æžä¹‹åŽï¼Œå°±ä¼šè¢«ç¼–ç 并放入有许多桶组æˆçš„哈希表ä¸ã€‚文档ä¸çš„æ¯ä¸€ä¸ªè¯ï¼Œé€šè¿‡æ£€ç´¢åœ¨å†…å˜ä¸è¿è¡Œçš„è¯å…¸å“ˆå¸Œè¡¨ï¼Œè¢«æ˜ å°„æˆå…¶æ‰€å¯¹åº”çš„WordID。è¯å…¸ä¸æ²¡æœ‰çš„è¯è¢«çºªå½•åˆ°ä¸€ä¸ªæ—¥å¿—文件ä¸ã€‚当一个wordè¢«æ˜ å°„æˆWordID时,它在当å‰æ–‡æ¡£ä¸çš„出现信æ¯å°†è¢«åŒæ—¶æž„é€ æˆç›¸åº”的命ä¸åˆ—表,然åŽå‘½ä¸åˆ—表被纪录到å‰åºç´¢å¼•ç›¸å¯¹åº”的桶ä¸ã€‚在这个过程ä¸ï¼Œè¯å…¸å¿…须被共享,所以如何解决索引阶段的并å‘æ“作问题æˆä¸ºä¸€ä¸ªéš¾é¢˜ã€‚有一个方案,å¯ä»¥é¿å…è¯å…¸çš„共享。在这个方案ä¸ï¼Œä½¿ç”¨ä¸€ä¸ªåŸºè¯å…¸ï¼Œå…¶ä¸å›ºå®šä½¿ç”¨å¤§çº¦14,000,000个è¯ã€‚扩增的è¯éƒ½å†™å…¥åˆ°æ—¥å¿—ä¸ã€‚è¿™æ ·ï¼Œå¤šæ„Ÿç´¢å¼•å™¨å°±å¯ä»¥å¹¶å‘的执行,而把这个包å«æ‰©å¢žè¯æ±‡çš„日志文件交给最åŽå‰©ä¸‹çš„一个索引器处ç†å°±å¤Ÿäº†ã€‚
排åºæŠ€æœ¯ï¼ˆSorting)--为了建立倒排索引,排åºæŽ’åºå™¨æŽ¥ç®¡è¿‡å‰å™ç´¢å¼•ä¸çš„桶,并按照WordID进行é‡æ–°æŽ’åºï¼Œä»Žè€Œäº§ç”Ÿäº†ä¸¤ç»„倒排åºçš„æ¡¶ï¼šä¸€ç»„æ˜¯å¯¹äºŽæ ‡é¢˜å’Œé”šå‘½ä¸çš„倒排åºç´¢å¼•ï¼ˆshort barrle),一组是对于所有命ä¸åˆ—表的倒排åºç´¢å¼•ï¼ˆfull barrle)。由于排åºçš„过程æ¯æ¬¡ä»…å†ä¸€ä¸ªæ¡¶ä¸è¿›è¡Œï¼Œæ‰€ä»¥åªéœ€è¦å¾ˆå°‘的临时空间。å¦å¤–,排åºçš„阶段被尽å¯èƒ½å¤šçš„分派到多å°è®¡ç®—机上è¿è¡Œï¼Œè¿™æ ·ï¼Œå¤šä¸ªæŽ’åºå™¨å°±å¯ä»¥å¹¶è¡Œå¤„ç†å¤šä¸ªä¸åŒçš„bucketã€‚å› ä¸ºæ…ä¸é€‚åˆè¢«æ”¾å…¥å†…å˜ä¸è¿è¡Œï¼ŒæŽ’åºå™¨ä¾¿æŠŠå®ƒç»†åˆ†ä¸ºä¸€ç³»åˆ—适åˆæ”¾è¿›å†…å˜ä¸çš„bucket,这些bucket是基于WordIDå’ŒdocID的。然åŽï¼ŒæŽ’åºå™¨æŠŠæ¯ä¸€ä¸ªbucketåŠ è½½åˆ°å†…å˜ä¸ï¼Œå¹¶æ‰§è¡ŒæŽ’åºï¼Œæœ€åŽæŠŠå®ƒçš„内容分别写入到short barrleå’Œfull barrle这两组倒排的桶ä¸ã€‚
4.5 æœç´¢æŠ€æœ¯ï¼ˆSearching)
能够高效地æ供高质é‡çš„æœç´¢ç»“果,是æ¯ä¸€ä¸ªæœç´¢æŠ€æœ¯çš„æœ€ç»ˆç›®æ ‡ã€‚å¾ˆå¤šå¤§åž‹çš„å•†ä¸šåŒ–æœç´¢å¼•æ“Žå·²ç»åœ¨æ‰§è¡Œæ•ˆçŽ‡æ–¹é¢å–得了很大的进æ¥ã€‚所以Google就把更多的精力投放到æœç´¢ç»“果的质é‡ç ”究上æ¥ã€‚当然,Google的执行效率åŒå•†ä¸šåŒ–çš„æœç´¢å¼•æ“Žç›¸æ¯”åŒæ ·æ¯«ä¸é€Šè‰²ã€‚
Googleçš„æœç´¢è¿‡ç¨‹å¦‚下。
1.解æžæŸ¥è¯¢å—符串;
2.把wordæ˜ å°„æˆwordIDï¼›
3.对æ¯ä¸€ä¸ªword,首先从short barrelä¸doclist的开头进行检索;
4.é历整个doclist直到å‘现有一个文档能够匹é…所有的æœç´¢é¡¹ç›®ï¼›
5.为æ¤æŸ¥è¯¢è®¡ç®—文档的级别;
6.如果到了short barrelä¸doclist的结尾,则从full barrelä¸doclist的开头继ç»è¿›è¡Œæ£€ç´¢ï¼Œå¹¶è·³è½¬åˆ°æ¥éª¤4ï¼›
7.如果没有到达doclist的结尾,跳转到æ¥éª¤4ï¼›
8.对所有通过rank匹é…的文档进行排åºï¼Œå¹¶è¿”回å‰K个查询结果。
为了控制å“应时间,一旦匹é…的文档数目达到æŸä¸ªæŒ‡å®šçš„值(例如40,000),如图4所示,æœç´¢å™¨å°±ç›´æŽ¥è·³è½¬åˆ°ç¬¬8æ¥ã€‚这就æ„味ç€å¯èƒ½æœ‰ä¸€äº›æ²¡æœ‰å®Œå…¨ä¼˜åŒ–的查询结果被返回。尽管如æ¤ï¼ŒPageRank技术的å˜åœ¨æœ‰æ•ˆåœ°æ”¹å–„了这ç§çŠ¶å†µã€‚
4.5.1级别审定系统(The Panking System)
与其它的æœç´¢å¼•æ“Žç›¸æ¯”,Google利用了更多的Web文档所æ供的信æ¯ã€‚æ¯ä¸€ä¸ªå‘½ä¸åˆ—表纪录了è¯çš„ä½ç½®ã€å—体ã€å¤§å°å†™ç‰ä¿¡æ¯ã€‚å¦å¤–,包å«åœ¨é”šæ–‡æœ¬ä¸çš„命ä¸å’Œæ–‡å…šçš„PageRankä¸€æ ·è¢«Google所关注。è¦æŠŠæ‰€æœ‰è¿™äº›ä¿¡æ¯éƒ½ç»¼åˆèµ·æ¥ç»™å‡ºä¸€ä¸ªé¡µé¢çš„级别有点难度,级别判定功能必定被设计æˆä¸ä¼šå—åˆ°ä»»ä½•ä¸ªåˆ«å› ç´ çš„å½±å“。
首先考虑一ç§æœ€ç®€å•çš„情况--å•è¯æŸ¥è¯¢ã€‚为了在å•è¯æ±‡æŸ¥è¯¢ä¸è®¡ç®—出一个文档的级别,Google首先分æžè¯¥è¯æ±‡åœ¨è¿™ä¸ªæ–‡æ¡£ä¸çš„命ä¸åˆ—表。Google为æ¯ä¸€ä¸ªå‘½ä¸å®šä¹‰äº†ä»¥ä¸‹å‡ ç§ä¸åŒçš„ç±»åž‹ï¼šæ ‡é¢˜ã€é”šã€URLã€æ™®é€šçš„大å—体文本ã€æ™®é€šçš„å°å—体文本 ,æ¯ä¸€ç§ç±»åž‹éƒ½æœ‰è‡ªå·±çš„类型æƒé‡ï¼ˆtype-weight).Google把命ä¸çš„类型æƒé‡ç»„åˆåˆ°ä¸€èµ·å½¢æˆä¸€ä¸ªä»¥ç±»åž‹ä¸ºç´¢å¼•çš„å‘é‡ï¼ŒæŽ¥ç€ç»Ÿè®¡å‡ºå‘½ä¸åˆ—表ä¸æ¯ä¸€ç§ç±»åž‹çš„命ä¸æ‰€å çš„æ•°é‡ã€‚æ¯ä¸€ä¸ªè®¡æ•°å€¼åˆè¢«è½¬æ¢ä¸ºä¸€ä¸ªè®¡æ•°æƒé‡ï¼ˆcount-weight),计数æƒé‡éšè®¡æ•°å€¼å‘ˆçº¿æ€§å¢žé•¿ï¼Œåˆ°è¾¾æŸä¸ªè®¡æ•°å€¼ä¹‹åŽå°±ä¼šè¶‹äºŽåœæ¢ã€‚最åŽï¼ŒæŠŠç±»åž‹æƒé‡ç»„æˆå‘é‡å’Œè®¡æ•°æƒé‡ç»„æˆçš„å‘é‡è¿›è¡Œç‚¹ä¹˜å¾—到的矢é‡ç§¯ä½œä¸ºè¯¥æ–‡æ¡£çš„IR分值。IR分值和PageRankå†è¿›è¡Œç»„åˆä»Žè€Œå¾—出文档最终的级别。
对于多è¯æ±‡çš„查询,情况å˜å¾—æ›´åŠ å¤æ‚。多个命ä¸åˆ—表需è¦è¢«åŒæ¥åˆ†æžï¼Œåœ¨æ–‡æ¡£ä¸å‡ºçŽ°ä½ç½®æ¯”较é 近的命ä¸å°±ä¼šæ¯”ä½ç½®ç¦»çš„教远的命ä¸å…·æœ‰è¾ƒé«˜çš„æƒé‡ã€‚多个命ä¸åˆ—表ä¸çš„命ä¸è¢«ç»¼åˆåˆ°ä¸€èµ·ä¸€ä½¿å¾—邻近的命ä¸æœ€ç»ˆè¢«åˆ†é…到一起。对于æ¯ä¸€ç»„ç»è¿‡åŒ¹é…的命ä¸ï¼Œä»–们之间的相似度(proximity)接ç€è¢«è®¡ç®—出æ¥ã€‚相似度基于命ä¸çš„文档(或锚)ä¸è·ç¦»çš„远近,并且被划分为10个ä¸åŒçš„值“binsâ€ï¼Œè¿™äº›bins的范围被定义为从çŸè¯åŒ¹é…(phrase match)åˆ°æ ¹æœ¬ä¸åŒ¹é…(not even close).除了对æ¯ä¸€ç§ç±»åž‹çš„命ä¸è¿›è¡Œè®¡æ•°ä¹‹å¤–,åŒæ—¶ä¹Ÿå¯¹æ¯ä¸€ç§ç±»åž‹å’Œç›¸ä¼¼åº¦è¿›è¡Œè®¡æ•°ã€‚æ¯ä¸€å¯¹ç±»åž‹å’Œç›¸ä¼¼åº¦çš„组åˆç§°ä½œä¸€ä¸ªç±»åž‹ç›¸ä¼¼åº¦æƒé‡ï¼ˆtype-prox-weight),命ä¸çš„计数则被转æ¢ä¸ºè®¡æ•°æƒé‡ã€‚最åŽï¼ŒæŠŠè®¡æ•°æƒé‡ç»„æˆçš„å‘é‡å’Œç±»åž‹ç›¸ä¼¼åº¦æƒé‡ç»„æˆçš„å‘é‡è¿›è¡Œç‚¹ä¹˜ä¹Ÿå¾—到一个IR分值。在Google的一ç§ç‰¹æ®Šçš„调试模å¼ä¸ï¼Œè¿™äº›æ•°å—和矩阵å¯ä»¥éšæŸ¥è¯¢ç»“果一åŒæ˜¾ç¤ºï¼Œè¿™å°†ä¸ºçº§åˆ«å®¡å®šç³»ç»Ÿçš„å¼€å‘工作带æ¥å¾ˆå¤§çš„帮助。
译者åŽè®°
å‰ä¸ä¹…è¯»åˆ°ä¸€ç¯‡æ–‡ç« ï¼Œã€ŠGoogleæœç´¢å¼•æ“Žç®—法的秘密》(《程åºå‘˜ã€‹åˆè®¢æœ¬2002下)。读完åŽå¯¹Googleçš„æ•°æ®å¤„ç†æœ‰äº†åˆæ¥çš„了解,但对于æœç´¢å¼•æ“Žçš„设计,ä»ç„¶ä¸€å¤´é›¾æ°´ã€‚
å¶ç„¶æ‰¾åˆ°è¿™ç¯‡ç”±Google的设计者Sergey Brin å’ŒLawrence Page在1998年第7届国际互è”网大会上å‘表的论文《The Anatomy of Large-Scale Hyperttextual Web Search Engine》,读完介ç»ä¸ºä¹‹ä¸€æŒ¯ã€‚然而,全篇å„ç§ä¸“业性的è¯æ±‡å’Œå¤§é‡æ™¦æ¶©éš¾æ‡‚çš„è¯å¥ä¸æ–扼æ€ç€æˆ‘继ç»è¯»ä¸‹åŽ»çš„勇气。我担心自己就这么放弃,于是我决定把它翻译出æ¥ã€‚
一连两个星期,我翻阅了大é‡çš„资料æ¥æ¶ˆåŒ–æ–‡ä¸æåŠçš„å„ç§ä¸“业术è¯ï¼Œä»Žè€Œåœ¨ç¿»è¯‘时尽é‡ä¿æŒä½œè€…的本æ„。尽管如æ¤ï¼Œä»ç„¶ä¼šæœ‰ä¸€äº›è¯¯è¯‘çš„åœ°æ–¹ï¼Œå¸Œæœ›è¯»è€…èƒ½å¤Ÿè°…è§£ã€‚æ–‡ç« æ¯”è¾ƒé•¿ï¼Œæˆ‘æ–©å¤´åŽ»å°¾ï¼Œç•™å…¶ç²¾åŽã€‚
è¯»å®Œå…¨æ–‡ï¼Œç›¸ä¿¡è¯»è€…å’Œæˆ‘ä¸€æ ·ï¼Œå·²ç»å¯¹æœç´¢å¼•æ“Žï¼ˆå°¤å…¶æ˜¯Google)的实现有了一个åˆæ¥çš„认识。这是一个全新的领域,希望我的努力能为更多的朋å‹å¸¦åŽ»ä¸€ç‚¹å¾®è–„的帮助。
最后编辑: 郝聪 编辑于2008/02/19 16:28
æ’°æ–‡/Sergey Brin. Lawrence Page 翻译/万æ€
æ–‡ç« æ¥è‡ªã€Šç¨‹åºå‘˜ã€‹
英文原文å¯ä»¥åœ¨è¿™é‡Œæ‰¾åˆ°http://dev.csdn.net/develop/article/12/12657.shtm
作为一ç§åŠŸèƒ½å¼ºå¤§çš„æœç´¢å¼•æ“Žï¼ŒGoogic的背åŽä¼¼ä¹Žéšè—ç€å·¨å¤§çš„奥秘,本文是Googic的两ä½åˆ›å§‹äººåœ¨1998年国际互è”网大会上å‘表的论文,通过对Google进行完整地剖æžï¼Œå¸®åŠ©è¯»è€…ç†è§£Google的实现过程
1。为什么è¦ç”¨Google
Web结构的特殊性为信æ¯æ”¶é›†å·¥ä½œå¸¦æ¥äº†æ–°çš„挑战。Web上的信æ¯æ•°é‡è¿…速增长的åŒæ—¶ï¼Œå¯¹äºŽWebæ¯«æ— ä½¿ç”¨ç»éªŒçš„新用户也在与日俱增。使用高质é‡çš„æœç´¢å¼•æ“Žï¼Œæ— ç–‘å¯ä»¥ç¼©çŸWebåŒæ–°ç”¨æˆ·ä¹‹é—´çš„è·ç¦»ã€‚大家关心的问题是,æœç´¢è´¨é‡å’Œæ•ˆçŽ‡ã€‚
Yahoo曾一度是用户的最佳选择。Yahoo的人工维护方å¼å¯ä»¥æœ‰æ•ˆæ¶µç›–最æµè¡Œçš„主题。然而,维护人员的主观性ã€é«˜æ˜‚的维护代价ã€è¾ƒæ…¢çš„更新速度都是Yahoo的缺陷。更é‡è¦çš„事,这ç§æ–¹å¼å¹¶ä¸èƒ½è¦†ç›–所有用户所关心的è¯é¢˜ã€‚所有这些制约了Yahoo的进一æ¥å‘展。基于关键å—çš„æœç´¢å¼•æ“Žéšä¹‹å‡ºçŽ°ï¼Œä½†æ–°çš„问题接踵而æ¥ï¼šæœç´¢å¼•æ“Žåˆ¶é€ 出的大é‡â€œåžƒåœ¾â€ç»“æžœé®ä½äº†ç”¨æˆ·çš„视线,也考验了更多人的è€å¿ƒã€‚一些广告商为了å¸å¼•ç”¨æˆ·çš„目光,采用一些手段欺骗æœç´¢å¼•æ“Žï¼Œè¿™ä½¿äº‹æƒ…å˜å¾—更糟。
Google为上述问题æ供了新的解决方案。首先,Google是基于关键å—çš„ï¼Œè¿™æ ·çªç ´äº†æŸ¥è¯¢ä¸»é¢˜çš„é™åˆ¶ï¼›å…¶æ¬¡ï¼ŒGoogle利用网页超级连接的深度和独创的PageRank算法,为网页赋予了“级别(Rank)â€å«ä¹‰ï¼šç”¨æˆ·çš„检索结果,是按照网页的级别(Rank)进行排åºçš„.级别高的网页链接排在å‰é¢ï¼Ž
  Google这个åå—çš„æ¥åŽ†ä¹Ÿå¾ˆæœ‰æ„æ€ï¼šGoogle的创建者å‚考了å•è¯googol(1ï¼ï¼‘ï¼ï¼ï¼‰çš„拼写,也许这和作者è¦å»ºç«‹å¤§è§„模的æœç´¢å¼•æ“Žçš„ç›®æ ‡ä¸è°‹è€Œåˆï¼Ž
2ï¼Žè®¾è®¡ç›®æ ‡
  æ£å¦‚ä½ æƒ³åˆ°çš„ï¼ŒGOOGLE的主è¦ç›®æ ‡æ˜¯æ高æœç´¢å¼•æ“Žçš„æœç´¢è´¨é‡å’Œæ˜“用性.1997年11月的一项调查ä¸ï¼ŒæŽ’åå‰å››ä½çš„商业化æœç´¢å¼•æ“Žï¼Œåœ¨æ‰§è¡Œä»¥å®ƒè‡ªèº«çš„åå—作为关键å—的查询时,仅有一个æœç´¢å¼•æ“Žåœ¨å…¶æœç´¢ç»“果的å‰ï¼‘ï¼æ¡æŸ¥è¯¢ç»“æžœä¸æ‰¾åˆ°è‡ªå·±ï¼Žé—®é¢˜å·²ç»å˜å¾—很明显:用户关心的ä¸æ˜¯æœç´¢å¼•æ“Žæ‰€èƒ½æ供的查询结果,而是在æœç´¢å¼•æ“Žä¸æ‰€èƒ½æ供的å‰æ•°åæ¡æŸ¥è¯¢ç»“æžœä¸ï¼Œèƒ½å¦æ‰¾åˆ°è‡ªå·±çš„满æ„ç”案.æ£å› 为如æ¤ï¼Œå½“Web文档æˆå€å¢žé•¿æ—¶ï¼Œå¦‚何æ供一个既易于æ“作,åˆèƒ½æ供准确查询的新的æœç´¢å¼•æ“ŽæŠ€æœ¯ï¼Žè¿™æˆä¸ºäº†å…³æ³¨çš„焦点.
ã€€ã€€è¿‘å‡ å¹´çš„ä¸€äº›ç›¸å…³ç ”ç©¶ä¸ºGoogle打开了æ€è·¯ï¼Žè¿™äº›ç ”究的主è¦æ–¹å‘是:如何从页é¢çš„超链接文本ä¸èŽ·å–对开å‘人员有用的信æ¯ï¼Žæ£æ˜¯é€šè¿‡å¯¹HTML文档ä¸è¶…文本链接的深度分æžï¼ŒGoogle为自己的精确度算法æ供了ç†è®ºä¾æ®ï¼Ž
  Google希望通过自己的努力,把原本åªå±žäºŽå•†ä¸šé¢†åŸŸçš„æœç´¢å¼•æ“ŽæŠ€æœ¯å¸¦åˆ°ç†è®ºç ”究的范畴,并能让更多的人å‚与和完善.GoogleæŠŠè‡ªå·±çš„ç³»ç»Ÿæ¯”å–»ä¸ºä¸€ä¸ªå¤§çš„å®žéªŒå®¤çŽ¯å¢ƒï¼Œå¹¶æ¬¢è¿Žå…¶ä»–é¢†åŸŸçš„ç ”ç©¶äººå‘˜å‚与其ä¸ï¼Žæ£æ˜¯åœ¨åƒåƒä¸‡ä¸‡å¦‚Googleè¿™æ ·çš„ç»„ç»‡çš„å¸¦åŠ¨ä¸‹ï¼ŒWeb获å–了它å‰æ‰€æœªæœ‰çš„å‘展动力.
3.技术分æž
  Google之所以能获å–高效率的查询结果,得益于其两相é‡è¦çš„技术特性:第一,Google分æžæ•´ä¸ªWeb的链接结构,然åŽè®¡ç®—出æ¯ä¸€ä¸ªç½‘页的级别,并进行综åˆè¯„分,这就是Google所采用的PageRank技术;第二,Google充分利用链接æ供的信æ¯ä»¥è¿›ä¸€æ¥æ”¹å–„查询质é‡ï¼Ž
 3.1 PageRank:页é¢çš„排åºæŠ€æœ¯
  Googleçš„æ ¸å¿ƒæŠ€æœ¯ç§°ä¸ºPageRank,这是Google的创始人Larry Pageå’ŒSergey Brin在斯å¦ç¦å¤§å¦å¼€å‘出的一套用于网页评级的系统.作为组织管ç†å·¥å…·ï¼ŒPageRank利用了互è”网独特的明主特性åŠå…¶å·¨å¤§çš„链接结构.在浩瀚的链接资æºä¸ï¼ŒGoogleæå–出上亿个超级链接进行分æžï¼Œåˆ¶ä½œå‡ºä¸€ä¸ªå·¨å¤§çš„网络地图(Map).ä¾æ®æ¤åœ°å›¾ï¼ŒPageRank技术能够快速的计算出网页的级别(Rank).这个级别的ä¾æ®æ˜¯ï¼šå½“从网页A连接到网页B时,Google就认为"网页A投了网页B一票".Googleæ ¹æ®ç½‘页的得票数评定其é‡è¦æ€§ï¼Žç„¶è€Œï¼Œé™¤äº†è€ƒè™‘网页得票数(å³é“¾æŽ¥ï¼‰çš„纯数é‡ä¹‹å¤–,Google还è¦åˆ†æžæŠ•ç¥¨çš„网页。“é‡è¦â€çš„网页所投出的票就会有更高的æƒé‡ï¼Œå¹¶ä¸”有助于æ高其他网页的“é‡è¦æ€§â€ã€‚
Google以其å¤æ‚而全é¢è‡ªåŠ¨çš„æœç´¢æ–¹æ³•æŽ’é™¤äº†äººä¸ºå› ç´ å¯¹æœç´¢ç»“果的影å“。所以说,PageRank相对是公平的。在这个æ„义上,对于基于关键å—æœç´¢çš„引擎技术æ¥è¯´ï¼ŒPageRankæ— ç–‘æ˜¯ä¸€é¡¹ä¼˜ç§€çš„æŠ€æœ¯ï¼ŒGoogleå¯ä»¥æ–¹ä¾¿ã€è¯šå®žã€å®¢è§‚地帮您在网页上找到任何有价值的资料。
3.1.1 PageRank算法æè¿°
近些年æ¥ï¼Œå¤§é‡çš„å¦æœ¯ç ”究æˆæžœè¢«åº”用到Webä¸ï¼Œä¸»è¦è¢«ç”¨æ¥ç»Ÿè®¡ç½‘页的引用或返回链接。这些数æ®ä¸ºç½‘页的é‡è¦æ€§å’Œä»·å€¼åˆ†æžæ供了粗略的ä¾æ®ã€‚基于æ¤, PageRank还进一æ¥ç»Ÿè®¡é“¾æŽ¥åœ¨æ‰€æœ‰ç½‘页ä¸å‡ºçŽ°çš„次数。PageRank定义如下所述:
å‡å®šé¡µé¢A有很多指å‘他的链接,分别定义为页é¢T1...Tn。我们å†å®šä¹‰é˜»å°¼ç³»æ•°d(0〈=d〈=1)。通常指定d=0.85(译者注:下一节给出实例分æžï¼‰ã€‚函数C(A)表示页é¢Aä¸æŒ‡å‘其他页é¢çš„链接的个数。那么,页é¢Açš„PageRank(PR(A))å¯ä»¥é€šè¿‡ä¸‹é¢çš„å…¬å¼è®¡ç®—出:
PR(A)=(1-d)+d(PR(T1)/C(T1)+...PR(Tn)/c(Tn))
注æ„到PageRank的值是通过整个Web计算出æ¥çš„,所以,所有页é¢çš„PageRank值的和必然为1。
通过简å•çš„递归计算,并å‚ç…§Webä¸è§„范型链接矩阵的主特å¾å‘é‡ï¼Œæˆ‘们就å¯ä»¥è®¡ç®—出一个页é¢çš„PageRank(PR(A))。å‡è®¾è®¡ç®—大约26,000,000个页é¢çš„PageRank,使用一å°ä¸ç‰è§„模的工作站,大约需è¦æ•°ä¸ªå°æ—¶çš„时间。具体实现的细节已ç»è¶…出文本的讨论范围,读者å¯ä»¥å‚考相关文档。
3.1.2 PageRank模型
为了更好地ç†è§£ PageRank,我们建立以下一个å‡æƒ³çš„模型。我们å‡å®šæœ‰ä¸€ä¸ªWeb用户æ£åœ¨éšæœºæµè§ˆæŸä¸ªç½‘页,éšç€å…´è¶£çš„å˜åŒ–,他也å¯èƒ½éšæœºç‚¹å‡»é¡µé¢ä¸çš„å¦ä¸€ä¸ªé“¾æŽ¥ï¼Œè·³è½¬åˆ°å…¶ä»–页é¢ï¼ˆæš‚且å‡å®šè¯¥ç”¨æˆ·æ²¡æœ‰ä½¿ç”¨è¿”回按钮)。在这个模型ä¸ï¼Œå¸å¼•ç”¨æˆ·ç‚¹å‡»æŒ‡å‘æŸä¸ªé¡µé¢çš„链接的概率就是页é¢çš„PageRank。而由于æŸäº›å› ç´ å¯¼è‡´ç”¨æˆ·é€‰æ‹©äº†å…¶ä»–é“¾æŽ¥çš„æ¦‚çŽ‡å°±æ˜¯è¯¥é¡µé¢çš„阻尼系数d。有一些æžç«¯çš„情况,如有些页é¢å¯èƒ½å¾ˆå°‘被人访问,这些页é¢å°±ä¼šç§¯ç´¯èµ·å¾ˆé«˜çš„阻尼系数。所以说,PageRank的技术å¯ä»¥å…¬å¹³æœ‰æ•ˆåˆ°é¿å…有些系统为了获å–较高级别而采å–一些欺骗æœç´¢å¼•æ“Žçš„行为。
一般æ¥è¯´ã€‚网页的链接指å‘越多,PageRank的值就会越高。åŒæ ·ï¼Œè¢«ä¸€äº›â€œé‡é‡çº§â€çš„网站(例如yahoo)引用的次数越多,PageRank的值åŒæ ·ä¹Ÿä¼šå¾ˆé«˜ã€‚相å,那些设计ä¸ä½³ï¼Œæˆ–è€…è¢«é“¾æŽ¥ç ´å指å‘的网页,将é€æ¸è¢«ç”¨æˆ·æ‰€é—å¿˜ã€‚æ‰€æœ‰çš„è¿™äº›å› ç´ éƒ½åœ¨PageRank技术的综åˆè€ƒè™‘之ä¸ã€‚
3.2锚文本(anchor text)
在Googleä¸ï¼Œé“¾æŽ¥æ–‡æœ¬ï¼ˆtext of link )被使用一ç§ç‰¹æ®Šçš„æ–¹å¼è¿›è¡Œå¤„ç†ã€‚大多数的æœç´¢å¼•æ“Žéƒ½æ˜¯æŠŠé“¾æŽ¥æ–‡æœ¬å’Œå®ƒæ‰€åœ¨çš„页é¢ç›¸å…³è”,而Google则把链接文本和它指å‘的文档è”系到一起(想想的确应该如æ¤ï¼‰ã€‚è¿™æ ·åšçš„优点很多:首先,锚(anchor )一般都会æ供它所指å‘的文档的准确的æè¿°ï¼Œè€Œè¿™æ ·ä¿¡æ¯ï¼Œé¡µé¢æœ¬èº«å¾€å¾€ä¸èƒ½æ供;第二,对于那些ä¸èƒ½è¢«åŸºäºŽæ–‡æœ¬çš„æœç´¢å¼•æ“Žå»ºç«‹ç´¢å¼•çš„文档,例如图象,程åºä»¥åŠæ•°æ®åº“ç‰ï¼ŒæŒ‡å‘它们的链接å´å¯èƒ½å˜åœ¨ï¼Œè¿™æ ·å°±ä½¿å¾—那些ä¸èƒ½è¢«å¼•æ“Žå–回分æžçš„æ–‡æ¡£ä¹Ÿèƒ½ä½œä¸ºæŸ¥è¯¢ç»“æžœè¿”å›žã€‚ä½†æ˜¯ï¼Œè¿™æ ·åšä¹Ÿå¯èƒ½ä¼šå¼•èµ·ä¸€äº›é—®é¢˜ï¼Œå› 为这些文档在返回给用户之å‰å¹¶æœªç»è¿‡æœç´¢å¼•æ“Žçš„有效性检查。在这ç§æƒ…况下,æœç´¢å¼•æ“Žå°±å¯ä»¥ç®€å•åœ°è¿”回查询结果,甚至ä¸ç”¨è€ƒè™‘页é¢æ˜¯å¦å˜åœ¨ï¼Œè€Œåªç®¡æ˜¯å¦æœ‰æŒ‡å‘它们的超级链接å˜åœ¨ã€‚ä¹Ÿè®¸ä½ ä¼šé—®ï¼Œè¿™åˆé€‚å—?ä¸ç”¨æ‹…心,由于查询结果是ç»è¿‡çº§åˆ«æŽ’åºè¾“出的,这ç§ç‰¹æ®Šçš„æƒ…å†µä¹Ÿè®¸æ ¹æœ¬çœ‹ä¸åˆ°ã€‚
其实,这ç§ä½¿ç”¨é”šæ–‡æœ¬æŠ€æœ¯çš„æ€æƒ³æ›´æ—©å¯ä»¥è¿½æº¯åˆ°World Wide Web Wormæœç´¢å¼•æ“Žã€‚它使得WWWWå¯ä»¥æ£€ç´¢åˆ°éžæ–‡æœ¬ä¿¡æ¯ï¼Œç”šè‡³æ‰©å±•åˆ°ä¸€äº›å¯ä»¥ä¸‹è½½çš„文档,Google继承了这ç§æ€è·¯ï¼Œå› 为它å¯ä»¥å¸®åŠ©æ供更好的æœç´¢ç»“果。然而,使用这ç§æŠ€æœ¯éœ€è¦å…‹æœå¾ˆå¤šçš„技术难题,首当其冲的就是如何处ç†å¦‚æ¤åºžå¤§çš„æ•°æ®é‡ã€‚我们æ¥çœ‹çœ‹ä¸€ç»„æ•°æ®ï¼Œåœ¨Google爬虫å–回的24,000,000个网页数æ®ä¸ï¼Œéœ€è¦å¤„ç†çš„链接数高达259,000,000之多。
3.3其它功能
除了PageRank和锚文本技术之外,Google还有一些其它的技术。首先,对于所有命ä¸ï¼ˆhits),Google都记录了å•è¯åœ¨æ–‡æ¡£ä¸çš„ä½ç½®ä¿¡æ¯ï¼Œè¿™äº›ä¿¡æ¯åœ¨æœ€ç»ˆçš„查询ä¸å¯ä»¥è¢«ç”¨æ¥è¿›è¡Œå•è¯çš„相似度分æžã€‚第二,Google还记录了页é¢ä¸çš„å—体大å°ã€å¤§å°å†™ç‰è§†è§‰ä¿¡æ¯ã€‚有的时候,大å·å—体和粗体的设置å¯ä»¥ç”¨æ¥è¡¨ç¤ºä¸€äº›é‡è¦çš„ä¿¡æ¯ã€‚第三,在repositoryæ•°æ®åº“ä¸ä¿å˜æ‰€æœ‰é¡µé¢çš„HTML代ç 。
(译注:命ä¸(hit)是Google定义的一个数æ®ç»“构,有关命ä¸å’Œç›¸ä¼¼åº¦çš„æ述,详è§ä¸‹æ–‡ã€‚)
4.系统剖æž
从上文ä¸ï¼Œæˆ‘们已ç»äº†è§£Google的一些工作原ç†ã€‚åœ¨è¿™ä¸€ç« èŠ‚ä¸ï¼Œæˆ‘们将一起深入探讨Google的体系框架,然åŽå…·ä½“介ç»Google用到的一些数æ®ç»“构。最åŽï¼Œæˆ‘们å†ä¸€èµ·åˆ†æžGoogle用到的三个关键技术:网页抓å–(crawling)ã€ç´¢å¼•(indexing)以åŠåŸºäºŽå…³é”®å—çš„æœç´¢(searching)。
4.1 Google体系框架
本节ä¸ï¼Œæˆ‘们共åŒæŽ¢è®¨Google体系框架的è¿è¡Œæµç¨‹ï¼Œå¦‚图1所示。下é¢çš„å‡ ä¸ªç« èŠ‚å°†è¯¦ç»†çš„ä»‹ç»æ‰€ç”¨åˆ°çš„技术和数æ®ç»“构。考虑到执行效率,Google ä¸çš„大部分代ç 都是用C/C++è¯è¨€å®žçŽ°çš„,并且å¯ä»¥åŒæ—¶è¿è¡Œåœ¨Solariså’ŒLinux系统ä¸ã€‚
图1
在Google的体系框架ä¸ï¼Œç½‘页爬行技术(Crawling,指网页的下载过程)是由若干个分布å¼çš„网络爬虫(Crawler)软件实现的。其ä¸ï¼Œä¸€ä¸ªå«åšURL Serverçš„æœåŠ¡å™¨è´Ÿè´£æŠŠéœ€è¦åˆ†æžçš„URL地å€åˆ—表分派给这些网络爬虫进行处ç†ã€‚网页数æ®å¦‚果被å–回,将立å³è¢«é€åˆ°Store Serverä¸ã€‚Store Server对网页数æ®è¿›è¡ŒåŽ‹ç¼©ï¼Œç„¶åŽä¿å˜åˆ°Repositoryæ•°æ®åº“ä¸ã€‚æ¯ä¸€ä¸ªæ–‡æ¡£éƒ½æ‹¥æœ‰ä¸€ä¸ªä¸Žä¹‹ç›¸å…³çš„唯一的IDç¼–å·ï¼ŒGoogle称它为docID。æ¯å½“有一个新的链接从页é¢ä¸è¢«è§£æž(parse)出æ¥ï¼Œå®ƒæ‰€æŒ‡å‘的文档就将自动获得一个docID。建立索引的任务则交给索引器(Indexer)和排åºå™¨(Sorter)æ¥å®Œæˆã€‚Indexerä¾æ¬¡ä»ŽRepositoryä¸å–出文档,对文档解压缩,然åŽå¯¹æ–‡
档进行解æžã€‚éšåŽæ–‡æ¡£è¢«è§£æžä¸ºä¸€ç»„命ä¸ã€‚在Googleä¸ï¼Œå‘½ä¸(hit)是一ç§æ•°æ®ç»“构,用æ¥è®°å½•å•è¯åœ¨æ–‡ä¸æ¯ä¸€æ¬¡å‡ºçŽ°çš„ä¿¡æ¯ã€‚在命ä¸ç»“æž„ä¸ï¼Œè®°å½•äº†æ¯ä¸ªè¯(word)ã€è¯åœ¨é¡µé¢ä¸çš„ä½ç½®ã€å¤§å°å†™ã€å—体相对大å°ç‰ä¿¡æ¯ã€‚è¿™æ ·ï¼Œæ¯ä¸ªè¯éƒ½æœ‰å¾ˆå¤šä¸åŒçš„命ä¸ï¼Œè¿™äº›å‘½ä¸çš„组åˆåˆç§°ä¸ºè¯¥è¯çš„命ä¸åˆ—表(hit list)。索引器把这些命ä¸å†å†™å…¥åˆ°ä¸€ç»„桶(barrel) ä¸ï¼Œå¹¶å»ºç«‹ä¸€ä¸ªéƒ¨åˆ†æŽ’åºçš„å‰å™ç´¢å¼•(foward index)。索引器还åŒæ—¶æŠŠç½‘页ä¸æ‰€æœ‰çš„链接的é‡è¦ä¿¡æ¯è§£æžå‡ºæ¥ï¼Œå¹¶è®°å½•åˆ°ä¸€ä¸ªå«åšAnchors的文件ä¸ã€‚该文件包å«äº†è¶³å¤Ÿå¤šçš„ä¿¡æ¯ï¼Œä»Žä¸å¯ä»¥æŸ¥è¯¢å‡ºæ¯ä¸€ä¸ªé“¾æŽ¥çš„æ¥æºã€æŒ‡å‘以åŠè¯¥é“¾æŽ¥çš„文本。
(译注:索引器还把解æžå‡ºçš„è¯å†™å…¥åˆ°ä¸€ä¸ªè¯å…¸(Lexiconä¸ï¼Œè¿™å°†åœ¨ä¸‹æ–‡ä¸æ到。)
URL ResolveræœåŠ¡å™¨è´Ÿè´£ä»Ž Anchors文件ä¸è¯»å–这些链接,把相对路径改为ç»å¯¹è·¯å¾„,å†è½¬æ¢ä¸ºç›¸åº”çš„ docID。通过docIDçš„å…³è”,锚文本的信æ¯ä¹Ÿè¢«åŠ 入到å‰åºç´¢å¼•çš„anchor hit结构ä¸ã€‚URL ResolveråŒæ—¶åˆ›å»ºäº†ä¸€ä¸ªLinksæ•°æ®åº“,用æ¥å˜æ”¾ä¸¤ä¸¤å¯¹åº”çš„docID。Linksæ•°æ®åº“被用æ¥è®¡ç®—所有文档的PagePank 。
接ç€æŽ’åºå™¨æŽ¥ç®¡è¿‡è¿™äº›æ¡¶ã€‚如å‰æ‰€è¿°ï¼Œè¿™äº›æ¡¶å·²ç»æŒ‰ç…§ docID进行了排åºã€‚排åºå™¨çš„主è¦ä»»åŠ¡æ˜¯æŒ‰ç…§WordIDé‡æ–°è¿›è¡ŒæŽ’åºï¼Œä»Žè€Œä¸ºè¿™äº›æ¡¶ç”Ÿæˆä¸€ä¸ªå€’排索引(inverted index)。这个æ“作是在æ¯ä¸ªæ¡¶ä¸æ‰§è¡Œçš„,所以åªéœ€è¦ç”¨åˆ°å¾ˆå°‘的临时空间。排åºå™¨è¿˜å»ºç«‹äº†ä¸€ä¸ªWordID列表,列表ä¸åŒæ—¶è®°å½•äº†è¯¥WordID在倒排索引ä¸çš„å移é‡å¤§å°ã€‚有一个å«åšDumpLexicon的工具,用æ¥æŠŠwordID和上文ä¸æ到的由索引器产生的è¯å…¸ï¼ˆLexicon)相结åˆï¼Œå¹¶äº§ç”Ÿä¸€ä¸ªæ–°çš„è¯å…¸ã€‚这个新的è¯å…¸è¢«ç”¨åœ¨æœ€ç»ˆçš„æœç´¢ç¨‹åºä¸ï¼Œè¿žåŒPageRank和倒排åºç´¢å¼•ä¸€èµ·ï¼Œä¸ºç”¨æˆ·æ供查询æœåŠ¡ã€‚
4.2 æ•°æ®ç»“æž„
Google对数æ®ç»“构进行了很多优化,其目的主è¦æ˜¯ä¸ºäº†æœ‰æ•ˆçš„å‡å°‘在处ç†å¤§æ–‡æ¡£çš„抓å–ã€ç´¢å¼•ä»¥åŠæŸ¥è¯¢æ—¶æ‰€éœ€è¦è€—费的æˆæœ¬ã€‚虽然这些年æ¥è®¡ç®—机的性能得到了很大的改善,但对于ç£ç›˜çš„检索ä»ç„¶éœ€è¦å¤§çº¦10ms的时间æ¥å®Œæˆã€‚基于性能的考虑,Googleå°½å¯èƒ½åœ°é¿å…使用ç£ç›˜æ“作,而这个想法也很大的影å“了数æ®ç»“构的设计æ€è·¯ã€‚
4.2.1 巨型文件(BigFile)
巨型文件(BigFile)被设计æˆä¸ºè·¨è¶Šå¤šæ–‡ä»¶ç³»ç»Ÿåœ°ã€64ä½åœ°å€ç©ºé—´çš„虚拟文件,并能够在多文件系统ä¸è‡ªåŠ¨è¿›è¡Œæ–‡ä»¶åˆ†é…ã€‚å› ä¸ºæ“作系统ä¸èƒ½ä¸ºæˆ‘们æ供有用的支æŒï¼Œå·¨åž‹æ–‡ä»¶åŒ…(BigFile package)被设计用æ¥è´Ÿè´£æ“作文件æ述符的创建和销æ¯ã€‚å¦å¤–,巨型文件也支æŒä¸€äº›åˆæ¥çš„压缩喧å“。
4.2.2 æ•°æ®ä»“库(Repository)
æ•°æ®ä»“库(Repository)ä¸ä¿å˜äº†æ¯ä¸€ä¸ªç½‘页完整的HTML代ç 。为了节çœç©ºé—´ï¼Œé¡µé¢åœ¨å˜å‚¨å‰ä½¿ç”¨zlib技术进行了压缩。压缩技术的选择综åˆè€ƒè™‘äº†é€Ÿåº¦å’ŒåŽ‹ç¼©æ¯”çš„å› ç´ ã€‚å°½ç®¡bzip技术在压缩比方é¢æŠ€é«˜ä¸€ç¹ï¼ˆåŽ‹ç¼©æ¯”达到了4:1),Google还是基于速度的考虑最终选择了zlib(压缩比åªæœ‰3:1)。文档记录在数æ®ä»“库ä¸é¡ºåºæŽ’列,并以docIDã€lengthã€URLç‰ä½œä¸ºæ–‡æ¡£è®°å½•çš„å‰ç¼€ï¼Œå¦‚图2所示。数æ®ä»“库的访问ä¸éœ€è¦ä½¿ç”¨ä»»ä½•å…¶ä»–çš„æ•°æ®ç»“æž„ï¼Œè¿™æ ·æœ‰åŠ©äºŽä¿æŒæ•°æ®çš„完整性,并且使得开å‘å˜å¾—更为容易。
图2
4.2.3 文档索引(Document Index)
文档索引(Document Index)用æ¥è·Ÿè¸ªæ¯ä¸€ä¸ªæ–‡æ¡£çš„ä¿¡æ¯ã€‚它是一ç§å®šå®½çš„ISAM(Index sequential access mode)类型的索引,并按照文档的docID进行了排åºã€‚索引ä¸çš„æ¯ä¸€é¡¹å˜å‚¨äº†å½“å‰æ–‡æ¡£çš„状æ€ã€æŒ‡å‘æ•°æ®ä»“库的指针ã€æ–‡æ¡£æ ¡éªŒå’Œï¼Œä»¥åŠä¸€äº›ç»Ÿè®¡ä¿¡æ¯ã€‚如果文档被爬虫å–回,则该索引项还将包å«ä¸€ä¸ªæŒ‡å‘docinfo文件的指针。docinfo文件包å«è¯¥æ–‡æ¡£çš„URLå’Œæ ‡é¢˜ï¼›å¦åˆ™ï¼Œè¿™ä¸ªæŒ‡é’ˆå°±è¢«æŒ‡å‘一个仅包å«ä¸€ç§æ¯”较紧凑的数æ®ç»“构,以åŠåœ¨ä¸€æ¬¡æœç´¢æ“作ä¸æŸ¥æ‰¾ä¸€æ¡ç£ç›˜è®°å½•çš„执行效率。
å¦å¤–,在转æ¢URLs到docIDs时需è¦ç”¨åˆ°ä¸€ä¸ªæ–‡ä»¶ã€‚这个文件其实是一个包å«URLæ ¡éªŒå’Œï¼ˆchecksum)和与它对应的docID的列表,并且按照checksum进行排åºã€‚通常,我们需è¦æ ¹æ®URLæ¥æŸ¥æ‰¾æ–‡æ¡£çš„docID。这时,首先计算出该URLçš„æ ¡éªŒå’Œï¼ˆchecksum)进行二进制的检索,然åŽæ ¹æ®æ£€ç´¢ç»“果找到其所对应的docID。其实,URL Resolveræ£æ˜¯ä½¿ç”¨è¿™ä¸ªåŠžæ³•æŠŠURL转æ¢ä¸ºdocID的。在这里使用批处ç†æ¨¡å¼å¾ˆæœ‰å¿…è¦ï¼Œå¦åˆ™å¯¹äºŽåŒ…å«322,000,000å„链接的数æ®é›†æ¥è¯´ï¼Œè¦æ£€ç´¢æ‰€æœ‰çš„链接至少得耗费数月之久。
4.2.4 è¯å…¸ (Lexicon)
  è¯å…¸æœ‰å¥½å‡ ç§ä¸åŒçš„æ ¼å¼ï¼Žéšç€å†…å˜æˆæœ¬çš„下é™ï¼ŒçŽ°åœ¨å¯ä»¥å®žçŽ°æŠŠè¯å…¸åµŒå…¥åˆ°å†…å˜ä¸è¿è¡Œï¼Œè¿™å°†å¯ä»¥å¤§å¤§æ高è¿è¡Œçš„效率.在一个256M电脑的内å˜ä¸ï¼Œå¯ä»¥è¿è¡Œä¸€ä¸ªåŒ…å«14,000,000个è¯æ±‡çš„è¯å…¸ã€‚è¯å…¸ç”±ä¸¤éƒ¨åˆ†æ¥å®žçŽ°ï¼šä¸€ä¸ªè¯åˆ—表(彼æ¤ä¹‹é—´ä»¥Null分隔)和一个包å«æŒ‡é’ˆçš„哈希表.
4.2.5 命ä¸åˆ—表(Hit Lists)
命ä¸åˆ—表(hit list)对应于æŸä¸ªç‰¹å®šçš„è¯åœ¨æŸä¸ªç‰¹å®šçš„文档ä¸ä¸€æ¬¡æˆ–多次的出现,它主è¦ç”¨æ¥è®°å½•è¯åœ¨æ–‡ä¸å‡ºçŽ°çš„ä½ç½®ã€å—体ã€å¤§å°å†™ç‰ä¿¡æ¯ã€‚命ä¸åˆ—表在å‰åºç´¢å¼•å’Œå€’排索引ä¸éƒ½å æ®äº†ç»å¤§éƒ¨åˆ†çš„ç©ºé—´ã€‚å› æ¤ï¼Œå‘½ä¸åˆ—表需è¦å°½å¯èƒ½åœ°ä»¥ä¸€ç§é«˜æ•ˆçŽ‡çš„æ–¹å¼æ¥å®žçŽ°ã€‚æœ‰å‡ ä¸ªå¯ä»¥ç”¨æ¥å‚考的编ç 方案:一个是简å•ç¼–ç æ–¹å¼ï¼ˆä¸‰ä½æ•´æ•°æ³•ï¼‰ï¼Œç¬¬äºŒæ˜¯åŽ‹ç¼©ç¼–ç æ–¹å¼ï¼ˆå¯¹ä½çš„分é…进行手工优化),最åŽä¸€ç§æ˜¯æœ‰åçš„éœå¤«æ›¼ç¼–ç æ–¹å¼ã€‚Google在æƒè¡¡äº†ç©ºé—´çš„å 用é‡ä»¥åŠå¯¹äºŽä½æ“作的å¤æ‚性之åŽï¼Œé€‰æ‹©äº†ç¬¬äºŒç§åŽ‹ç¼©ç¼–ç 方案。命ä¸çš„实现细节,å‚è§å›¾3
图3。
在这ç§åŽ‹ç¼©ç¼–ç ä¸ï¼Œæ¯ä¸ªå‘½ä¸å 用2个å—节的空间。命ä¸åˆå¯ç»†åˆ†ä¸ºä¸¤ç§ç±»åž‹ï¼šç‰¹æ®Šå‘½ä¸ï¼ˆfancy hit)和普通命ä¸ï¼ˆplain hit)。特殊命ä¸ï¼ˆfancy hit)是指出现在URLã€é¡µé¢æ ‡é¢˜ã€é”šæ–‡æœ¬æˆ–者metaæ ‡ç¾ä¸çš„命ä¸ï¼Œé™¤æ¤ä¹‹å¤–的全部命ä¸éƒ½æ˜¯æ™®é€šå‘½ä¸ï¼ˆplain hit)。普通命ä¸ï¼ˆplain hit)包å«æ ‡è¯†å¤§å°å†™çš„ä½ï¼ˆ1ä½ï¼‰ã€å—体大å°ä½ã€ä»¥åŠ12ä½çš„为之心系(如果在文档ä¸çš„ä½ç½®å¤§äºŽ4095,则一律以4096表示)。å—体大å°æ˜¯å—体在文档ä¸çš„相对大å°ï¼Œç”¨3ä½æ¥è¡¨ç¤ºã€‚å—体大å°åªä½¿ç”¨ä»Ž000到110这七个数,111被用æ¥å•ç‹¬è¡¨ç¤ºä¸€ä¸ªç‰¹æ®Šå‘½ä¸ï¼ˆfancy hit)。特殊命ä¸ï¼ˆfancy hit)也包å«ä¸€ä¸ªå¤§å°å†™çš„ä½ï¼ˆ1ä½ï¼‰ã€å—体大å°ï¼ˆè®¾ä¸º7=111)ã€4ä½çš„类型编ç ã€ä»¥åŠ8ä½çš„ä½ç½®ä¿¡æ¯ã€‚对于出现在锚文本的命ä¸ï¼ˆanchor hit)æ¥è¯´ï¼Œ8ä½çš„ä½ç½®ä¿¡æ¯åˆç»†åˆ†ä¸ºé”šä¸çš„ä½ç½®ä¿¡æ¯ï¼ˆ4ä½ï¼‰ä»¥åŠé”šæ‰€åœ¨çš„文档docIDçš„hash值(4ä½ï¼‰ã€‚è¿™æ ·ï¼Œåœ¨é’ˆå¯¹æŸäº›ç‰¹å®šçš„è¯è¿›è¡ŒæŸ¥è¯¢æ—¶ï¼Œå¦‚果找ä¸åˆ°è¶³å¤Ÿçš„链接匹é…,就å¯ä»¥ä»Žè¿™äº›anchor hitä¸æ‰¾ä¸€äº›æ¥è¡¥å……。以åŽï¼Œè€ƒè™‘到对于ä½ç½®ä¿¡æ¯å’ŒdocID的哈希值哈还会有更多的解决方案,anchor hitçš„å˜å‚¨æ–¹å¼å°†ä¼šæœ‰æ‰€æ”¹å˜ã€‚å¦å¤–,Google之所以使用å—体的相对大å°ï¼Œä¸»è¦æ˜¯è€ƒè™‘到在对文档计算级别时,我们ä¸èƒ½ä»…ä»…å› ä¸ºA文档使用了较大的å—体就说A文档比B文档级别高。
命ä¸åˆ—表的长度ä¿å˜åœ¨å‘½ä¸åˆ—表的å‰é¢ã€‚为了节çœç©ºé—´ï¼Œé‡‡ç”¨äº†ä¸€äº›ç‰¹æ®Šçš„技巧,从å‰åºç´¢å¼•çš„worldID自段和åŽæŽ’索引的docIDå—段ä¸åˆ†åˆ«åŽ‹ç¼©å‡º8ä½å’Œ5ä½ç©ºé—´ï¼Œç”¨æ¥å˜å‚¨è¯¥é•¿åº¦å€¼ã€‚如果长度值出现溢出,这些ä½å°†ä½¿ç”¨ä¸€ä¸ªæº¢å‡ºç¬¦è¡¨ç¤ºï¼Œå¹¶åœ¨ç´§æŽ¥ç€çš„下两个å—节ä¸åŒ…å«å®žé™…的长度值。
4.2.6 å‰åºç´¢å¼• (Forward index)
å‰åºç´¢å¼•å®žé™…å·²ç»ç»è¿‡éƒ¨åˆ†æŽ’åºã€‚它由许多个桶组æˆï¼Œæ¯ä¸ªæ¡¶ä¸ä¿å˜ä¸€å®šèŒƒå›´çš„wordID。如果æŸç¯‡æ–‡æ¡£ä¸è¯å¯¹åº”到æŸä¸ªæ¡¶ä¸çš„wordID,该文档的wordID也会被记录到该桶ä¸ã€‚æ¯ä¸ªdocIDåŽé¢ç´§è·Ÿç€ä¸€ä¸ªå±žäºŽå®ƒçš„wordID列表,而这些列表ä¸æ¯ä¸ªwordIDçš„åŽé¢åˆç´§è·Ÿç€è¯¥word的命ä¸åˆ—表。
å› ä¸ºå¤§é‡é‡å¤docIDçš„å˜åœ¨ï¼Œè¿™ç§å˜å‚¨æ–¹æ¡ˆä¹Ÿè®¸ä¼šå¸¦æ¥æ›´å¤§çš„空间需求。但是由于索引被分散在许多个桶ä¸ï¼Œè€Œä¸”è¿™ç§è®¾è®¡åœ¨æœ€åŽç”±æŽ’åºå™¨æ‰§è¡Œçš„çŸè¯ç´¢å¼•æ“作ä¸å¯ä»¥åˆç†åœ°èŠ‚çœæ—¶é—´ä¸Šçš„开销,并é™ä½Žäº†ç¼–程的å¤æ‚度,所以,空间上的这点浪费是完全å¯ä»¥å®¹å¿çš„。而且,wordIDä¸å˜å‚¨çš„实际上是WordID与其所在的桶ä¸çš„WordID最å°å€¼ä¹‹é—´è®¡ç®—出æ¥çš„ç›¸å¯¹å·®ã€‚è¿™æ ·ï¼ŒWordIDå°±åªéœ€è¦24ä½æ¥å˜å‚¨ï¼Œä½™ä¸‹çš„8ä½æ°å¥½å¯ä»¥è¢«ç”¨æ¥å˜å‚¨å‘½ä¸åˆ—表ä¸çš„长度(å‚è§ä¸Šæ–‡ï¼‰ã€‚
4.2.7倒排索引(Inverted Index)
å’Œå‰åºç´¢å¼•ä¸€æ ·ï¼Œåˆ°æŽ’索引也是由åŒä¸€ç»„桶所组æˆï¼Œåªæ˜¯è¿™äº›æ¡¶ç»è¿‡äº†æŽ’åºå™¨çš„进一æ¥å¤„ç†ã€‚对于æ¯ä¸€ä¸ªæœ‰æ•ˆçš„WordID,è¯å…¸ä¸éƒ½ä¼šæœ‰ä¸€ä¸ªæŒ‡å‘包å«è¯¥WordID的桶的指针。这个指针指å‘一个docID的列表(doclist),列表ä¸çš„æ¯ä¸€é¡¹éƒ½ç”±docID和该WordID的命ä¸åˆ—表组æˆã€‚该WordID所在的所有的文档的docID都包å«åœ¨è¯¥doclistä¸.
一个é‡è¦çš„问题是,doclit列表ä¸çš„docID应该如何排åºï¼Ÿä¸€ä¸ªæ¯”较简å•çš„è§£å†³æ–¹æ¡ˆæ˜¯ç›´æŽ¥æ ¹æ®docID排åºã€‚è¿™ç§æ–¹æ¡ˆåœ¨å¯¹å¤šå—è¯çš„å¤åˆæŸ¥è¯¢æ—¶ï¼Œå¯ä»¥å®žçŽ°å¤šä¸ªdoclist之间的快速归并(merge)æ“作。å¦å¤–一个å¤æ‚一点的方案,是按照word在æ¯ç¯‡æ–‡æŒ¡ä¸å‡ºçŽ°çš„级别进行排åºã€‚
è¿™ç§æ”¾æ¡ˆå¯¹äºŽå•å—è¯çš„查询作用ä¸å¤§ï¼Œä½†å¯¹äºŽå¤šå—è¯çš„查询,å¯ä»¥å®žçŽ°æŠŠæœ€è¿‘的查询结果排到å‰é¢ã€‚两ç§æ–¹æ¡ˆå„有自己的ä¸è¶³ã€‚首先,归并æ“作具有一定的难度;而级别计算函数的æ¯ä¸€æ¬¡æ”¹å˜éƒ½å¯èƒ½éœ€è¦å¯¹ç´¢å¼•è¿›è¡Œé‡å»ºï¼Œç€æ— 疑会给开å‘å·¥ä½œå¢žåŠ æ–°çš„éš¾åº¦ã€‚æ‰€ä»¥ï¼Œæœ‰å¿…è¦é‡‡å–一ç§æŠ˜ä¸çš„方案。在这个方案ä¸ï¼Œä¿æŒä¸¤ç»„排åºçš„桶,其ä¸ä¸€ç»„用æ¥åŒ…å«åœ¨æ ‡é¢˜æˆ–锚文本ä¸å‡ºçŽ°çš„命ä¸åˆ—表,å¦ä¸€ç»„则包å«æ‰€æœ‰çš„命ä¸åˆ—表。首先,查询第一组桶(short barrel)ä¸è¿›è¡Œï¼›å¦‚果找ä¸åˆ°è¶³å¤Ÿçš„匹é…,则转到å¦ä¸€ç»„桶(full barrel)ä¸ç»§ç»æŸ¥æ‰¾ã€‚
4.3 Web爬行技术(Crawling the Web)
  事实上,在Web上è¿è¡Œä¸€ä¸ªç½‘络爬虫(crawler)的工作颇具挑战性。这ä¸ä»…兼顾棘手的性能和å¯é æ€§å› ç´ ä¹‹å¤–ï¼Œæ›´é‡è¦çš„,还需è¦è€ƒè™‘ä¸€äº›ç¤¾ä¼šå› ç´ ã€‚ç”±äºŽéœ€è¦å®žæ—¶çš„å’Œæˆåƒä¸Šä¸‡å°çŠ¶æ€ä¸å¯æŽ§çš„WebæœåŠ¡å™¨è¿›è¡Œäº¤äº’,Web爬行技术也æžå®¹æ˜“崩溃。
为了更好的适应Web上数以åƒäº¿çš„网页数é‡ï¼ŒGoogle采用了一ç§åˆ†å¸ƒå¼çš„Web爬行系统,由于URL server负责把URL需求æ交给若干个爬虫软件进行处ç†ã€‚需è¦è¯´æ˜Žçš„是,URLServer以åŠçˆ¬è™«éƒ½æ˜¯ç”¨Pythonè¯è¨€å®žçŽ°çš„。æ¯ä¸ªçˆ¬è™«ä¸€æ¬¡å¯ä»¥åŒæ—¶æ‰“开大约300ä¸ªè¿žæŽ¥çº¿ç¨‹ï¼Œè¿™æ ·ï¼Œç½‘é¡µçˆ¬è¡Œè¶³ä»¥ä¿æŒä¸€ä¸ªè¶³å¤Ÿå¿«çš„进度。å‡å¦‚使用4个crawler,系统就å¯ä»¥å®žçŽ°æœ€å¿«æ¯ç§’抓å–超过100个页é¢ï¼Œä¹Ÿå°±æ˜¯å¤§çº¦600k/秒的数æ®æµã€‚性能上的影å“主è¦æ¥è‡ªå¯¹äºŽDNS(域åæœåŠ¡ï¼‰çš„æŸ¥è¯¢ï¼Œå› æ¤ï¼Œæ¯ä¸ªçˆ¬è™«éƒ½é…有一个å•ç‹¬çš„DNS高速cacheï¼Œè¿™æ ·å¯ä»¥æœ‰æ•ˆçš„é¿å…å½±å“效率的DNSæŸ¥è¯¢ã€‚çˆ¬è™«æ‹¥æœ‰çš„çº¿ç¨‹åˆ†ä¸ºä¸‹åˆ—å‡ ç§çŠ¶æ€ï¼šDNS查询阶段,æ£åœ¨è¿žæŽ¥ä¸»æœºï¼Œå‘é€è¯·æ±‚阶段,以åŠå¤„ç†æœåŠ¡å™¨å“应过程。ä¾æ®çŠ¶æ€çš„ä¸åŒï¼Œçº¿ç¨‹è¢«åˆ†åˆ«æ”¾åœ¨ä¸åŒçš„队列ä¸ã€‚当线程的状æ€å‘生改å˜æ—¶ï¼Œå¼‚æ¥IOçš„æ–¹å¼è¢«ç”¨æ¥å‘出事件通知,åŒæ—¶çº¿ç¨‹è¢«è½¬ç§»åˆ°å¦ä¸€ä¸ªç›¸å…³é˜Ÿåˆ—ä¸ã€‚
事实上,由于é¢å¯¹å¦‚æ¤å·¨å¤§çš„æ•°æ®å¤„ç†ï¼Œæ€»ä¼šæœ‰ä¸€äº›éš¾ä»¥é¢„料的事情å‘生。举个例åæ¥è¯´ï¼Œå¦‚果爬虫试图处ç†çš„链接是一个在线游æˆï¼Œé‚£ä¼šå‡ºçŽ°ä»€ä¹ˆæƒ…况?情况的确很糟,自作èªæ˜Žçš„爬虫将å–回大é‡çš„垃圾页é¢ï¼Œè€Œå½“ä½ å‘现问题并试图处ç†æ—¶ï¼Œä½ å°†é¢å¯¹çš„是数以åƒä¸‡è®¡çš„å·²ç»è¢«ä¸‹è½½çš„网页。看æ¥ï¼Œæœ‰äº›å¯¼è‡´é”™è¯¯çš„å› ç´ ä¹Ÿè®¸æ ¹æœ¬æ˜¯æ— æ³•é¢„æµ‹çš„ã€‚ç³»ç»Ÿå¿…é¡»ç»è¿‡è®¤çœŸçš„测试。然而,Internet如æ¤ä¹‹å¤§ï¼Œæµ‹è¯•å·¥ä½œä»Žä½•å¼€å§‹ï¼Ÿè¿™ä¸ªæ—¶å€™ï¼Œåˆç†å¤„ç†ç”¨æˆ·çš„å馈信æ¯æ˜¾å¾—尤为é‡è¦ã€‚
4.4 Web索引技术(Indexing the Web)
解æžæŠ€æœ¯ï¼ˆParsing)--任何一ç§ä¸ºWeb设计的解æžæŠ€æœ¯å¿…须能够有效处ç†å„ç§å„æ ·å¯èƒ½å‡ºçŽ°çš„错误,包括HTMLæ ‡ç¾çš„æ‹¼å†™é”™è¯¯ï¼Œæ ‡ç¾å®šä¹‰ä¸ç¼ºå°‘çš„ç©ºæ ¼ï¼ŒéžASCIIå—符,错误嵌套的HTMLæ ‡ç¾ä»¥åŠå½¢å½¢è‰²è‰²çš„其它错误类型。这些错误都在挑战ç€è®¾è®¡è€…çš„æƒ³è±¡åŠ›ï¼Œä¿ƒä½¿ä»–ä»¬æ‹¿å‡ºåˆ›é€ æ€§çš„è®¾è®¡æ–¹æ¡ˆã€‚è€ƒè™‘åˆ°é€Ÿåº¦çš„æœ€å¤§åŒ–ï¼ŒGoogle没有采用由YACCæ¥äº§ç”ŸCFG解æžå™¨çš„åšæ³•ï¼Œè€Œä½¿ç”¨Flex(一ç§å¿«é€Ÿçš„è¯å…¸åˆ†æžå™¨åˆ¶ä½œå·¥å…·ï¼‰è®¾è®¡äº†ä¸€ä¸ªå…·æœ‰è‡ªå·±å †æ ˆçš„è¯å…¸åˆ†æžå™¨ã€‚当然,分æžå™¨å¿…é¡»åŒæ—¶å®žçŽ°ç¨³å®šæ€§å’Œé«˜é€Ÿåº¦çš„è¦æ±‚。
文档的哈希索引(Indexing Documents into Barrels)--文档被解æžä¹‹åŽï¼Œå°±ä¼šè¢«ç¼–ç 并放入有许多桶组æˆçš„哈希表ä¸ã€‚文档ä¸çš„æ¯ä¸€ä¸ªè¯ï¼Œé€šè¿‡æ£€ç´¢åœ¨å†…å˜ä¸è¿è¡Œçš„è¯å…¸å“ˆå¸Œè¡¨ï¼Œè¢«æ˜ å°„æˆå…¶æ‰€å¯¹åº”çš„WordID。è¯å…¸ä¸æ²¡æœ‰çš„è¯è¢«çºªå½•åˆ°ä¸€ä¸ªæ—¥å¿—文件ä¸ã€‚当一个wordè¢«æ˜ å°„æˆWordID时,它在当å‰æ–‡æ¡£ä¸çš„出现信æ¯å°†è¢«åŒæ—¶æž„é€ æˆç›¸åº”的命ä¸åˆ—表,然åŽå‘½ä¸åˆ—表被纪录到å‰åºç´¢å¼•ç›¸å¯¹åº”的桶ä¸ã€‚在这个过程ä¸ï¼Œè¯å…¸å¿…须被共享,所以如何解决索引阶段的并å‘æ“作问题æˆä¸ºä¸€ä¸ªéš¾é¢˜ã€‚有一个方案,å¯ä»¥é¿å…è¯å…¸çš„共享。在这个方案ä¸ï¼Œä½¿ç”¨ä¸€ä¸ªåŸºè¯å…¸ï¼Œå…¶ä¸å›ºå®šä½¿ç”¨å¤§çº¦14,000,000个è¯ã€‚扩增的è¯éƒ½å†™å…¥åˆ°æ—¥å¿—ä¸ã€‚è¿™æ ·ï¼Œå¤šæ„Ÿç´¢å¼•å™¨å°±å¯ä»¥å¹¶å‘的执行,而把这个包å«æ‰©å¢žè¯æ±‡çš„日志文件交给最åŽå‰©ä¸‹çš„一个索引器处ç†å°±å¤Ÿäº†ã€‚
排åºæŠ€æœ¯ï¼ˆSorting)--为了建立倒排索引,排åºæŽ’åºå™¨æŽ¥ç®¡è¿‡å‰å™ç´¢å¼•ä¸çš„桶,并按照WordID进行é‡æ–°æŽ’åºï¼Œä»Žè€Œäº§ç”Ÿäº†ä¸¤ç»„倒排åºçš„æ¡¶ï¼šä¸€ç»„æ˜¯å¯¹äºŽæ ‡é¢˜å’Œé”šå‘½ä¸çš„倒排åºç´¢å¼•ï¼ˆshort barrle),一组是对于所有命ä¸åˆ—表的倒排åºç´¢å¼•ï¼ˆfull barrle)。由于排åºçš„过程æ¯æ¬¡ä»…å†ä¸€ä¸ªæ¡¶ä¸è¿›è¡Œï¼Œæ‰€ä»¥åªéœ€è¦å¾ˆå°‘的临时空间。å¦å¤–,排åºçš„阶段被尽å¯èƒ½å¤šçš„分派到多å°è®¡ç®—机上è¿è¡Œï¼Œè¿™æ ·ï¼Œå¤šä¸ªæŽ’åºå™¨å°±å¯ä»¥å¹¶è¡Œå¤„ç†å¤šä¸ªä¸åŒçš„bucketã€‚å› ä¸ºæ…ä¸é€‚åˆè¢«æ”¾å…¥å†…å˜ä¸è¿è¡Œï¼ŒæŽ’åºå™¨ä¾¿æŠŠå®ƒç»†åˆ†ä¸ºä¸€ç³»åˆ—适åˆæ”¾è¿›å†…å˜ä¸çš„bucket,这些bucket是基于WordIDå’ŒdocID的。然åŽï¼ŒæŽ’åºå™¨æŠŠæ¯ä¸€ä¸ªbucketåŠ è½½åˆ°å†…å˜ä¸ï¼Œå¹¶æ‰§è¡ŒæŽ’åºï¼Œæœ€åŽæŠŠå®ƒçš„内容分别写入到short barrleå’Œfull barrle这两组倒排的桶ä¸ã€‚
4.5 æœç´¢æŠ€æœ¯ï¼ˆSearching)
能够高效地æ供高质é‡çš„æœç´¢ç»“果,是æ¯ä¸€ä¸ªæœç´¢æŠ€æœ¯çš„æœ€ç»ˆç›®æ ‡ã€‚å¾ˆå¤šå¤§åž‹çš„å•†ä¸šåŒ–æœç´¢å¼•æ“Žå·²ç»åœ¨æ‰§è¡Œæ•ˆçŽ‡æ–¹é¢å–得了很大的进æ¥ã€‚所以Google就把更多的精力投放到æœç´¢ç»“果的质é‡ç ”究上æ¥ã€‚当然,Google的执行效率åŒå•†ä¸šåŒ–çš„æœç´¢å¼•æ“Žç›¸æ¯”åŒæ ·æ¯«ä¸é€Šè‰²ã€‚
Googleçš„æœç´¢è¿‡ç¨‹å¦‚下。
1.解æžæŸ¥è¯¢å—符串;
2.把wordæ˜ å°„æˆwordIDï¼›
3.对æ¯ä¸€ä¸ªword,首先从short barrelä¸doclist的开头进行检索;
4.é历整个doclist直到å‘现有一个文档能够匹é…所有的æœç´¢é¡¹ç›®ï¼›
5.为æ¤æŸ¥è¯¢è®¡ç®—文档的级别;
6.如果到了short barrelä¸doclist的结尾,则从full barrelä¸doclist的开头继ç»è¿›è¡Œæ£€ç´¢ï¼Œå¹¶è·³è½¬åˆ°æ¥éª¤4ï¼›
7.如果没有到达doclist的结尾,跳转到æ¥éª¤4ï¼›
8.对所有通过rank匹é…的文档进行排åºï¼Œå¹¶è¿”回å‰K个查询结果。
为了控制å“应时间,一旦匹é…的文档数目达到æŸä¸ªæŒ‡å®šçš„值(例如40,000),如图4所示,æœç´¢å™¨å°±ç›´æŽ¥è·³è½¬åˆ°ç¬¬8æ¥ã€‚这就æ„味ç€å¯èƒ½æœ‰ä¸€äº›æ²¡æœ‰å®Œå…¨ä¼˜åŒ–的查询结果被返回。尽管如æ¤ï¼ŒPageRank技术的å˜åœ¨æœ‰æ•ˆåœ°æ”¹å–„了这ç§çŠ¶å†µã€‚
4.5.1级别审定系统(The Panking System)
与其它的æœç´¢å¼•æ“Žç›¸æ¯”,Google利用了更多的Web文档所æ供的信æ¯ã€‚æ¯ä¸€ä¸ªå‘½ä¸åˆ—表纪录了è¯çš„ä½ç½®ã€å—体ã€å¤§å°å†™ç‰ä¿¡æ¯ã€‚å¦å¤–,包å«åœ¨é”šæ–‡æœ¬ä¸çš„命ä¸å’Œæ–‡å…šçš„PageRankä¸€æ ·è¢«Google所关注。è¦æŠŠæ‰€æœ‰è¿™äº›ä¿¡æ¯éƒ½ç»¼åˆèµ·æ¥ç»™å‡ºä¸€ä¸ªé¡µé¢çš„级别有点难度,级别判定功能必定被设计æˆä¸ä¼šå—åˆ°ä»»ä½•ä¸ªåˆ«å› ç´ çš„å½±å“。
首先考虑一ç§æœ€ç®€å•çš„情况--å•è¯æŸ¥è¯¢ã€‚为了在å•è¯æ±‡æŸ¥è¯¢ä¸è®¡ç®—出一个文档的级别,Google首先分æžè¯¥è¯æ±‡åœ¨è¿™ä¸ªæ–‡æ¡£ä¸çš„命ä¸åˆ—表。Google为æ¯ä¸€ä¸ªå‘½ä¸å®šä¹‰äº†ä»¥ä¸‹å‡ ç§ä¸åŒçš„ç±»åž‹ï¼šæ ‡é¢˜ã€é”šã€URLã€æ™®é€šçš„大å—体文本ã€æ™®é€šçš„å°å—体文本 ,æ¯ä¸€ç§ç±»åž‹éƒ½æœ‰è‡ªå·±çš„类型æƒé‡ï¼ˆtype-weight).Google把命ä¸çš„类型æƒé‡ç»„åˆåˆ°ä¸€èµ·å½¢æˆä¸€ä¸ªä»¥ç±»åž‹ä¸ºç´¢å¼•çš„å‘é‡ï¼ŒæŽ¥ç€ç»Ÿè®¡å‡ºå‘½ä¸åˆ—表ä¸æ¯ä¸€ç§ç±»åž‹çš„命ä¸æ‰€å çš„æ•°é‡ã€‚æ¯ä¸€ä¸ªè®¡æ•°å€¼åˆè¢«è½¬æ¢ä¸ºä¸€ä¸ªè®¡æ•°æƒé‡ï¼ˆcount-weight),计数æƒé‡éšè®¡æ•°å€¼å‘ˆçº¿æ€§å¢žé•¿ï¼Œåˆ°è¾¾æŸä¸ªè®¡æ•°å€¼ä¹‹åŽå°±ä¼šè¶‹äºŽåœæ¢ã€‚最åŽï¼ŒæŠŠç±»åž‹æƒé‡ç»„æˆå‘é‡å’Œè®¡æ•°æƒé‡ç»„æˆçš„å‘é‡è¿›è¡Œç‚¹ä¹˜å¾—到的矢é‡ç§¯ä½œä¸ºè¯¥æ–‡æ¡£çš„IR分值。IR分值和PageRankå†è¿›è¡Œç»„åˆä»Žè€Œå¾—出文档最终的级别。
对于多è¯æ±‡çš„查询,情况å˜å¾—æ›´åŠ å¤æ‚。多个命ä¸åˆ—表需è¦è¢«åŒæ¥åˆ†æžï¼Œåœ¨æ–‡æ¡£ä¸å‡ºçŽ°ä½ç½®æ¯”较é 近的命ä¸å°±ä¼šæ¯”ä½ç½®ç¦»çš„教远的命ä¸å…·æœ‰è¾ƒé«˜çš„æƒé‡ã€‚多个命ä¸åˆ—表ä¸çš„命ä¸è¢«ç»¼åˆåˆ°ä¸€èµ·ä¸€ä½¿å¾—邻近的命ä¸æœ€ç»ˆè¢«åˆ†é…到一起。对于æ¯ä¸€ç»„ç»è¿‡åŒ¹é…的命ä¸ï¼Œä»–们之间的相似度(proximity)接ç€è¢«è®¡ç®—出æ¥ã€‚相似度基于命ä¸çš„文档(或锚)ä¸è·ç¦»çš„远近,并且被划分为10个ä¸åŒçš„值“binsâ€ï¼Œè¿™äº›bins的范围被定义为从çŸè¯åŒ¹é…(phrase match)åˆ°æ ¹æœ¬ä¸åŒ¹é…(not even close).除了对æ¯ä¸€ç§ç±»åž‹çš„命ä¸è¿›è¡Œè®¡æ•°ä¹‹å¤–,åŒæ—¶ä¹Ÿå¯¹æ¯ä¸€ç§ç±»åž‹å’Œç›¸ä¼¼åº¦è¿›è¡Œè®¡æ•°ã€‚æ¯ä¸€å¯¹ç±»åž‹å’Œç›¸ä¼¼åº¦çš„组åˆç§°ä½œä¸€ä¸ªç±»åž‹ç›¸ä¼¼åº¦æƒé‡ï¼ˆtype-prox-weight),命ä¸çš„计数则被转æ¢ä¸ºè®¡æ•°æƒé‡ã€‚最åŽï¼ŒæŠŠè®¡æ•°æƒé‡ç»„æˆçš„å‘é‡å’Œç±»åž‹ç›¸ä¼¼åº¦æƒé‡ç»„æˆçš„å‘é‡è¿›è¡Œç‚¹ä¹˜ä¹Ÿå¾—到一个IR分值。在Google的一ç§ç‰¹æ®Šçš„调试模å¼ä¸ï¼Œè¿™äº›æ•°å—和矩阵å¯ä»¥éšæŸ¥è¯¢ç»“果一åŒæ˜¾ç¤ºï¼Œè¿™å°†ä¸ºçº§åˆ«å®¡å®šç³»ç»Ÿçš„å¼€å‘工作带æ¥å¾ˆå¤§çš„帮助。
译者åŽè®°
å‰ä¸ä¹…è¯»åˆ°ä¸€ç¯‡æ–‡ç« ï¼Œã€ŠGoogleæœç´¢å¼•æ“Žç®—法的秘密》(《程åºå‘˜ã€‹åˆè®¢æœ¬2002下)。读完åŽå¯¹Googleçš„æ•°æ®å¤„ç†æœ‰äº†åˆæ¥çš„了解,但对于æœç´¢å¼•æ“Žçš„设计,ä»ç„¶ä¸€å¤´é›¾æ°´ã€‚
å¶ç„¶æ‰¾åˆ°è¿™ç¯‡ç”±Google的设计者Sergey Brin å’ŒLawrence Page在1998年第7届国际互è”网大会上å‘表的论文《The Anatomy of Large-Scale Hyperttextual Web Search Engine》,读完介ç»ä¸ºä¹‹ä¸€æŒ¯ã€‚然而,全篇å„ç§ä¸“业性的è¯æ±‡å’Œå¤§é‡æ™¦æ¶©éš¾æ‡‚çš„è¯å¥ä¸æ–扼æ€ç€æˆ‘继ç»è¯»ä¸‹åŽ»çš„勇气。我担心自己就这么放弃,于是我决定把它翻译出æ¥ã€‚
一连两个星期,我翻阅了大é‡çš„资料æ¥æ¶ˆåŒ–æ–‡ä¸æåŠçš„å„ç§ä¸“业术è¯ï¼Œä»Žè€Œåœ¨ç¿»è¯‘时尽é‡ä¿æŒä½œè€…的本æ„。尽管如æ¤ï¼Œä»ç„¶ä¼šæœ‰ä¸€äº›è¯¯è¯‘çš„åœ°æ–¹ï¼Œå¸Œæœ›è¯»è€…èƒ½å¤Ÿè°…è§£ã€‚æ–‡ç« æ¯”è¾ƒé•¿ï¼Œæˆ‘æ–©å¤´åŽ»å°¾ï¼Œç•™å…¶ç²¾åŽã€‚
è¯»å®Œå…¨æ–‡ï¼Œç›¸ä¿¡è¯»è€…å’Œæˆ‘ä¸€æ ·ï¼Œå·²ç»å¯¹æœç´¢å¼•æ“Žï¼ˆå°¤å…¶æ˜¯Google)的实现有了一个åˆæ¥çš„认识。这是一个全新的领域,希望我的努力能为更多的朋å‹å¸¦åŽ»ä¸€ç‚¹å¾®è–„的帮助。
相关日志
è°·æŒç©¿è¶Šæœç´¢-è°·æŒå®˜æ–¹æ„šäººèŠ‚玩笑
Google将在æœç´¢ç»“果排å算法ä¸è€ƒè™‘æ¥è‡ªTwitterã€Quoraç‰ç¤¾ä¼šåŒ–网络社区的内容
桥页SEO:网站自我æ¯ç工具
《Google官方SEO入门指å—》å四: 对网站管ç†å‘˜æœ‰ç”¨çš„资æº(完)
《Google官方SEO入门指å—》å三:充分利用网站分æžå·¥å…·
《Google官方SEO入门指å—》å二:充分利用å…费的网站管ç†å‘˜å·¥å…·
《Google官方SEO入门指å—》å一:以æ°å½“çš„æ–¹å¼æŽ¨å¹¿ä½ 的网站
《Google官方SEO入门指å—》åï¼šä¸ºé“¾æŽ¥æ·»åŠ nofollow属性
《Google官方SEO入门指å—》ä¹ï¼šæœ‰æ•ˆä½¿ç”¨robots.txt
《Google官方SEO入门指å—》八:网页图片优化
è°·æŒç©¿è¶Šæœç´¢-è°·æŒå®˜æ–¹æ„šäººèŠ‚玩笑
Google将在æœç´¢ç»“果排å算法ä¸è€ƒè™‘æ¥è‡ªTwitterã€Quoraç‰ç¤¾ä¼šåŒ–网络社区的内容
桥页SEO:网站自我æ¯ç工具
《Google官方SEO入门指å—》å四: 对网站管ç†å‘˜æœ‰ç”¨çš„资æº(完)
《Google官方SEO入门指å—》å三:充分利用网站分æžå·¥å…·
《Google官方SEO入门指å—》å二:充分利用å…费的网站管ç†å‘˜å·¥å…·
《Google官方SEO入门指å—》å一:以æ°å½“çš„æ–¹å¼æŽ¨å¹¿ä½ 的网站
《Google官方SEO入门指å—》åï¼šä¸ºé“¾æŽ¥æ·»åŠ nofollow属性
《Google官方SEO入门指å—》ä¹ï¼šæœ‰æ•ˆä½¿ç”¨robots.txt
《Google官方SEO入门指å—》八:网页图片优化
最后编辑: 郝聪 编辑于2008/02/19 16:28