最近一直在忙於研究網站優化,忽來興致便粗略的研究了下SE的原理,看完此文,對SEOer來說肯定收穫不小,更加了解搜尋引擎機制以及原理,才能更好的獲得排名。
搜尋引擎需要解決的技術問題總的分為蜘蛛程式+分類建立索引+詞庫+排序演算法因素+資料庫索引與最佳化+資料庫結構
一.蜘蛛。目前看來,蜘蛛可以用C或PHP來實現。百度的蜘蛛多半是C做的,C同樣可以支援多個資料庫的連接接口,並且C的運作效率比PHP高,C也更能控制底層。 C雖然這麼好,我還是想用PHP做。時間上必須更多的節約出來,不能再去學C。如果以後需要高效率要用C,再用C做。資料庫可以不變,MYSQL可以和C連線。 PHP有優點也有缺點,做蜘蛛,問題應該不大。最大的問題是有可能速度很慢。抓取網頁,有可能出現的問題是,抓取順序,抓取如果不成功或超時等問題該如何紀錄,下次又什麼時候更新抓取。搜尋引擎的資料庫最開始是新的,沒有任何網址的,需要大量加入網址。這裡可以用for迴圈語句,依照英文字母自動迴圈。當然,網站不只有英文,還有-和數字,這些只能手工輸入了。如果還是循環抓取,估計有很多都要落空。抓到的程式碼需要分析編碼類型是utf-8還是gb2312.我的搜尋引擎只想抓簡體中文。如果抓取逾時,則記錄,下次大概十天之後再抓取,如果連續超時三次,將T出資料庫。
二.索引的建立是個很棘手的問題。百度和Google可以用自己的伺服器群組建立分散式的伺服器。我可沒那麼多伺服器。所以我想換個方法。建立靜態頁面。之前我才知道,在百度和Google輸入一個比較生僻的詞,會花費0.2秒左右的時間,一般的常見詞語只需要0.1秒。並且,第二次重複輸入一個字所需的查詢時間要少得多。這個多半就是索引的影響。假如索引是放記憶體裡,讀取速度將是非常OK的。我只有一台伺服器,就算只放常見的5萬個查詢詞語的索引進去,估計也有點累。一個頁面至少有20K,5萬個頁面就是20K*50=1G。這只是5萬個字的第一頁。如果用戶要翻頁查詢呢,記憶體一定不夠。假如只放第一頁進內存,用戶翻頁查詢,速度無法解決。所以我準備全靜態。把5萬個字的查詢模擬一次,然後產生靜態頁面。所有字的第一頁放內存,後面的頁面放硬碟裡。如果能把頁面放內存,這個問題就已經解決了。
三.詞庫。漢字千千萬,常用的漢字也至少三千個。組成的詞語常用的估計有2萬。這個詞庫來怎麼添加進去?用什麼格式存放?CSV文件還是數據庫還是文本文件?之前我想過把金山詞霸的詞庫文件找到,想辦法直接複製過來,此方法目前還沒成功
四.所有的影響排序的演算法,應該是放一個表格裡。然後分固定演算法,就是網站本身的因素,還有變動演算法,就是使用者輸入的字詞或因為時間季節等不同而改變的因素。固定演算法就放一個表格裡,對每個網站算出總分。變動演算法的一部分是之前已經產生,一部分是用戶輸入之後才算出。
五.資料庫的索引目前還沒有很好的解決方法。一個表達索引肯定不能太多,多了會影響速度。
六.資料庫的結構。這個很關鍵。估計要在網站前台介面出來之前就得先把資料庫結構定下來。也要為以後的升級留下接口,例如演算法因素要增加,或是為了優化查詢語句,要變動欄位等等。初步結構是這樣的。 1-3個表格存放網站資訊。第一個欄位是自增的主鍵,第二個欄位是網站首頁位址,依序排下去是網站網域名稱註冊時間,收錄時間,上次快照時間,收錄頁數,首頁位元組數,網域分類(com/ cn/org/net/gov/edu),反向連結總數,網站分類(這個可以是1-10個,門戶站可以擴大到30個)等
文章轉自:www.jianfeiyiqi.com 轉載請以連結註明出處