欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
關(guān)于搜索引擎及其開(kāi)發(fā)

google、百度們成功的福,搜索引擎火了半邊天。很多人都想跨到這個(gè)行業(yè)里邊來(lái)。前兩天在公司里邊面試了一些人,基本上沒(méi)有感到滿(mǎn)意。不是說(shuō)從業(yè)經(jīng)驗不夠,有些也已經(jīng)工作了三年、四年。不過(guò)我估計,或者說(shuō)是猜想,是不是做應用做的時(shí)間太長(cháng)了,把數據結構、算法,時(shí)間、效率都扔到一邊去了;然后平時(shí)的工作又太忙,平時(shí)自己工作的做的可以,但對工作相關(guān)的、稍微擴展的知識沒(méi)有時(shí)間或者說(shuō)是懶得去看了。。。。。

 

       我的想法是,如果有兄弟姐妹要進(jìn)入這個(gè)行業(yè),最好對這個(gè)行業(yè)流行的想法、做法了解一些,如果不了解這些,就把數據結構和算法的基礎課好好看看,或者說(shuō)好好練練編程的基本功。搜索引擎開(kāi)發(fā)涉及到了我們上學(xué)時(shí)學(xué)到的所有的東西。而且有些特別新的東西是沒(méi)有書(shū)可以看得,有的只是經(jīng)驗,經(jīng)過(guò)傳承到了后進(jìn)入者的手里;好的話(huà),就是有論文,不過(guò)有價(jià)值的都是英文論文,國內的都是抄來(lái)抄去,不如直接去看他的原文(比如,也不知道哪個(gè)神仙把robust翻譯成魯棒性,放著(zhù)健壯性之類(lèi)的已經(jīng)有的好詞不用,非得翻譯成這么一個(gè)上下不著(zhù)地的詞,而且現在還有逐漸流行的趨勢。。。。)。不過(guò),有本書(shū)叫做<<現代信息檢索>>MODERN INFORMATION RETRIEVAL),寫(xiě)的挺好。

 

呵呵。其實(shí)我在搜索引擎領(lǐng)域做的時(shí)間也不是多長(cháng),從進(jìn)中搜到現在有兩年多一點(diǎn)。我把我的所學(xué)到的一點(diǎn)經(jīng)驗和平時(shí)的思考的東西寫(xiě)出來(lái),與大家共同的切磋。寫(xiě)到哪里算是哪里,您就將就去看。

 

首先聲明:我不是牛人,離我所認為的牛人還差不少,大家一塊討論,口下留人,大家拍磚頭肯定可以把我拍死^ _ ^。
      

按照目的的不同,搜索引擎分了兩種:通用搜索(業(yè)內稱(chēng)為大搜索)和垂直搜索。網(wǎng)頁(yè)搜索是大搜索,新聞搜索、論壇搜索是垂直搜索,酷訊的生活搜索之類(lèi)的都是垂直搜索。

 

有人問(wèn)我,現在google,baidu都在做搜索,而且做的很成功,他的胳膊伸長(cháng)一點(diǎn),哪還有其他的小廠(chǎng)商生存的余地?其實(shí)不光是搜索這個(gè)行業(yè),其他的行業(yè)也存在、我們也可以提出相同的問(wèn)題。但是,每年都有新的公司冒起來(lái)即便是它所做的領(lǐng)域已經(jīng)有了成功的公司,但是走在前邊的成功公司并沒(méi)有擋住后邊新興公司的路。我認為,市場(chǎng)的容納能力和瞄準的市場(chǎng)不一樣決定了這個(gè)。單純以搜索領(lǐng)域來(lái)講,google國外做的很成功并且不斷擴張的的時(shí)候,中國的市場(chǎng)做的不是很好,百度抓住這個(gè)時(shí)間差讓“百度更懂中文“成功占據了大部分的份額;當大搜索起來(lái)的時(shí)候,眾多的垂直搜索已經(jīng)開(kāi)始興起,特別是本地搜索部分,這是有每個(gè)人的日常生活密切相關(guān)的部分,是一個(gè)很大的市場(chǎng)。搜索領(lǐng)域的領(lǐng)頭羊會(huì )把全部的精力都放在垂直搜索方面嗎?我看不會(huì )。他們的任務(wù)是把自己在搜索領(lǐng)域的優(yōu)勢繼續保持下去,君不見(jiàn)后來(lái)者居多,競爭非常激烈,特別是大搜索,搜狐的搜狗,QQ的,網(wǎng)易的有道。如果他們保持不了這個(gè)在行業(yè)內的領(lǐng)先地位,他們離著(zhù)關(guān)門(mén)不遠了。這是他們的已得市場(chǎng),已得利益。這當然不是說(shuō)他們不會(huì )擴張,他們會(huì )買(mǎi)很多的公司補充自己的不足,像google為了和百度的貼吧和百度知道競爭,投資迅雷,和天涯合作,花錢(qián)買(mǎi)來(lái)流量;百度忍受不了自己的用戶(hù)在看著(zhù)自己的貼吧的時(shí)候卻在用QQmsn交流,據說(shuō)要做自己的即時(shí)通了。呵呵。而且,現在各個(gè)巨頭也在開(kāi)始做本地搜索,手機搜索。。。。不管行業(yè)如何,留給各個(gè)后來(lái)者的機會(huì )還有很多,市場(chǎng)很大,永遠都有新想法誕生的可能。前提只有一個(gè):不要跟巨頭面對面的競爭,跟他們在他們的優(yōu)勢領(lǐng)域競爭不是找死嗎?我們的老祖宗早就有以己之長(cháng),攻彼之短,只要你能跑在大船的前面,被收購也算是一個(gè)不錯的選擇,況且還有很多成為巨頭的機會(huì )!巨頭的優(yōu)勢在于資金和技術(shù)積累;劣勢在于,龐大了以后掉頭不易,要做的太多,還要小心翼翼的保持第一不被超越。而且,行業(yè)的繁榮才能有巨頭的繁榮。珠穆朗瑪峰只能出現在青藏高原上。

 

