程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Sphinx+MySQL全文檢索架構與安裝

Sphinx+MySQL全文檢索架構與安裝

編輯:MySQL綜合教程

前言:

本文闡述的是一款經過生產環境檢驗的千萬級數據全文檢索(搜索引擎)架構。本文只列出前幾章的內容節選,不提供全文內容。

在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的存儲引擎

②、通過國外《High Performance MySQL》專家組的測試可以看出,根據主鍵進行查詢的類似“SELECT ... FROM ... WHERE id = ...”的SQL語句(其中id為PRIMARY KEY),每秒鐘能夠處理10000次以上的查詢,而普通的SELECT查詢每秒只能處理幾十次到幾百次:

③、Sphinx不負責文本字段的存儲。假設將數據庫的id、date、title、body字段,用sphinx建立搜索索引。根據關鍵字、時間、類別、范圍等信息查詢一下sphinx,sphinx只會將查詢結果的ID號等非文本信息告訴我們。要顯示title、body等信息,還需要根據此ID號去查詢MySQL數據庫,或者從Memcachedb等其他的存儲中取得。安裝SphinxSE作為MySQL的存儲引擎,將MySQL與Sphinx結合起來,是一種便捷的方法。

創建一張Sphinx類型表,將MyISAM表的主鍵ID和Sphinx表的ID作一個JOIN聯合查詢。這樣,對於MyISAM表來所,只相當於一個WHERE id=...的主鍵查詢,WHERE後的條件都交給Sphinx去處理,可以充分發揮兩者的優勢,實現高速搜索查詢。

  • 共3頁:
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved