




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第一部分-分析與思路:實際項目的特點是:1.數(shù)據(jù)量大2.商品分類多3.每個商品可以處于多個分類下4.平均每個商品擁有2個以上的屬性要求可以做到:1.按照商品名稱搜索2.按照商品屬性篩選3.按照分類篩選4.按照價格分組篩選5.按照價格、時間排序MySQL基本數(shù)據(jù)結(jié)構(gòu):說明:prodduct是基基本產(chǎn)品表,iid為產(chǎn)品編編號,namme是待搜索索字段prooduct_indexx為產(chǎn)品屬性性表,inddex_idd是屬性編號號,prodduct_iid為prooduct表表的id。如如果編號為1100的產(chǎn)品品,有5個 不同屬性,在在produuct_inndex表中中就會記錄pproducct_i
2、d為為100,iindex_id不相同同的五條記錄錄。prodduct_sshow的結(jié)結(jié)構(gòu)與prooduct_indexx類似,記錄錄的是產(chǎn)品于于分類的聯(lián)系系,如果同一一個產(chǎn)品同屬屬5個不同的的分類,在表表中就會存在在五條記錄。數(shù)據(jù)結(jié)構(gòu)不復(fù)雜雜,但是實際際應(yīng)用中,使使用Mysqql的查詢實實現(xiàn)的搜索和和檢索,效率率是比較低的的。最消耗性性能的地方是是產(chǎn)品列表的的索引導(dǎo)航,這這是類似淘寶寶網(wǎng)產(chǎn)品列表表的”按XXXX瀏覽”: SQL的實現(xiàn)不不多說。在Sphinxx有個非常棒棒的特性:MMVA(多值值屬性),MMVA類似MMysql的的set類型型的字段,但但是存放值不不受預(yù)設(shè)的限限制,使用MMVA
3、建立SSphinxx的屬性,用用來存放每個個產(chǎn)品的inndex_iid和cattegoryy_id,很很方便就能實實現(xiàn)篩選功能能。第二部分-索引引結(jié)構(gòu)配置:Sphinnx配置文件件貼出主要部部分,其他的的手冊上說的的很清楚了(手手冊非常重要要: HYPERLINK /uploads/pdf/sphinx_doc_zhcn_0.9.pdf httpp:/uploaads/pddf/sphhinx_ddoc_zhhcn_0.9.pdff)。上面是sourrce部分,項項目的編碼是是UTF-88,所以首先先得執(zhí)行:“SSET NAAMES uutf8”。pproducct里面的pprice是是以保留
4、兩位位小數(shù)的形式式存放的,在在sql_qquery里里面,將它乘乘以100換換成整數(shù),避避免浮點精度度帶來的不必必要的小數(shù)位位。關(guān)鍵的兩兩條“sqll_attrr_multti”,配置置了屬性和分分類的MVAA,“froom queery”后面面緊接著SQQL,表示來來自查詢,pproducct_id放放第一個字段段,后面跟著著值字段,這這樣Sphiinx內(nèi)部才才會進行處理理。建立索引后,結(jié)結(jié)構(gòu)可以看成成下圖所示:第三部分-查詢詢:Sphiinx自帶的的PHP的AAPI進行查查詢。示例11:編號為11,2,3,4,5的55個分類下的的產(chǎn)品列表:$Sphinxx-SettFilteer(ccat
5、egoory_idd,arrray(11,2,3,4,5);$Sphinxx-Queery(”,*);示例2:屬性編編號為1,22,3,4,5的下的產(chǎn)產(chǎn)品列表(屬屬性的交集)$Sphinxx-SettFilteer(iindex_id,arrayy(1);$Sphinxx-SettFilteer(iindex_id,arrayy(2);$Sphinxx-SettFilteer(iindex_id,arrayy(3);$Sphinxx-SettFilteer(iindex_id,arrayy(4);$Sphinxx-SettFilteer(iindex_id,arrayy(5);$Sphinxx
6、-Queery(”,*);示例3:屬性編編號為1,22,3,4,5的下的產(chǎn)產(chǎn)品列表(屬屬性的交集)的價格分組組,并且升序序排列$Sphinxx-SettFilteer(iindex_id,arrayy(1);$Sphinxx-SettFilteer(iindex_id,arrayy(2);$Sphinxx-SettFilteer(iindex_id,arrayy(3);$Sphinxx-SettFilteer(iindex_id,arrayy(4);$Sphinxx-SettFilteer(iindex_id,arrayy(5);$Sphinxx-SettGrouppBy(pricee,SPP
7、H_GROOUPBY_ATTR,grroup aasc);$Sphinxx-Queery(”,*);示例4:屬性編編號為1,22,3,4,5的下的產(chǎn)產(chǎn)品列表(屬屬性的交集),分類編號號是7,8,9$Sphinxx-SettFilteer(ccategoory_idd,arrray(77,8,9);$Sphinxx-SettFilteer(iindex_id,arrayy(1);$Sphinxx-SettFilteer(iindex_id,arrayy(2);$Sphinxx-SettFilteer(iindex_id,arrayy(3);$Sphinxx-SettFilteer(iindex_
8、id,arrayy(4);$Sphinxx-SettFilteer(iindex_id,arrayy(5);$Sphinxx-SettGrouppBy(pricee,SPPH_GROOUPBY_ATTR,grroup aasc);$Sphinxx-Queery(”,*);Sphinx的的查詢使用還還是很方便的的,需要注意意的是,Fiilter傳傳遞的待篩選選參數(shù)必須是是數(shù)組;關(guān)于MVA的使使用,如果數(shù)數(shù)組有多個成成員:$Sphinxx-SettFilteer(ccategoory_idd,arrray(77,8,9);表示索引中的ccategoory_idd滿足數(shù)組中中的任意一個個值就會篩選選
9、出來.$Sphinxx-SettFilteer(iindex_id,arrayy(7);$Sphinxx-SettFilteer(iindex_id,arrayy(8);$Sphinxx-SettFilteer(iindex_id,arrayy(9);表示索引中的iindex_id包含77,8,9三三個值才會被被篩選出.MVA也可以用用來進行Grroup操作作:$Sphhinx-SetGrroupByy( inndex_vvalue_id, SPH_GGROUPBBY_ATTTR );可以很方便的得得出當前條件件下的,各種種屬性(樣式式,品牌)的數(shù)量.第四部分-即時時更新方案:使用了Spphi
10、nx代代替了Myssql進行查查詢后,最大大的問題還在在于數(shù)據(jù)的更更新問題:我我們在后臺進進行了產(chǎn)品的的編輯,刪除除,添加操作作,都需要盡盡快的反應(yīng)到到用戶端.架架構(gòu)圖:說明:(1).在Mysqql中建立一一個增量表,凡是產(chǎn)品更更新操作(添添加,修改,刪除),都都會將相關(guān)IID更新到到到增量表;表表結(jié)構(gòu)很簡單單,只記錄IID.(2).修改SSphinxx的配置文件件sql_queery=SELECCT id,namee,priice*1000ASpricee,0AASin_updatte FROOM shoop_prooductsql_atttr_uinnt=iin_upddate增加了一個字
11、段段in_uppdate,用來標記主主索引的這條條記錄,是否否在增量表中中.(3).產(chǎn)品的的更新操作時時,除了更新新增量表,同同時也利用SSphinxx API的的UpdatteAttrributees方法,將將主索引中的的相關(guān)記錄的的in_uppdate屬屬性設(shè)置成”11$this-Sphinnx-UppdateAAttribbutes($inddex,aarray(in_updatte),arraay($iid=1);代碼中的$idd指的是商品品編號.更新完了屬性后后,發(fā)出增量量索引更新通通知,可以是是寫隊列,寫寫文件等方式式.(4).在查詢詢時,增加過過濾器.$Sphinxx-SettF
12、ilteer(iin_upddate,arraay(0);這樣,就不會使使用到主索引引中的處于增增量索引中的的doc,以以免搜索到錯錯誤的編輯前前的數(shù)據(jù).(5).守護進進程接到增量量索引更新通通知,重建增增量索引.(6).每天某某時段更新主主索引,清空空增量表,清清空增量索引引思路就是這樣,下面的增量量索引更新腳腳本是我用在在測試環(huán)境的的,生產(chǎn)環(huán)境境的比較復(fù)雜雜,供參考.#!/bin/bashCHECK_FFILE_PPATH=/xxx/sphinnx-cheeck.txxtSPHINX_COMMAAND=”/opt/ssphinxx/bin/indexxer cconfigg /optt/s
13、phiinx/ettc/prooduct.conf produuct_uppdate_indexx rottate”whilettruedoNOW_TIIME=ddate+%Y-%m-%d %H:%MM:%Sif-f$CHHECK_FFILE_PPATH;thenn WORD_NUM=cat $CHECCK_FILLE_PATTH|wwc-wif$WORDD_NUM-gt00;thhen echoo”bullid $NOOW_TIMME” $SPHHINX_CCOMMANND $CCHECK_FILE_PATHelse echoo”skiip $NOWW_TIMEE” fielseecho”nofiile $NOOW_TIMME”fisleep30done后臺操作時,簡簡單的用寫文文件的方式通通知索引更新新腳本,索引引更新完成后后,將文件重重置.第五部分-優(yōu)化化總結(jié):這幾幾篇blogg,沒想過寫寫成手把手的的教程,只是是想把思路寫寫出來,和大大家交流,所所以流水賬了了代碼都是是些關(guān)鍵片段段,不負責它它正常運行!基礎(chǔ)方面的的請到Sphhinx官方方站查看文檔檔,非常詳細細!談幾點優(yōu)化方面面的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黃岡市2025年春季九年級調(diào)研考試道德與法治試卷
- 2025安監(jiān)安全質(zhì)量標準化考試試題(含答案)
- 建筑勞務(wù)合同(知識研究版本)
- 新疆哈密地區(qū)第二中學2025屆高三年級期末調(diào)研考試(物理試題)試卷含解析
- 蘭考三農(nóng)職業(yè)學院《基礎(chǔ)阿拉伯語三》2023-2024學年第二學期期末試卷
- 湖北黃岡應(yīng)急管理職業(yè)技術(shù)學院《生物藥品》2023-2024學年第二學期期末試卷
- 寧夏工業(yè)職業(yè)學院《多聲部音樂分析與習作3》2023-2024學年第一學期期末試卷
- 江蘇省無錫市宜興中學2025屆初三考前熱身物理試題試卷含解析
- 渭南職業(yè)技術(shù)學院《云計算與大數(shù)據(jù)基礎(chǔ)》2023-2024學年第一學期期末試卷
- 山東日照市莒縣北五校2025屆三月調(diào)考物理試題含解析
- 紅磚砌墻施工方案范本
- 上海校外培訓(xùn)退費標準文件
- 2023光伏發(fā)電工程項目安全文明施工方案
- 人教版八年級英語下冊閱讀課件
- Mysql 8.0 OCP 1Z0-908 CN-total認證備考題庫(含答案)
- 設(shè)備報修單表
- 2022-2023學年四川眉山仁壽新店鎮(zhèn)小學校數(shù)學五年級第二學期期末學業(yè)質(zhì)量監(jiān)測試題含解析
- 初中化學-潔廁靈溶液主要成分的探究教學課件設(shè)計
- 高中數(shù)學說題課件
- 二年級數(shù)學歐利和他的懶弟弟優(yōu)秀課件
- 2023年春江蘇開放大學《江蘇紅色文化》過程性考核作業(yè)一二和綜合大作業(yè)+參考答案
評論
0/150
提交評論