前言:
本文闡述的是一款經過生產環境檢驗的千萬級資料全文檢索索引(搜尋引擎)架構。本文只列出前幾章的內容節選,不提供全文內容。
在DELL PowerEdge 6850伺服器(四顆64 位元Inter Xeon MP 7110N處理器 / 8GB記憶體)、RedHat AS4 Linux作業系統、MySQL 5.1.26、MyISAM儲存引擎、key_buffer=1024M環境下實測,單表1000萬條記錄的資料量(這張MySQL表擁有int、datetime、varchar、text等類型的10多個欄位,只有主鍵,無其它索引),用主鍵(PRIMARY KEY)作為WHERE條件進行SQL查詢,速度非常之快,只耗費0.01秒。
出自俄羅斯的開源全文檢索搜尋引擎軟體 Sphinx ,單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度為0.x秒(毫秒級)。Sphinx建立索引的速度為:建立100萬條記錄的索引只需3~4分鐘,建立1000萬條記錄的索引可以在50分鐘內完成,而只包含最新10萬條記錄的增量索引,重建一次只需幾十秒。
基於以上幾點,我設計出了這套搜尋引擎架構。在生產環境運行了一周,效果非常不錯。有時間我會專為配合Sphinx搜尋引擎,開發一個邏輯簡單、速度快、佔用記憶體低、非表鎖的MySQL儲存引擎外掛程式,用來代替MyISAM引擎,以解決MyISAM儲存引擎在頻繁更新操作時的鎖表延遲問題。另外,分布式搜尋技術上已無任何問題。
一、搜尋引擎架構設計:
1、搜尋引擎架構圖:
2、搜尋引擎架構設計思路:
(1)、調用方式最簡化:
盡量方便前端Web工程師,只需要一條簡單的SQL語句“SELECT ... FROM myisam_table JOIN sphinx_table ON (sphinx_table.sphinx_id=myisam_table.id) WHERE query='...';”即可實現高效搜尋。
(2)、建立索引、查詢速度快:
①、Sphinx Search 是由俄羅斯人Andrew Aksyonoff 開發的高效能全文檢索搜尋軟體包,在GPL與商業協議雙許可協議下發行。
Sphinx的特徵:
Sphinx支援高速建立索引(可達10MB/秒,而Lucene建立索引的速度是1.8MB/秒)
高效能搜尋(在2-4 GB的文本上搜尋,平均0.1秒內獲得結果)
高擴充性(實測最高可對100GB的文本建立索引,單一索引可包含1億條記錄)
支援分布式檢索
支援基於短語和基於統計的複合結果排序機制
支援任意數量的檔案欄位(數值屬性或全文檢索索引屬性)
支援不同的搜尋模式(“完全符合”,“短語匹配”和“任一匹配”)
支援作為Mysql的儲存引擎