一般說(shuō),搜索引擎包括這幾部分:下載(爬蟲(chóng))子系統,數據預處理子系統,搜索服務(wù),控制(及監控)部分。搜索引擎是一個(gè)比較新的行業(yè),國內也掌握了核心的技術(shù)。所以,和做OA,做工作流,做核心層上的應用有些不同,系統無(wú)論是從規模還是性能上講都有比較高的要求。咱們一個(gè)一個(gè)的說(shuō)。

 

下載?;ヂ?lián)網(wǎng)通過(guò)超鏈,每一個(gè)網(wǎng)頁(yè)是一個(gè)點(diǎn),然后點(diǎn)和點(diǎn)之間有關(guān)聯(lián),關(guān)聯(lián)的注釋就是鏈接文本,所有的鏈接組成了一個(gè)巨大的網(wǎng)。大搜索下載的任務(wù)就是把這些網(wǎng)的每一個(gè)點(diǎn)都保存到本地(當然這是說(shuō)理論上,現在互聯(lián)網(wǎng)的規模,恐怕google也無(wú)法把所有的東西都保存到本地)。這帶來(lái)幾個(gè)問(wèn)題:1. 網(wǎng)頁(yè)如何盡量不重復的下載。網(wǎng)絡(luò )帶寬資源是有限的,本地硬盤(pán)資源也是有限的,下載的時(shí)間也是有限制的,重復的下載系統受不了。2. 互聯(lián)網(wǎng)是不斷更新的,這種更新需要反映到本地硬盤(pán)上的數據。如何盡量及時(shí)的更新?

 

一個(gè)Url就是一個(gè)字符串,而且這個(gè)字符串比較長(cháng)。給保存和比較都帶來(lái)了麻煩。我們對Urlmd5映射,把它映射成一個(gè)64位的整形值?,F在大多用的是64位。Md5本來(lái)算出來(lái)時(shí)128位,一般是取前64位。Md5的重復率很低。我曾經(jīng)做過(guò)70Url的實(shí)驗,我盡量模擬Url的組成生成了70Url,然后取md5值,排重,沒(méi)有發(fā)現一個(gè)重的;而且md5的散列非常好,他本身可以認為是一個(gè)哈希散列,但是分布的非常隨機。我把70億的結果值分散到多個(gè)文件里邊,每個(gè)文件里邊的ID的個(gè)數基本上是一樣的。我們可以認為,每一個(gè)Url取了md5值以后,他的這個(gè)ID值是唯一的。它可以用來(lái)比較兩個(gè)字符串是否相同。也稱(chēng)作信息指紋。是判斷是否相同的重要的辦法。

 

ID值取模(mod)是一個(gè)非常重要的思想。依賴(lài)于md5值的散列性,你可以把大量的數據分成小堆,存到文件,各個(gè)小堆的數據是控制到可以放到內存中處理。這是查找、排重、以及后邊建索引的基本的方法。它使得我們可以把大任務(wù)分解成可以并發(fā)解決。這樣的并發(fā)系統是一個(gè)明顯的木桶理論模型:決定于處理速度最慢的一個(gè)。但是,md5的散列性非常好,各個(gè)處理部分處理的數據在規模上相差不大,或者說(shuō)基本上是一樣的。比如上邊所說(shuō)的例子,70ID值。70*8=56G,放到內存里邊不太現實(shí)??梢园阉麄儗?/span>200取模,放到文件,每個(gè)文件280M,然后對每一個(gè)文件進(jìn)行處理。那就隨你的便了。

 

下載分成Server端和Client端。Server端指定下載的種子,他把這些url發(fā)給Client端,client端把server端給的url下載下來(lái)以后,分析頁(yè)面把分析出來(lái)的url發(fā)給server端。。。。如此循環(huán)。有了上邊的介紹,判斷是否下載就好說(shuō)了。都是64位值得比較。最簡(jiǎn)單的辦法,你可以利用平衡二叉樹(shù),這是一個(gè)非常方便的動(dòng)態(tài)查找的辦法。不過(guò),數據量一大,64位值也會(huì )占用很多的內存。我們可以算一下。1*8約等于800M,而且樹(shù)節點(diǎn)左右指針也要占8個(gè)字節,平衡二叉樹(shù)還有一個(gè)標記變量,這樣算下來(lái),放完1億大約需要1.8G。不過(guò)他的查詢(xún)速度可以忍受,而且是絕對的不重復,沒(méi)有誤差。假設我們可以探測到的Url100億網(wǎng)頁(yè),按照這種辦法,一臺機器按照放2億計算,需要100/2=50server端。這樣的確是要不少的機器,當然還有其他的辦法。需要仔細的去想。呵呵。

 

垂直搜索的下載和大搜索的下載是不一樣的。垂直搜索針對一些特定的網(wǎng)站。以新聞為例:新聞下載會(huì )針對新聞源,比如新浪,china.com等新聞發(fā)布網(wǎng)站定時(shí)、定向抓??;尋找他們的新聞發(fā)布的規律,把那些網(wǎng)頁(yè)下載下來(lái)。這就沒(méi)有上邊所說(shuō)的大圖的遍歷和更新機制的問(wèn)題了。難度不可同日而語(yǔ)。

 

不過(guò),不要看了這些就認為下載很簡(jiǎn)單,這是一個(gè)與經(jīng)驗關(guān)系非常密切的活。上邊說(shuō)的都好說(shuō),但是,下載過(guò)程中碰到的問(wèn)題可就多了。你需要解決大量的意想不到的事情,我在這里也不能多說(shuō),不過(guò)可以舉幾個(gè)例子:如果你把一個(gè)網(wǎng)站訪(fǎng)問(wèn)的太過(guò)頻繁,重則把這個(gè)網(wǎng)站給弄癱瘓了(特別是小網(wǎng)站,大網(wǎng)站的抗打擊能力還可以),輕則。。。讓管理員注意到了太多的訪(fǎng)問(wèn)就把你的IP給封了。下載需要禮貌。畢竟是訪(fǎng)問(wèn)別人的網(wǎng)站。這是到別人家里做客??!可不比自己家!還有作弊網(wǎng)頁(yè),大量的SEO作弊網(wǎng)頁(yè),下載的時(shí)候需要去掉一部分;還有,不是所有的網(wǎng)站都是可以在任何時(shí)候訪(fǎng)問(wèn)的,新浪首頁(yè)下載不下來(lái)的時(shí)候你怎么辦?得多想想后邊如何處理。

 

