首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Sphinx + MySQL 全文檢索架構與安裝實戰(一):架構設計與核心優勢

     編輯:MySQL 資料庫相關知識

前言

本文闡述一套經過生產環境驗證的千萬級資料全文檢索架構,僅節錄前幾章核心內容。

效能實測數據

  • 環境:DELL PowerEdge 6850(四顆 64 位 Xeon MP 7110N / 8GB RAM)、RedHat AS4、MySQL 5.1.26、MyISAM、key_buffer=1024M
  • 單表 1000 萬筆(10 多欄位,含 int、datetime、varchar、text,僅主鍵無其他索引)
  • 主鍵查詢 SELECT ... WHERE id = ... 耗時 0.01 秒

Sphinx 核心優勢

  • 單一索引最大支援 1 億筆 記錄
  • 1000 萬筆查詢速度 0.x 秒(毫秒級)
  • 建立索引速度:100 萬筆約 3-4 分鐘,1000 萬筆約 50 分鐘,增量索引(10 萬筆)重建僅需幾十秒
  • 支援分散式檢索、短語/統計排序、多種搜尋模式、任意文件欄位、MySQL 儲存引擎整合

架構設計思路

1. 呼叫方式極簡化

前端工程師只需一條 SQL 即可高效搜尋:

SELECT ... FROM myisam_table
JOIN sphinx_table ON (sphinx_table.sphinx_id = myisam_table.id)
WHERE query = '...';

2. 索引建立快、查詢快

Sphinx 由俄羅斯 Andrew Aksyonoff 開發,GPL/商業雙授權。特色:

  • 索引建立速度達 10MB/秒(Lucene 為 1.8MB/秒)
  • 2-4GB 文本搜尋平均 0.1 秒內回傳結果
  • 最高實測 100GB 文本索引,單一索引 1 億筆
  • 支援分散式檢索、複合排序、多搜尋模式、MySQL 儲存引擎整合

搭配 MyISAM 主鍵查詢每秒 10,000+ 次的特性,將 WHERE 條件交給 Sphinx 處理,MyISAM 僅做主鍵查詢,發揮雙方優勢。

3. 服務類型分離

為避免 MyISAM 讀寫鎖互斥導致寫入阻塞,將:

  • 監聽 3306 連接埠的 MySQL 提供「搜尋查詢服務」
  • 監聽 3406 連接埠的 MySQL 提供「索引來源服務」

4. 「主索引 + 增量索引」更新策略

  • 前天 17:00 前的資料建立主索引,每天凌晨自動重建
  • 前天 17:00 後至最新資料建立增量索引,每 3 分鐘自動重建

5. 「Ext3 + tmpfs」儲存優化

  • 主索引放磁碟(Ext3)
  • 增量索引放記憶體檔案系統 /dev/shm/,讀寫極快
  • 開機腳本自動重建 /dev/shm/ 目錄結構與增量索引

6. 中文分詞詞庫

整合百度早期詞庫、搜狗細胞詞庫、LibMMSeg 高頻字庫等,暫不對外公開,可使用 LibMMSeg 內建詞庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved