sphinx mysql存儲引擎_基于Sphinx+MySQL的千萬級數據全文檢索(搜索引擎)架構設計...

Sphinx,單一索引最大可包含1億條記錄,在1千萬條記錄情況下的查詢速度為0.x秒(毫秒級)。Sphinx創建索引的速度為:創建100萬條記錄的索引只需3~4分鐘,創建1000萬條記錄的索引可以在50分鐘內完成,而只包含最新10萬條記錄的增量索引,重建一次只需幾十秒。

基于以上幾點,我設計出了這套搜索引擎架構。在生產環境運行了一周,效果非常不錯。有時間我會專為配合Sphinx搜索引擎,開發一個邏輯簡單、速度快、占用內存低、非表鎖的MySQL存儲引擎插件,用來代替MyISAM引擎,以解決MyISAM存儲引擎在頻繁更新操作時的鎖表延遲問題。另外,分布式搜索技術上已無任何問題。

一、搜索引擎架構設計:

1、搜索引擎架構圖:

  sphinx.png

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查詢每秒只能處理幾十次到幾百次:

  mysqlselect.png

③、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以及中文分詞補丁。

download.gif下載文件 (已下載 7 次)

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頁):

  doc1.gif

  doc2.gif

  doc3.gif

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395920.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395920.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395920.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《第一桶金怎么賺——淘寶開店創業致富一冊通》一一1.1 創業者需具備的素質...

本節書摘來自異步社區出版社《第一桶金怎么賺——淘寶開店創業致富一冊通》一書中的第1章&#xff0c;第1.1節&#xff0c;作者&#xff1a;葛存山&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.1 創業者需具備的素質 第一桶金怎么賺——淘寶開店創業致…

4-1 線程安全性-原子性-atomic-1

轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/10026627.html

構建了我的第一個React Native應用程序之后,我現在確信這是未來。

by Taylor Milliman泰勒米利曼(Taylor Milliman) 構建了我的第一個React Native應用程序之后&#xff0c;我現在確信這是未來。 (After building my first React Native app, I’m now convinced it’s the future.) After a few weeks of playing around with React Native, …

delphi7 提示注冊過期問題

很同情你得經過~ 因為我以前也是經常遇見這個問題~就和你說得一樣~ 后來~ 我發現 下載使用的Delphi 7只能使用一個注冊碼&#xff0c;那就是:6AMD-PKG68E-DB8PP7-9SFE 3QH-9QW所以,你先把C:\Documents and Settings\Administrator\.borland文件夾下的兩個文件刪除然后用 Progra…

計算機開機引導的結果是,電腦開機顯示引導媒體是怎么回事

電腦開機顯示引導媒體是怎么回事分類&#xff1a;數據恢復常見問題|最后更新&#xff1a;2020年4月9日開機顯示重新啟動并選擇適當的引導設備或插入1.如果主機上接有可移動存儲介質(如光盤、移動硬盤、U盤等),將其拔掉,然后重啟。2.如果仍然這樣,進入主板設置中,依次檢測以下幾…

《操作系統真象還原》——0.23 操作系統是如何識別文件系統的

本節書摘來自異步社區《操作系統真象還原》一書中的第0章&#xff0c;第0.23節&#xff0c;作者&#xff1a;鄭鋼著&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 0.23 操作系統是如何識別文件系統的 我們知道&#xff0c;一個硬盤上可以有很多分區&#xf…

mysql怎樣修改my ini_mysql修改my.ini報錯怎么辦

mysql修改my.ini報錯的解決辦法&#xff1a;首先將mysql默認編碼改成utf8mb4&#xff0c;并修改【my.ini】配置&#xff1b;然后修改變量&#xff0c;并檢查是否設置成功即可。更多相關免費學習推薦&#xff1a;mysql教程(視頻)mysql修改my.ini報錯的解決辦法&#xff1a;將mys…

golang---map類型

map 類似其它語言中的哈希表或字典&#xff0c;以key-value形式存儲數據key必須是支持或!比較運算的類型&#xff0c;不可以是函數、map或sliceMap查找比線性搜索快很多&#xff0c;但比使用索引訪問數據的類型慢100倍 Map使用make()創建&#xff0c;支持:這種簡寫方式 make([k…

易語言程序應用程序錯誤退出_為什么我退出Google并構建了一個向孩子們教授個人理財的應用程序

易語言程序應用程序錯誤退出Many of my friends thought I was crazy to leave a great position at Google to help parents and kids learn about money. Maybe they’re right.我的許多朋友都認為我為在谷歌上任職以幫助父母和孩子了解金錢而感到瘋狂。 也許他們是對的。 B…

