99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

Sphinx 的介紹和原理探索

發(fā)布時(shí)間:2016-08-09 23:41  回復(fù):0  查看:2616   最后回復(fù):2016-08-09 23:41  

 

學(xué)習(xí)PHP,很多人都會(huì)接觸到Sphinx ,但是Sphinx 是什么呢,這里給大家總結(jié)了Sphinx 基礎(chǔ)教程。

Sphinx是什么

定義:Sphinx是一個(gè)全文檢索引擎。

特性:

· 索引和性能優(yōu)異

· 易于集成SQL和XML數(shù)據(jù)源,并可使用SphinxAPI、SphinxQL或者SphinxSE搜索接口

· 易于通過(guò)分布式搜索進(jìn)行擴(kuò)展

· 高速的索引建立(在當(dāng)代CPU上,峰值性能可達(dá)到10 ~ 15MB/秒)

· 高性能的搜索 (在1.2G文本,100萬(wàn)條文檔上進(jìn)行搜索,支持高達(dá)每秒150~250次查詢)

為什么使用Sphinx

遇到的使用場(chǎng)景

遇到一個(gè)類似這樣的需求:用戶可以通過(guò)文章標(biāo)題和文章搜索到一片文章的內(nèi)容,而文章的標(biāo)題和文章的內(nèi)容分別保存在不同的庫(kù),而且是跨機(jī)房的。

可選方案

A、直接在數(shù)據(jù)庫(kù)實(shí)現(xiàn)跨庫(kù)LIKE查詢

優(yōu)點(diǎn):簡(jiǎn)單操作 缺點(diǎn):效率較低,會(huì)造成較大的網(wǎng)絡(luò)開銷

B、結(jié)合Sphinx中文分詞搜索引擎

優(yōu)點(diǎn):效率較高,具有較高的擴(kuò)展性 缺點(diǎn):不負(fù)責(zé)數(shù)據(jù)存儲(chǔ)

使用Sphinx搜索引擎對(duì)數(shù)據(jù)做索引,數(shù)據(jù)一次性加載進(jìn)來(lái),然后做了所以之后保存在內(nèi)存。這樣用戶進(jìn)行搜索的時(shí)候就只需要在Sphinx服務(wù)器上檢索數(shù)據(jù)即可。而且,Sphinx沒有MySQL的伴隨機(jī)磁盤I/O的缺陷,性能更佳。

其他典型使用場(chǎng)景

1、快速、高效、可擴(kuò)展和核心的全文檢索

數(shù)據(jù)量大的時(shí)候,比MyISAM和InnoDB都要快。 能對(duì)多個(gè)源表的混合數(shù)據(jù)創(chuàng)建索引,不限于單個(gè)表上的字段。 能將來(lái)自多個(gè)索引的搜索結(jié)果進(jìn)行整合。 能根據(jù)屬性上的附加條件對(duì)全文搜索進(jìn)行優(yōu)化。

2、高效地使用WHERE子句和LIMIT字句

當(dāng)在多個(gè)WHERE條件做SELECT查詢時(shí),索引選擇性較差或者根本沒有索引支持的字段,性能較差。sphinx可以對(duì)關(guān)鍵字做索引。區(qū)別是,MySQL中,是內(nèi)部引擎決定使用索引還是全掃描,而sphinx是讓你自己選擇使用哪一種訪問(wèn)方法。因?yàn)閟phinx是把數(shù)據(jù)保存到RAM中,所以sphinx不會(huì)做太多的I/O操作。而mysql有一種叫半隨機(jī)I/O磁盤讀,把記錄一行一行地讀到排序緩沖區(qū)里,然后再進(jìn)行排序,最后丟棄其中的絕大多數(shù)行。所以sphinx使用了更少的內(nèi)存和磁盤I/O。

3、優(yōu)化GROUP BY查詢

在sphinx中的排序和分組都是用固定的內(nèi)存,它的效率比類似數(shù)據(jù)集全部可以放在RAM的MySQL查詢要稍微高些。

4、并行地產(chǎn)生結(jié)果集

sphinx可以讓你從相同數(shù)據(jù)中同時(shí)產(chǎn)生幾份結(jié)果,同樣是使用固定量的內(nèi)存。作為對(duì)比,傳統(tǒng)SQL方法要么運(yùn)行兩個(gè)查詢,要么對(duì)每個(gè)搜索結(jié)果集創(chuàng)建一個(gè)臨時(shí)表。而sphinx用一個(gè)multi-query機(jī)制來(lái)完成這項(xiàng)任務(wù)。不是一個(gè)接一個(gè)地發(fā)起查詢,而是把幾個(gè)查詢做成一個(gè)批處理,然后在一個(gè)請(qǐng)求里提交。

5、向上擴(kuò)展和向外擴(kuò)展

向上擴(kuò)展:增加CPU/內(nèi)核、擴(kuò)展磁盤I/O 向外擴(kuò)展:多個(gè)機(jī)器,即分布式sphinx

6、聚合分片數(shù)據(jù)

適合用在將數(shù)據(jù)分布在不同物理MySQL服務(wù)器間的情況。 例子:有一個(gè)1TB大小的表,其中有10億篇文章,通過(guò)用戶ID分片到10個(gè)MySQL服務(wù)器上,在單個(gè)用戶的查詢下當(dāng)然很快,如果需要實(shí)現(xiàn)一個(gè)歸檔分頁(yè)功能,展示某個(gè)用戶的所有朋友發(fā)表的文章。那么就要同事訪問(wèn)多臺(tái)MySQL服務(wù)器了。這樣會(huì)很慢。而sphinx只需要?jiǎng)?chuàng)建幾個(gè)實(shí)例,在每個(gè)表里映射出經(jīng)常訪問(wèn)的文章屬性,然后就可以進(jìn)行分頁(yè)查詢了,總共就三行代碼的配置。

如何使用Sphinx

Sphinx工作流程圖:

Sphinx 的介紹和原理探索 

流程圖解釋:

· Database:數(shù)據(jù)源,是Sphinx做索引的數(shù)據(jù)來(lái)源。因?yàn)镾phinx是無(wú)關(guān)存儲(chǔ)引擎、數(shù)據(jù)庫(kù)的,所以數(shù)據(jù)源可以是MySQL、PostgreSQL、XML等數(shù)據(jù)。

· Indexer:索引程序,從數(shù)據(jù)源中獲取數(shù)據(jù),并將數(shù)據(jù)生成全文索引??梢愿鶕?jù)需求,定期運(yùn)行Indexer達(dá)到定時(shí)更新索引的需求。

· Searchd:Searchd直接與客戶端程序進(jìn)行對(duì)話,并使用Indexer程序構(gòu)建好的索引來(lái)快速地處理搜索查詢。

· APP:客戶端程序。接收來(lái)自用戶輸入的搜索字符串,發(fā)送查詢給Searchd程序并顯示返回結(jié)果。

Sphinx的工作原理

Sphinx的整個(gè)工作流程就是Indexer程序到數(shù)據(jù)庫(kù)里面提取數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行分詞,然后根據(jù)生成的分詞生成單個(gè)或多個(gè)索引,并將它們傳遞給searchd程序。然后客戶端可以通過(guò)API調(diào)用進(jìn)行搜索。

介紹了Sphinx的工作原理后,那么接下來(lái)就要讓Sphinx工作起來(lái),先來(lái)看看Sphinx的配置。


原文來(lái)自:伯樂在線

 

您還未登錄,請(qǐng)先登錄

熱門帖子

最新帖子

?