下載完了的數據需要進(jìn)行處理。抽取標題,正文,父鏈接,字連接,鏈接文本。這是后邊的數據基礎。所有這些以及后邊的其他的部分,難度大多集中于數據量。

 

正文解析。把一個(gè)html中的正文解析出來(lái),不是很輕松。這個(gè)一般有兩種方法:1. 基于模板。這個(gè)用在新聞?wù)牡慕馕錾媳容^多。一個(gè)網(wǎng)站的新聞在一個(gè)時(shí)間段內往往有基本固定的格式,可以基本按照這個(gè)格式把不光是正文,各個(gè)值域,比如發(fā)布時(shí)間,作者等的統統解析出來(lái)。只是需要在網(wǎng)頁(yè)結構改變的時(shí)候,人工做很多的模板。 2. VIPS:基于視覺(jué)的Web頁(yè)面分頁(yè)算法。呵呵。簡(jiǎn)單講來(lái),就是人看一篇網(wǎng)頁(yè)的時(shí)候,人覺(jué)得網(wǎng)頁(yè)正文應該在什么地方,然后讓程序去根據位置模擬人的視覺(jué)判斷,把正文解析出來(lái)。說(shuō)到這里多說(shuō)兩句,微軟很有意思,VIPS以及后邊要提到的相關(guān)性的BM25公式都是微軟研究院提出來(lái)的,而且這兩種辦法在搜索引擎上用的都是很廣泛,事實(shí)證明,這兩個(gè)辦法是非常有效的辦法。但是,呵呵,搜索他還是沒(méi)有干過(guò)google。不光這樣,msnlivesearch在各個(gè)搜索結果質(zhì)量排名的時(shí)候基本都是倒數的。真是奇了怪了。不知道微軟工程院是怎么干的。呵呵。

 

排重。也叫網(wǎng)頁(yè)指紋,這個(gè)針對于網(wǎng)頁(yè)的正文。網(wǎng)頁(yè)有大量的轉載網(wǎng)頁(yè)。他們的正文區別就是一個(gè)或者是幾個(gè)字的區別,剩下的不同都是亂七八糟的廣告,flash。如何才能判斷是否重復?一般有兩種:1. 關(guān)鍵字Top10   2. 文本向量的方法。 這些網(wǎng)上都有很多的討論,也有人做了很多的教程。你在網(wǎng)上多搜一下,以后有時(shí)間我也可以總結一下。而且,這些我們認為重復的網(wǎng)頁(yè)是否做索引?索引怎么放?是個(gè)問(wèn)題。你可以看看各個(gè)大搜索引擎的相似網(wǎng)頁(yè)功能。

 

PageRank,基于鏈接分析。最早是google的創(chuàng )始人提出來(lái)的。你可以看他們的論文<< The Anatomy of a Large-Scale Hypertextual Web Search Engine>>;  有意思的是,百度的創(chuàng )始人李彥宏在鏈接分析上也有專(zhuān)利,是否有點(diǎn)巧合?呵呵。不過(guò),可以說(shuō)對鏈接的分析開(kāi)啟了第二代搜索。第一代搜索是以雅虎的目錄式,第二代以google為代表。第三代?我認為那是概念。還沒(méi)有看到,還沒(méi)有看到搜索的革命性變化。PageRank給出了一個(gè)靜態(tài)的表示網(wǎng)頁(yè)質(zhì)量的方法,他認為,被鏈接的次數越多的網(wǎng)站,他的質(zhì)量越好,重要程度越高。有點(diǎn)類(lèi)似于越是明星,認識他的人也就越多一樣。當然還有其他的辦法分析鏈接。你可以找找看。 很多這樣的論文,簡(jiǎn)直太多了,不過(guò)夠用就好。挖地三千尺應該是google們干的事情。

 

互聯(lián)網(wǎng)構成的這個(gè)巨大的圖還有這樣的特性,如果我們截取的是一塊,假設類(lèi)似一個(gè)圓,那么直徑越大,理論上邊際節點(diǎn)越多。 所謂的邊際節點(diǎn)就是他的鏈接我們有,但是沒(méi)有這些鏈接對應的網(wǎng)頁(yè)。有點(diǎn)類(lèi)似于誰(shuí)的名言來(lái)著(zhù):知道的越多,不知道的也越多。隨著(zhù)互聯(lián)規模的擴大,這種趨勢也越來(lái)越明顯,特別是我們只下載其中一部分網(wǎng)頁(yè)的情況下。這種邊際節點(diǎn)給理論上的PageRank計算帶來(lái)了不小的問(wèn)題:大量的邊際節點(diǎn)的存在,讓原始的PageRank計算難以發(fā)揮用,不過(guò),很快就有人提出了新的PageRank算法。你可以看一下相應的論文。

 

快照。下載的時(shí)候,把網(wǎng)頁(yè)down到本地來(lái),然后,當一個(gè)Url對應的網(wǎng)頁(yè)打不開(kāi)的時(shí)候,你可以打開(kāi)搜索引擎做上的快照,看看爬蟲(chóng)當時(shí)爬下來(lái)的網(wǎng)頁(yè)的樣子,不過(guò)一般都是把網(wǎng)頁(yè)上亂七八糟的東西比如flash廣告都去掉了---為了節省硬盤(pán)空間。

 

說(shuō)到這里就需要說(shuō)一下全局ID以及什么時(shí)候需要這樣的ID值。每一個(gè)網(wǎng)頁(yè)都有一個(gè)ID值,這個(gè)ID就是他的urlMd5值。如果我們的數據有       10億,20億,幾十億。。。。。把所有的數據都放到一臺機器上肯定不可能。我們用上邊提到的取模的辦法,分散到各個(gè)機器上。什么時(shí)候需要這樣的全局唯一ID值那?那就是你在機器間需要唯一標志的時(shí)候。這不是廢話(huà)嗎?我們慢慢講。一般快照是不和索引數據放到一塊的。 我們取快照的時(shí)候,其實(shí)是給定一個(gè)ID值,然后從另外的機器上找到這個(gè)值對應的東西顯示給用戶(hù)。如果,我說(shuō)的是如果,我們的數據都是按照取模的辦法分散開(kāi)來(lái),相應的數據放到了一臺機器上,那就不需要全局唯一了,只要本臺機器上唯一就可以了。不是嗎?

 