藍疊 正在檢查服務器最新,Windows update一直停留在正在檢查更新

Windows update一直停留在正在檢查更新&#xff0c;為什么啊&#xff1f;一、查看相關服務是否開始&#xff1a;請您根據以下步驟&#xff0c;確認windows update & BITS服務設置1. 按下WinR鍵輸入“services.msc”(輸入時不要打引號)&#xff0c;并按下回車。如果此時彈出…

spring-DataSource

spring支持的dataSource有好多&#xff0c; 如&#xff1a;自帶的org.springframework.jdbc.datasource.DriverManagerDataSource ibatis、c3p0、JDBC、hibernate等等&#xff1b; 首先看第一種&#xff0c;使用自帶的datasource&#xff1a; 1、項目結構 提示&#xff1a;spri…

《Nmap滲透測試指南》—第7章7.8節后臺打印機服務漏洞

本節書摘來自異步社區《Nmap滲透測試指南》一書中的第7章7.8節后臺打印機服務漏洞&#xff0c;作者 商廣明,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 7.8 后臺打印機服務漏洞表7.8所示為本章節所需Nmap命令表&#xff0c;表中加粗命令為本小節所需命令——后臺打…

VSCODE 配置遠程調試環境

以下內容為本人的著作&#xff0c;如需要轉載&#xff0c;請聲明原文鏈接 微信公眾號「englyf」https://mp.weixin.qq.com/s/f1KZOlL92ojes-r2l9rlCw 我的需求是&#xff0c;在Windows桌面環境下&#xff0c;通過 VSCODE 遠程調試在服務器(或者其它遠程主機)的工程代碼。其實就…

html動態網頁效果代碼_教你制作網頁的第一步

Internet中有許多漂亮、美觀的網頁&#xff0c;要制作出這樣的網頁&#xff0c;必須先了解什么是網頁&#xff0c;網頁的基本組成是怎樣的。網頁又稱為Web頁&#xff0c;一般都包含圖像、文字和超鏈接等元素。按表現形式的不同&#xff0c;網頁可分為靜態網頁和動態網頁。靜態網…

Spring Cloud 7:Gateway

Zuul 網關 Zuul 是 Netfilx 開源的一個 API Gateway 服務器&#xff0c;本質是一個 Web Servlet 應用。其在微服務架構體系中提供動態路由、監控、彈性、安全等邊緣服務。 使用 Zuul 作為網關&#xff0c;其主要原因有以下幾點&#xff1a; 1、Zuul、Ribbon 以及 Consul 客戶端…

nodejs開發工程師前景_Google NodeJS運行時團隊的工程師Matt Loring訪談

nodejs開發工程師前景by Sameer Khoja通過Sameer Khoja Google NodeJS運行時團隊的工程師Matt Loring訪談 (An Interview with Matt Loring, an engineer on Google’s NodeJS Runtime team) I had the pleasure of interviewing Matt Loring (Cornell class of 2015) who wor…

計算機EI期刊2020,2020年Ei Compendex收錄的中國期刊目錄( JANUARY 1, 2020 )

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓2020年Ei Compendex收錄的中國期刊目錄更新了&#xff0c;合計222本。本文根據最新 JANUARY 1, 2020 更新《2020年Ei Compendex收錄出版物期刊目錄》整理&#xff0c;需要提醒&#xff0c;目錄EI是不定時更新的&#xff0c;但根據小…

mysql聯合索引順序調整_MySQL 關于聯合索引的字段順序規則討論

聯合索引的順序&#xff0c;難道不是哪個查詢條件最多用就放在前面的嗎&#xff1f;比如商品有三個分類A&#xff0c;B&#xff0c;C&#xff0c;類似「界門綱目科屬種」那樣&#xff0c;越左類別越大。還有一個是商品來源D&#xff0c;不一定會用于查詢條件中。舉個例子&#…

python基礎-第三篇-函數編程

基本數據類型之set set是無序不允許重復的集合set創建&#xff1a;s set&#xff08;&#xff09; 創建空集合 s {11,22,33}轉換s set&#xff08;可迭代數據&#xff09;li [11,22,33,44] s set(li) print(s) #結果為{33, 11, 44, 22} 集合元素的添加與清空se {11,22,…

10個 Linux/Unix下 Bash 和 KSH shell 的作業控制實例

Linux 和 Unix 屬于多任務的操作系統&#xff0c;也就是說一個系統在同一時間段內能運行多重任務(進程)。在這個新的博客系列&#xff0c;我將會列出相關的 Linux 和 Unix 作業&#xff08;job&#xff09;控制的命令&#xff0c;你可以通過這些命令在 Bash 或 Korn 還有 POSIX…