亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 2153 0

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

在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、搜索引擎架構圖

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

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+MySQL全文檢索架構與安裝

③、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)、按服務類型進行分離

為了保證數據的一致性,我在配置Sphinx讀取索引源的MySQL數據庫時,進行了鎖表。Sphinx讀取索引源的過程會耗費一定時間,由于MyISAM存儲引擎的讀鎖和寫鎖是互斥的,為了避免寫操作被長時間阻塞,導致數據庫同步落后跟不上,我將提供“搜索查詢服務”的和提供“索引源服務”的MySQL數據庫進行了分開。監聽3306端口的MySQL提供“搜索查詢服務”,監聽3406端口的MySQL提供“索引源服務”。

(4)、“主索引+增量索引”更新方式

一般網站的特征:信息發布較為頻繁;剛發布完的信息被編輯、修改的可能性大;兩天以前的老帖變動性較小。

基于這個特征,我設計了Sphinx主索引和增量索引。對于前天17:00之前的記錄建立主索引,每天凌晨自動重建一次主索引;對于前天17:00之后到當前最新的記錄,間隔3分鐘自動重建一次增量索引。

(5)、“Ext3文件系統+tmpfs內存文件系統”相結合

為了避免每3分鐘重建增量索引導致磁盤IO較重,從而引起系統負載上升,我將主索引文件創建在磁盤,增量索引文件創建在tmpfs內存文件系統“/dev/shm/”內。“/dev/shm/”內的文件全部駐留在內存中,讀寫速度非常快。但是,重啟服務器會導致“/dev/shm/”內的文件丟失,針對這個問題,我會在服務器開機時自動創建“/dev/shm/”內目錄結構和Sphinx增量索引。

(6)、中文分詞詞庫

我根據“百度早期中文分詞庫”+“搜狗拼音輸入法細胞詞庫”+“LibMMSeg高頻字庫”+... 綜合整理成一份中文分詞詞庫,出于某些考慮暫不提供。你可以使用LibMMSeg自帶的中文分詞詞庫。

?

二、MySQL+Sphinx+SphinxSE安裝步驟

1、安裝python支持 (以下針對CentOS系統,其他Linux系統請使用相應的方法安裝)

yum install -y python python-devel

2、編譯安裝LibMMSeg (LibMMSeg是為Sphinx全文搜索引擎設計的中文分詞軟件包,其在GPL協議下發行的中文分詞法,采用Chih-Hao Tsai的MMSEG算法。LibMMSeg在本文中用來生成中文分詞詞庫。)

以下壓縮包“sphinx-0.9.8-rc2-chinese.zip”中包含mmseg-0.7.3.tar.gz、sphinx-0.9.8-rc2.tar.gz以及中文分詞補丁。

點擊這里下載文件

unzip sphinx-0.9.8-rc2-chinese.zip
tar zxvf mmseg-0.7.3.tar.gz
cd mmseg-0.7.3/
./configure
make
make install
cd ../

3、編譯安裝MySQL 5.1.26-rc、Sphinx、SphinxSE存儲引擎

?

wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.26-rc.tar.gz/from/http://mirror.x10.com/mirror/mysql/
tar zxvf mysql-5.1.26-rc.tar.gz

tar zxvf sphinx-0.9.8-rc2.tar.gz
cd sphinx-0.9.8-rc2/
patch -p1 < ../sphinx-0.98rc2.zhcn-support.patch
patch -p1 < ../fix-crash-in-excerpts.patch
cp -rf mysqlse ../mysql-5.1.26-rc/storage/sphinx
cd ../

cd mysql-5.1.26-rc/
sh BUILD/autorun.sh
./configure --with-plugins=sphinx --prefix=/usr/local/mysql-search/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
make && make install
cd ../

cd sphinx-0.9.8-rc2/
CPPFLAGS=-I/usr/include/python2.4
LDFLAGS=-lpython2.4
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql-search
make
make install
cd ../

mv /usr/local/sphinx/etc/sphinx.conf /usr/local/sphinx/
etc/sphinx.conf.old

第二章第3節之后的正文內容不予公布,全文的目錄如下(共24頁):

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

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

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

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人性生活免费视频 | 久热精品免费视频 | 91色综合综合热五月激情 | 婷婷欧美 | 五月婷婷激情六月 | 国产一区二区三区毛片 | 五月婷婷激情网 | 欧美精品在线一区二区三区 | 精品久久久久久久高清 | 四虎影视1515hh四虎免费 | 玖玖国产在线观看 | 国产在线视频www色 国产在线视频凹凸分类 | 高清亚洲 | 亚洲四虎永久在线播放 | 久久精品 | 性综合网 | 久久国产网| 亚洲综合图片小说区热久久 | 国产又黄又a又潮娇喘视频 国产又色又爽又黄又刺激18 | 国产精品视频偷伦精品视频 | 日本老妇成熟 | 欧美性精品hd在线观看 | 亚洲欧美日韩国产精品网 | 亚洲欧美日韩国产精品第不页 | 一区二区三区在线视频观看 | 综合网视频 | 国产亚洲福利精品一区二区 | aaa一级毛片 | 久久啊 | 青青操在线观看 | 午夜欧美视频 | 亚洲成人福利 | 国内外成人免费视频 | 亚洲曰本大成网站mmm | 国产在线观看自拍 | 午夜在线影院 | 中国欧美一级毛片免费 | 日本aⅴ在线 | 国产一区二区三区影院 | 亚洲精品免费视频 | 欧美日韩不卡视频 |