倒排索引。所謂的倒排是相對于我們的平時(shí)的習慣來(lái)的。平時(shí)的習慣是看到文章的標題,正文,然后是文章的內容的詞。倒排反了過(guò)來(lái),他是這樣的,關(guān)鍵詞,位置,其他屬性,文章。有點(diǎn)類(lèi)似于,我們寫(xiě)信的時(shí)候,地址是從大到小,然后到人,美國人是從人開(kāi)始直到他的國家。呵呵。這樣的好處是什么那?文章的集合是一個(gè)無(wú)窮盡的集合,但是,關(guān)鍵詞的集合是相對小的多的集合,是可以枚舉的,是基本有上限的詞的集合構成了無(wú)窮盡的文章集合。而且,同一個(gè)關(guān)鍵詞可以存在于不很多的文章里邊,這么做可以節省內存,也可以方便做針對關(guān)鍵詞的文章間的橫向分析;同時(shí),用戶(hù)輸入的是關(guān)鍵詞,需要的是結果是文章,這樣就在用戶(hù)和文章之間建立一個(gè)通道?,F在的搜索都是基于關(guān)鍵詞的,所謂的推送,還有用戶(hù)習慣的分析都是基于關(guān)鍵詞的,只不過(guò)比用戶(hù)自己輸入關(guān)鍵詞做了一層包裝,方便了一點(diǎn)。這就是我為什么上邊說(shuō)搜索上革命性的變化還沒(méi)有看到的原因。如果說(shuō)關(guān)鍵詞搜索是搜索2.0,那些概念做的好的話(huà)充其量也就是2.01,比第三代還差的遠。當然,也許是我知道的太少,如果您看到了這樣的東西,不妨告訴我,我也非常想知道。我認為,第三代是基于內容的分析和理解上的。不過(guò),這只是猜想。我還遠沒(méi)有達到大師的級別。

 

分詞?;陉P(guān)鍵詞的檢索有一個(gè)前提條件,那就是,把文章分成一個(gè)個(gè)關(guān)鍵詞。分成怎樣的關(guān)鍵詞集合,標準是人來(lái)制定的。人在看完一篇文章以后,讀懂了他的意思,然后把各個(gè)句子分開(kāi)成一個(gè)個(gè)的詞。當網(wǎng)頁(yè)到了如此大規模的時(shí)候,用人工的方法斷句分詞當然是不現實(shí)的。用程序分詞就需要告訴程序,怎樣才算是一個(gè)詞。有幾種辦法。我也知道的不是很多,沒(méi)有對這個(gè)深入的研究過(guò)。不過(guò)都需要詞典的支持,這個(gè)詞典是人工生成的?;谠~典的最大匹配辦法很常用。還有一個(gè)方法是人工對一堆的文章進(jìn)行斷詞,然后計算機統計一個(gè)詞在另外一個(gè)詞后邊存在的概率。然后在處理新的文章的時(shí)候,他可以根據這個(gè)確定是否是把字符串這樣分開(kāi)。

 

關(guān)鍵詞也是字符串,他們的比較我們一般還是用md5的辦法,稱(chēng)之為WordID。整數的比較、存放比長(cháng)度變化的字符串之間的比較自然是方便了很多。

 

如果搜索引擎只是返回包含這個(gè)關(guān)鍵詞的文章集合,那不叫信息檢索,那叫查詢(xún)。就跟在數據庫中寫(xiě)一個(gè)sql語(yǔ)句查詢(xún)一樣。呵呵。之所以叫做信息檢索,就因為有了對結果的排序,也叫做相關(guān)性排序。一個(gè)關(guān)鍵詞在一個(gè)文章中的比重是不同的,甚至是出現在不同的位置,標題,正文的各個(gè)位置,鏈接文本。。。。。。帶來(lái)的效果都是不同的。也可以說(shuō)這篇文章對因為關(guān)鍵詞所得的分數是不一樣的,然后根據這些給文章打分,根據分數把文章排序。上邊提到的<<現代信息檢索>>講基礎部分講的很好,BM25公式提出的辦法是現在用的最廣泛的;當然都需要在實(shí)際當中針對自己的方法做出相應的改變。一般認為這和大規模數據的檢索程序一起視為搜索引擎的核心技術(shù)。 任何的數據處理,檢索辦法都是為了后續的排序做準備的。沒(méi)有相關(guān)性排序不能稱(chēng)之為搜索引擎。當其他的工程部分趨向于定式的時(shí)候,唯有分詞和相關(guān)性排序需要加大后期的投入。

 

其實(shí),仔細想想就可以發(fā)現,現在所有的技術(shù)都是基于統計的。沒(méi)有真正意義上的基于內容的分析和理解。計算機還是一如既往的死板,直腸子,不會(huì )拐彎,還只會(huì )按照人設定的規則去做,還遠沒(méi)有做到像人一般的聯(lián)想,自己設定智能意義的規則,我認為,對內容的理解是基于對事物之間的關(guān)系以及對它們之間的聯(lián)想上的?,F階段的內存和硬盤(pán)簡(jiǎn)單的數組、矩陣關(guān)系顯然難以達到這一點(diǎn)。他的發(fā)展應該是向著(zhù)仿生的方向發(fā)展的,特別是人的腦袋,不是說(shuō)人的腦袋全部開(kāi)發(fā)可以存下美國最大的圖書(shū)館嗎?呵呵。不過(guò),一旦真正意義上的智能出現,他的發(fā)展當然是指數級別的。智能計算機的生產(chǎn)自己的下一代,我的天,那是迭代的。呵呵。這是隨便說(shuō)著(zhù)玩的。您也就姑且當作一樂(lè )。

 

當然,在全面的解決辦法臨之前,并不是說(shuō)我們就堵在這里就沒(méi)有辦法前進(jìn)了。社區和知識庫是現在的搜索引擎的非常好的補充。當大搜索,相關(guān)性排序大家做的差不多趨于一致的的時(shí)候,百度貼吧、百度知道的有利補充讓百度搜索凸顯了了和其他公司的大搜索的不同。你搜索的時(shí)候可以注意一下,你在百度上搜的東西那些是來(lái)自于貼吧和知道的。特別是那些與日常生活關(guān)系很大的信息,比如,在北京我到哪里買(mǎi)黃金(前兩天跟媳婦去買(mǎi)結婚戒指了?。?,輸入這個(gè)關(guān)鍵詞“北京 買(mǎi)黃金”。。。。他的問(wèn)題是人提出來(lái)的,人回答的,還有內部的答案篩選機制。大家的參與,一旦形成了規模效應,效果立馬顯現。就好像,百度搜什么搜的都很準,用戶(hù)體驗非常的好,久而久之形成了搜索的習慣。習慣一旦養成,想改變是一個(gè)困難的事情。呵呵。而且現在能做到輸入一句話(huà)全句飄紅的也僅此一家而已。大搜索雅虎中國在做,搜狐在做,QQ也在做。如果不能在這個(gè)方面把百度比下去的話(huà),想把頭把交椅搶過(guò)來(lái)是一個(gè)很困難的事情,其他的方面弄大家做到最后都差不多嘛!Google就跟天涯這樣的社區合作,很漂亮的戰略和戰術(shù),天涯內容發(fā)展好了,對google來(lái)講,跟百度貼吧有的一拼。不過(guò)還有一個(gè)有潛力的,QQ。他的人氣,是任何人都不能小覷的,而且本身又有錢(qián)。只是發(fā)力晚了4、5年。暫且不對現有的秩序造成大的沖擊,過(guò)兩年就不一定了。

 

建索引,檢索,控制(監控),應該是算是一塊的。他們的難度都在于數據量。

數據量的規模上去了,所有以前可能忽略的問(wèn)題都會(huì )變成問(wèn)題。

1.       7*24小時(shí)服務(wù)。這包含兩部分,一部分是軟件的,一部分是硬件的。

軟件部分。數據不停的來(lái),不停的處理;搜索請求不停的來(lái),服務(wù)程序不停的響應。一旦程序出現了什么問(wèn)題,這個(gè)流水線(xiàn)的處理就出現了中斷。我們需要知道,程序為什么出現了問(wèn)題。任何的程序都不會(huì )是第一次運行就會(huì )天生可以穩定高效運行的。我需要實(shí)時(shí)知道的狀態(tài),他在干什么;它死了的時(shí)候我需要知道為什么玩完了。這些都需要日志的支持。而且還需要不同的日志記錄到不同的文件里邊,以便于后續的人工統計和分析。比如,查詢(xún)日志。用戶(hù)的查詢(xún)日志是一個(gè)非常重要的資源,是可以用來(lái)進(jìn)行后續分析的重要資源。而對于數據處理程序來(lái)講,可以斷點(diǎn)重啟,就像flashget的斷點(diǎn)重下一樣,是非常方便和重要的。這些都有賴(lài)于不同的日志和斷點(diǎn)環(huán)境的保存。

 

一般的c,c++程序容易出現的問(wèn)題是內存泄露和內存的越界訪(fǎng)問(wèn)。

Linux的內存泄露問(wèn)題可以通過(guò)一個(gè)開(kāi)源工具valgrind來(lái)測試;windows下邊的程序也有相應的頭文件進(jìn)行內存的判斷(調用微軟的API函數),你可以在網(wǎng)上查到。一個(gè)不斷的流血(泄露內存)的程序是不能指望他長(cháng)期運行的。內存很快就耗光了。內存分配、文件打開(kāi)的成對編寫(xiě)程序(編寫(xiě)了分配,直接編寫(xiě)釋放語(yǔ)句,然后把中間需要處理的內容在這兩個(gè)語(yǔ)句之間插入)是非常難過(guò)管用的技巧。不過(guò),即便這樣,也需要非常注意借個(gè)非常容易出現內存不釋放的地方。1. 循環(huán)的continue。2. 函數中間的返回return。本來(lái)后邊有內存釋放的,但是,讓你的那兩個(gè)語(yǔ)句給擋住了。呵呵。我也放過(guò)很多這樣的錯誤。這種錯誤是一旦不注意就會(huì )犯的。特別是你的一個(gè)函數寫(xiě)的比較長(cháng)的時(shí)候、一屏顯示不開(kāi)的時(shí)候(將函數小型化是非常重要的,但需要有一個(gè)度,過(guò)而不及?。?。

 

越界訪(fǎng)問(wèn)一般出現在數組、下標的溢出這樣的地方。前兩天寫(xiě)下載程序的時(shí)候就犯了一個(gè)致命的錯誤,讓我調了一下午才找到錯誤的原因。我在定義Url字符串的時(shí)候,認為他的長(cháng)度不會(huì )超過(guò)2048,超過(guò)2048的很變態(tài),也很少,不過(guò)讓我碰到了一個(gè)11K的。呵呵。一個(gè)strcpy讓我的棧信息都被沖的無(wú)影無(wú)蹤了。這才是最麻煩的,如果是一般的數組溢出,gdb可以直接定位到哪一行。而這樣的錯誤,你是很難找到的錯誤點(diǎn)的。廢了半天力氣我才把錯誤定位到這一行上。當你發(fā)現程序錯誤錯的很奇怪的時(shí)候,你會(huì )嘀咕,不應該有這樣的錯誤的發(fā)生,不可能??!你不妨考慮一下是否內存被沖了,變量的內容變了或者是運行到不該運行的地方(前者居多),然后程序出錯了。那樣的話(huà),gdb或者VC給出定位是不對的。他應該是發(fā)生在其他的地方,而且嚴重的是這樣的錯誤很難找。所以,在內存拷貝這樣的操作的時(shí)候,不要想當然認為如何就如何。比如,strcpy,還是用strncpy吧。其他的錯誤總是好找,內存錯誤會(huì )讓你中頭彩。

Gdb給出的錯誤文件是core.*****,如果讓VC給出調試文件,需要做點(diǎn)設置。你可以看看我以前轉載的那篇VC下發(fā)布的Release版程序的異常捕捉。

 

硬件部分。機器不停的提供服務(wù),但是,不能指望他們可以忙一輩子。他們是有壽命的。比如說(shuō),損耗的最快的東西是什么?硬盤(pán)。搜索引擎一般采用1.4萬(wàn)轉的硬盤(pán)。不停的讀寫(xiě)對他們的壽命造成了很大的損害。呵呵。一般搜索引擎公司買(mǎi)硬盤(pán)都是上百塊的買(mǎi)。當然,硬件7*24小時(shí)的服務(wù)需要軟件的支持。比如說(shuō),搜索程序在寫(xiě)的時(shí)候就需要考慮到硬件當機的情況。當這臺服務(wù)機器不能正常工作,監控程序需要及時(shí)報告維護人員,讓他們及時(shí)維修;還有重要的一點(diǎn)是,或者是常用的做法是,一份數據,兩個(gè)到三個(gè)相同的鏡像。平時(shí)是幾個(gè)鏡像同時(shí)提供服務(wù),緊急時(shí)刻,如果一個(gè)鏡像不能聯(lián)系,那么把流量導入另外的鏡像。一般兩臺機器同時(shí)出現錯誤的概率是很低的。出現錯誤也要快修,別忘了我們的木桶理論。

 

    有一個(gè)特殊的東西,叫做GFS。就是google的分布式文件系統。為什么把它單獨的提出來(lái),因為他這兩年實(shí)在是太火了。搜索引擎需要的數據實(shí)在是太大了,需要大量的硬盤(pán)來(lái)存儲;他對數據處理的要求又很高,需要分布式的并行的處理。Google利用一批刀鋒式PC,成功用低成本解決了這個(gè)問(wèn)題。所說(shuō)的低成本是每存儲1G數據需要的花費的資金,以及能處理如此規模的用戶(hù)請求的基礎上每處理一個(gè)用戶(hù)請求花費的資金。呵呵。說(shuō)的有點(diǎn)繞口。從外邊看來(lái),就是人家把一堆普通PC機,一堆硬盤(pán)變成了一個(gè)巨大的機器。而且各個(gè)節點(diǎn)非常非常的便宜。比廉價(jià)磁盤(pán)陣列都便宜,也好用(當然是軟件的支持)。單說(shuō)一點(diǎn),這個(gè)機器的內存和硬盤(pán)是?差不多是各個(gè)節點(diǎn)的內存以及相應硬盤(pán)的和。誘人吧。不過(guò),沒(méi)有錢(qián)往里邊砸,還是不要做這樣的系統。他的論文是公開(kāi)的,看了之后誰(shuí)都有點(diǎn)。。。那個(gè)蠢蠢欲動(dòng)。。。呵呵。。。因為,看起來(lái),不是很難嘛! 不過(guò),你是否發(fā)現,論文上所說(shuō)的東西都是原理,一個(gè)錯誤報告都沒(méi)有。文件系統是一個(gè)底層的服務(wù),沒(méi)有千錘百煉誰(shuí)敢把自己的系統放到一個(gè)不穩定的文件系統上運行?與原理相比,我更感興趣的是,按照這種思路進(jìn)行軟件編寫(xiě),他們在運行的過(guò)程中碰到的意外問(wèn)題是什么?怎么解決的。而且,誰(shuí)又有這么多的財力向redhat公司定制自己的單機文件系統。呵呵。這樣想來(lái),這樣的一個(gè)程序需要多長(cháng)的時(shí)間去完善?一般的真是耗不起。不過(guò),現在有個(gè)開(kāi)源的東西,Nutch。有時(shí)間需要好好看看。

 

2.       多個(gè)機器之間的合作

多個(gè)機器一塊去處理這么一大堆數據,相應服務(wù)請求,總得有個(gè)指揮,以便可以做到此起彼落,默契配合。這就是控制和監控做的。說(shuō)起來(lái)也是平平無(wú)奇,每一個(gè)工作的機器都是服務(wù)器端,然后總控程序是一個(gè)客戶(hù)端,他告訴服務(wù)器端什么時(shí)間,應該做什么。這個(gè)時(shí)候,一組機器都是統一去做的,你就得將就那個(gè)最“無(wú)能的”。呵呵。典型的木桶理論的詮釋。

 

不過(guò)控制需要注意的是,一組機器作為一個(gè)控制單元,如果他們沒(méi)有都做完你指定動(dòng)作,你就不能要求他們做下一步動(dòng)作。他們是一個(gè)完整的整體,就把他們看作一臺機器好了,一榮不能俱榮,但是一廢俱廢。

 

監控端,關(guān)于他的有個(gè)名詞叫做心跳。你在看其他的資料的時(shí)候會(huì )看到這個(gè)。每一個(gè)間隔都向服務(wù)器端報告自己的狀態(tài)(通過(guò)socket)。一般是間隔一秒。呵呵。其他的也沒(méi)有什么可以說(shuō)的,本來(lái)是一個(gè)簡(jiǎn)單的東西。

 

3.       cache

很多地方都用到了cache技術(shù)。依據數據訪(fǎng)問(wèn)的時(shí)間局部性和內容局部性原理,cache的出現極大的提高了數據訪(fǎng)問(wèn)的效率。特別是互聯(lián)網(wǎng)上的搜索。扎堆的現象更為嚴重。這就是為什么會(huì )有搜索排行榜的原因了。前兩天弄得沸沸揚揚的白領(lǐng)裸照事件。。。很多人搜的都是相同的關(guān)鍵詞。在搜索引擎里邊,cache作為獨立的一部分出現,它能擋住75%以上的訪(fǎng)問(wèn)?也就是說(shuō),能進(jìn)入到后臺需要檢索的訪(fǎng)問(wèn)占很小的一部分。大部分都在cache里邊命中了。

Cache的應用當然不止這一點(diǎn)。在所有你認為有數據需要緩沖訪(fǎng)問(wèn)的地方都可以用。用點(diǎn)內存換來(lái)訪(fǎng)問(wèn)的高效率有的時(shí)候還是很值得的。不過(guò)需要注意cache里邊的數據的及時(shí)更新的問(wèn)題,不能訪(fǎng)問(wèn)過(guò)時(shí)的數據。也就是數據何時(shí)更新的問(wèn)題。

 

排序,歸并,排重。在這里,計算機恢復到了本來(lái)的面目,排序。你還記得數據結構和算法里邊關(guān)于排序的介紹嗎?我曾經(jīng)問(wèn)過(guò)一個(gè)面試的兄弟。他已經(jīng)什么都記不起來(lái)了。只記住一個(gè)冒泡和快排。我以前聽(tīng)過(guò)小喬(中搜架構師)講解數據結構和算法,讓我大開(kāi)眼界,終于知道什么時(shí)候,為什么用這些玩意了。前兩天公司面試的時(shí)候,一個(gè)兄弟做排序,寫(xiě)了一個(gè)冒泡。我問(wèn)他,能不能快點(diǎn),他說(shuō)快排。我說(shuō)還能不能在快點(diǎn),他說(shuō)沒(méi)有了。呵呵,把常數時(shí)間的排序都扔了(不過(guò),也可能真的沒(méi)有學(xué))。下邊這個(gè)程序是前段時(shí)間我在看基數排序的時(shí)候寫(xiě)的。工作的變更,一直都沒(méi)有把它派上用場(chǎng)(以后說(shuō)不定)?,F在,這不會(huì )涉及到任何公司的機密,可以給大家看。他用了兩倍于快排的內存,但是,我的測試是,可以有將近一倍的排序速度。

 

平衡二叉樹(shù)和快排有什么區別嗎?從cpu的利用率上說(shuō)。前者對cpu的使用基本上是平的;后者,在一個(gè)段時(shí)間把cpu用到100%,如果同一臺機器上還有別人的程序在跑,那么他們都得等你,也就是你的資源利用不合理,造成了這段時(shí)間,cpu是程序的瓶頸;從動(dòng)靜方面來(lái)說(shuō),一個(gè)是動(dòng)態(tài)的,可以邊建,邊檢索,另外一個(gè)是靜態(tài)的;從內存利用上說(shuō),前者耗費的遠大于后者,大約一倍多點(diǎn)。

template<class tType>

long BucketSort(tType  * buf,long len,tType * tempbuf)
{    
    tType 
* src=
tempbuf;
    tType 
* temp=
buf;
    
    
long lTemp=0
;
    
long entry_point=0
;
    
    
long count[256]={0}
;
    
    
long
 i;
    
long
 k;
    
    tType 
*
 p;
    
    
for (i=0;i<sizeof(tType);i++
)
    
{
        
for(k=0;k<len;k++
)
        
{
            
++count[(temp[k]>>(8*i))&0xFF
];
        }

    
        entry_point 
=0;
    
        
for(k=0;k<256;k++
)
        
{
            lTemp
=
count[k];
            count[k]
=entry_point; //把相應數據個(gè)數變成了相應數據在數組中的位置

            entry_point+=lTemp; //顯然是要把BASE ENTRY_POINT推后的~
        }

    
    
        
for(k=0;k<len;k++)
        
{
            src[count[(temp[k]
>>(8*i))&0xFF]++]=
temp[k];
        }

    
        memset(count,
0,1024);
        
        p
=
temp;
        temp
=
src;
        src
=
p;
    }

    
    
return 0;
}


template
<class tType>
CheckIt(tType 
* buf,long lNum)
{
    
long
 i;
    
for(i=0;i<lNum-1;i++
)
    
{
        
if(buf[i]>=buf[i+1
])
            i
=i;//用來(lái)設置斷點(diǎn),調試用。

    }


    
return 0;
}


template
<class tType>
long ReadIt(tType * buf)
{
    unsigned __int64 
* bufbak=
buf;
    
long lNum=0
;
    
    FILE 
* fpR=fopen("ValidDocID.dat","rb"
);
    
while(fread(bufbak,8,1
,fpR))
    
{
        bufbak
++
;
        lNum
++
;
    }

    fclose(fpR);
    
    
return lNum;
}



int main()
{
    UINT64 
* buf=new UINT64[15<<20
];
    UINT64 
* tempbuf=new UINT64[15<<20
];
    
    
long lNum=
ReadIt(buf);    
    
    
long begin=
GetTickCount();
    BucketSort(buf,lNum
-1
,tempbuf);
    
long end=
GetTickCount();
    printf(
"%d ",end-
begin);
    CheckIt(buf,lNum);
    
    
    U_Arithmetic
<UINT64>
cSort;
    lNum
=
ReadIt(buf);
    begin
=
GetTickCount();
    cSort.QuickSort_U_S(
0,lNum-1,buf);//快排,你可以找一個(gè)現成的替代

    end=GetTickCount();
    printf(
"%d ",end-
begin);
    
     //這里需要做內存釋放
    
return 0
;
}

 

 

哈希表,基本上算是最快的查找辦法。每一個(gè)單元下邊掛指針,解決沖突。而且,還有很多變體,你可以用內存中的一位表示一個(gè)桶。呵呵。這是一個(gè)非常好的利用內存的辦法。數據量的增大,讓我們每省一個(gè)字節都是非常有意義。我們稱(chēng)他為內存位圖。其實(shí),數組就是一個(gè)用下標做的不會(huì )有沖突的哈希。

 

沒(méi)有一個(gè)方法可以包打天下,但是,你要知道他們在什么樣的環(huán)境下使用才是更合適的,什么樣的環(huán)境下是無(wú)所謂的。讓我現在默寫(xiě)一個(gè)快排,我會(huì )出錯,也得調試一段時(shí)間??偸遣荒芡耆挠涀∶恳粋€(gè)語(yǔ)句。呵呵。不過(guò),我認為這不重要。這樣的函數庫我都已經(jīng)寫(xiě)好了,或者是有現成的了,我只需要記住何時(shí)選用他們就好了。直接調用不就得了。單純的記住,沒(méi)有作用。但是,你要知道他的思想。

 

Strlen. Strlen函數是用的很多的函數,你可測試過(guò)他的時(shí)間耗費?每調用一次,程序都需要遍歷一次你的字符串,直到碰到0為止。字符串短,次數少的時(shí)候還看不出來(lái),相反的情況下盡量少用,為什么不能一次調用,保存結果,到處使用那?

 

你可以注意一下你的那些函數。關(guān)注的不只是功能,而是他們耗費的時(shí)間本身(很多時(shí)候我們對時(shí)間的要求大于對內存的要求)。能不能讓你的程序更快點(diǎn)(當然是在程序穩定運行的基礎上),而這種快僅限于對算法的選擇,不包括語(yǔ)言的換用。你能把所有的C程序都改成匯編?沒(méi)有必要。投入產(chǎn)出比太低了。不過(guò)這種追求也要看環(huán)境和用途。不可太過(guò)。過(guò)猶不及!什么東西都是這樣,選擇最合適,達到要求就好。過(guò)猶不及。還有很多需要做的東西,不是僅僅這一個(gè)玩意。

 

如果你說(shuō)自己精通c,c++,那么如果你不知道,不了解STL,那是不可想象的。以前我也曾犯過(guò)這樣的錯誤,認為靠我們自己寫(xiě)的那些類(lèi),就不用看STL了。其實(shí)不然。如果你跳槽來(lái)到另外一家公司,原來(lái)的代碼統統原封不動(dòng)的搬過(guò)來(lái)?如果,這家公司沒(méi)有太多的技術(shù)積累,能夠直接利用的、效率比較高的就是STL了。當然,沒(méi)有你為特定的應用編寫(xiě)的效率高;另外,STL之所以能夠受到大家的交口稱(chēng)贊,他的設計思路還的確是有一套的。理解了會(huì )非常的有意義!

 

好了,羅里羅嗦講了很多,其實(shí)也還沒(méi)有做到點(diǎn)到為止。上面涉及到的每一個(gè)部分,仔細寫(xiě)寫(xiě)估計都可以寫(xiě)一本書(shū),至少也是一章。只是希望給對這個(gè)行業(yè)、開(kāi)發(fā)不熟悉的人介紹一下相應的東西。沒(méi)有任何的東西是可以速成的,經(jīng)驗只會(huì )來(lái)自于對實(shí)際開(kāi)發(fā)的例子的體會(huì ),介紹的內容只會(huì )讓你有一個(gè)印象。你如果確實(shí)想進(jìn)入這個(gè)行業(yè)的話(huà),把涉及到的各個(gè)部分起碼應該大體看看吧。只有大公司才有耐心慢慢的培養你,等你起來(lái),很多小點(diǎn)的公司都是需要較短時(shí)間內能夠接手工作的(我進(jìn)中搜的一個(gè)星期后,開(kāi)始負責外鏈處理程序,是同時(shí)進(jìn)入公司的人中接手最快的,我一直都是很驕傲這個(gè)事情,雖然在進(jìn)中搜之前沒(méi)有做過(guò)搜索引擎開(kāi)發(fā))。我出來(lái)找工作的時(shí)候,工作很好找,原因在于我的經(jīng)驗。公司是花錢(qián)買(mǎi)斷我們的經(jīng)驗。呵呵。不過(guò),關(guān)于基礎知識部分,沒(méi)有什么好說(shuō)的。

做的越多,你就會(huì )越來(lái)越發(fā)現其中包含的那個(gè)叫做“數學(xué)的美”。Googl的黑板報上就出了這么一系列文章叫做“數學(xué)的美”。我的大學(xué)數學(xué)學(xué)的不好,基本沒(méi)有聽(tīng)課,有時(shí)間得補補。呵呵。其他的各個(gè)搜索引擎多半都會(huì )做一個(gè)他自己的博客,發(fā)布一下自己的消息,散布一些自己的論文和研究成果,有時(shí)間得看看。 

 

每次寫(xiě)關(guān)于一點(diǎn)關(guān)于搜索引擎的東西的時(shí)候,都會(huì )提起中搜(愛(ài)之深,恨之切,雖然我已經(jīng)離開(kāi)),人總是需要感恩的。能從在中搜鍛煉兩年,與很多技術(shù)人員相比,我是非常幸運的。在這里,我發(fā)現了和以前做應用絕對不同的技術(shù)世界,我在這里見(jiàn)識了大規模數據的處理,學(xué)會(huì )了計算自己的硬、軟、人資源的需求,學(xué)會(huì )了處理多個(gè)人之間的接口,和很多人通力合作:你需要相信你的隊友,相信他們能和你一樣的努力,相信他們可以和你做的同樣的好,如果你干的不錯,你需要努力的多做一點(diǎn),就如同籃球隊里邊的協(xié)防,是的,你的隊友有時(shí)需要你的協(xié)防,我們都多為他人、多為項目想一點(diǎn),接口問(wèn)題、配合問(wèn)題將不成為問(wèn)題。一個(gè)項目的完成、勝利才是我們想要的。。。。。。。。。我們同時(shí)又是不幸的,我們努力過(guò),非常非常的努力過(guò),卻沒(méi)有看到中搜如百度般的成功。向現在仍能堅守在中搜的人致敬!

 

關(guān)于涉及到的內容,如果以后時(shí)間允許,我會(huì )各個(gè)多總結一點(diǎn)。 不過(guò),寫(xiě)的越具體詳細,離不能說(shuō)的東西也就越近(不過(guò),隨著(zhù)這個(gè)行業(yè)規模的擴大,不能說(shuō)的越來(lái)越少,呵呵,這是我們大家都希望看到的)。我上邊所提到的大多是我的思想和思考,總結,這樣省下很多的麻煩!好在很多的基礎知識都是相同的,從那些方面入手,不會(huì )給人造成誤解。

 

但愿看的人能有收獲!不枉我寫(xiě)了這么多!

 

 

 



本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
百度:Google是最強的搜索引擎
. 怎么讓百度和Google搜到你的博客_
幾大搜索引擎各其特點(diǎn)
文獻搜索方法概述
讓百度搜索引擎自動(dòng)收錄你的網(wǎng)頁(yè)
站長(cháng)必備SEO工具
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久