版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一部分-分析與思路:實(shí)際項(xiàng)目的特點(diǎn)是:1.數(shù)據(jù)量大2.商品分類多3.每個(gè)商品可以處于多個(gè)分類下4.平均每個(gè)商品擁有2個(gè)以上的屬性要求可以做到:1.按照商品名稱搜索2.按照商品屬性篩選3.按照分類篩選4.按照價(jià)格分組篩選5.按照價(jià)格、時(shí)間排序MySQL基本數(shù)據(jù)結(jié)構(gòu): HYPERLINK /wp-content/uploads/2011/10/%E6%9C%AA%E5%91%BD%E5%90%8D.jpg 說(shuō)明:product是基本產(chǎn)品表,id為產(chǎn)品編號(hào),name是待搜索字段product_index為產(chǎn)品屬性表,index_id是屬性編號(hào),product_id為product表的id。如果編號(hào)
2、為100的產(chǎn)品,有5個(gè) 不同屬性,在product_index表中就會(huì)記錄product_id為100,index_id不相同的五條記錄。product_show的結(jié)構(gòu)與product_index類似,記錄的是產(chǎn)品于分類的聯(lián)系,如果同一個(gè)產(chǎn)品同屬5個(gè)不同的分類,在表中就會(huì)存在五條記錄。數(shù)據(jù)結(jié)構(gòu)不復(fù)雜,但是實(shí)際應(yīng)用中,使用Mysql的查詢實(shí)現(xiàn)的搜索和檢索,效率是比較低的。最消耗性能的地方是產(chǎn)品列表的索引導(dǎo)航,這是類似淘寶網(wǎng)產(chǎn)品列表的”按XXX瀏覽”: SQL的實(shí)現(xiàn)不多說(shuō)。在Sphinx有個(gè)非常棒的特性:MVA(多值屬性),MVA類似Mysql的set類型的字段,但是存放值不受預(yù)設(shè)的限制,使用MV
3、A建立Sphinx的屬性,用來(lái)存放每個(gè)產(chǎn)品的index_id和category_id,很方便就能實(shí)現(xiàn)篩選功能。第二部分-索引結(jié)構(gòu)配置:Sphinx配置文件貼出主要部分,其他的手冊(cè)上說(shuō)的很清楚了(手冊(cè)非常重要: HYPERLINK /uploads/pdf/sphinx_doc_zhcn_0.9.pdf t _blank /uploads/pdf/sphinx_doc_zhcn_0.9.pdf)。 HYPERLINK /wp-content/uploads/2011/10/%E6%9C%AA%E5%91%BD%E5%90%8D1.jpg 上面是source部分,項(xiàng)目的編碼是UTF-8,所以首先得
4、執(zhí)行:“SET NAMES utf8”。product里面的price是以保留兩位小數(shù)的形式存放的,在sql_query里面,將它乘以100換成整數(shù),避免浮點(diǎn)精度帶來(lái)的不必要的小數(shù)位。關(guān)鍵的兩條“sql_attr_multi”,配置了屬性和分類的MVA,“from query”后面緊接著SQL,表示來(lái)自查詢,product_id放第一個(gè)字段,后面跟著值字段,這樣Sphinx內(nèi)部才會(huì)進(jìn)行處理。建立索引后,結(jié)構(gòu)可以看成下圖所示: HYPERLINK /wp-content/uploads/2011/10/index.gif 第三部分-查詢:Sphinx自帶的PHP的API進(jìn)行查詢。示例1:編號(hào)為1
5、,2,3,4,5的5個(gè)分類下的產(chǎn)品列表:$Sphinx-SetFilter(category_id,array(1,2,3,4,5);$Sphinx-Query(”,*);示例2:屬性編號(hào)為1,2,3,4,5的下的產(chǎn)品列表(屬性的交集)$Sphinx-SetFilter(index_id,array(1);$Sphinx-SetFilter(index_id,array(2);$Sphinx-SetFilter(index_id,array(3);$Sphinx-SetFilter(index_id,array(4);$Sphinx-SetFilter(index_id,array(5);$S
6、phinx-Query(”,*);示例3:屬性編號(hào)為1,2,3,4,5的下的產(chǎn)品列表(屬性的交集)的價(jià)格分組,并且升序排列$Sphinx-SetFilter(index_id,array(1);$Sphinx-SetFilter(index_id,array(2);$Sphinx-SetFilter(index_id,array(3);$Sphinx-SetFilter(index_id,array(4);$Sphinx-SetFilter(index_id,array(5);$Sphinx-SetGroupBy(price,SPH_GROUPBY_ATTR,group asc);$Sphin
7、x-Query(”,*);示例4:屬性編號(hào)為1,2,3,4,5的下的產(chǎn)品列表(屬性的交集),分類編號(hào)是7,8,9$Sphinx-SetFilter(category_id,array(7,8,9);$Sphinx-SetFilter(index_id,array(1);$Sphinx-SetFilter(index_id,array(2);$Sphinx-SetFilter(index_id,array(3);$Sphinx-SetFilter(index_id,array(4);$Sphinx-SetFilter(index_id,array(5);$Sphinx-SetGroupBy(pr
8、ice,SPH_GROUPBY_ATTR,group asc);$Sphinx-Query(”,*);Sphinx的查詢使用還是很方便的,需要注意的是,Filter傳遞的待篩選參數(shù)必須是數(shù)組;關(guān)于MVA的使用,如果數(shù)組有多個(gè)成員:$Sphinx-SetFilter(category_id,array(7,8,9);表示索引中的category_id滿足數(shù)組中的任意一個(gè)值就會(huì)篩選出來(lái).$Sphinx-SetFilter(index_id,array(7);$Sphinx-SetFilter(index_id,array(8);$Sphinx-SetFilter(index_id,array(9)
9、;表示索引中的index_id包含7,8,9三個(gè)值才會(huì)被篩選出.MVA也可以用來(lái)進(jìn)行Group操作:$Sphinx-SetGroupBy( index_value_id, SPH_GROUPBY_ATTR );可以很方便的得出當(dāng)前條件下的,各種屬性(樣式,品牌)的數(shù)量.第四部分-即時(shí)更新方案:使用了Sphinx代替了Mysql進(jìn)行查詢后,最大的問題還在于數(shù)據(jù)的更新問題:我們?cè)诤笈_(tái)進(jìn)行了產(chǎn)品的編輯,刪除,添加操作,都需要盡快的反應(yīng)到用戶端.架構(gòu)圖: HYPERLINK /wp-content/uploads/2011/10/index-update.gif 說(shuō)明:(1).在Mysql中建立一個(gè)增
10、量表,凡是產(chǎn)品更新操作(添加,修改,刪除),都會(huì)將相關(guān)ID更新到到增量表;表結(jié)構(gòu)很簡(jiǎn)單,只記錄ID.(2).修改Sphinx的配置文件sql_query=SELECT id,name,price*100ASprice,0ASin_update FROM shop_productsql_attr_uint=in_update增加了一個(gè)字段in_update,用來(lái)標(biāo)記主索引的這條記錄,是否在增量表中.(3).產(chǎn)品的更新操作時(shí),除了更新增量表,同時(shí)也利用Sphinx API的UpdateAttributes方法,將主索引中的相關(guān)記錄的in_update屬性設(shè)置成”1$this-Sphinx-Upda
11、teAttributes($index,array(in_update),array($id=1);代碼中的$id指的是商品編號(hào).更新完了屬性后,發(fā)出增量索引更新通知,可以是寫隊(duì)列,寫文件等方式.(4).在查詢時(shí),增加過濾器.$Sphinx-SetFilter(in_update,array(0);這樣,就不會(huì)使用到主索引中的處于增量索引中的doc,以免搜索到錯(cuò)誤的編輯前的數(shù)據(jù).(5).守護(hù)進(jìn)程接到增量索引更新通知,重建增量索引.(6).每天某時(shí)段更新主索引,清空增量表,清空增量索引思路就是這樣,下面的增量索引更新腳本是我用在測(cè)試環(huán)境的,生產(chǎn)環(huán)境的比較復(fù)雜,供參考.#!/bin/bashCHE
12、CK_FILE_PATH=/xxx/sphinx-check.txtSPHINX_COMMAND=”/opt/sphinx/bin/indexer config /opt/sphinx/etc/product.conf product_update_index rotate”whiletruedoNOW_TIME=date+%Y-%m-%d %H:%M:%Sif-f$CHECK_FILE_PATH;then WORD_NUM=cat $CHECK_FILE_PATH|wc-wif$WORD_NUM-gt0;then echo”bulid $NOW_TIME” $SPHINX_COMMAND $
13、CHECK_FILE_PATHelse echo”skip $NOW_TIME” fielseecho”nofile $NOW_TIME”fisleep30done后臺(tái)操作時(shí),簡(jiǎn)單的用寫文件的方式通知索引更新腳本,索引更新完成后,將文件重置.第五部分-優(yōu)化總結(jié):這幾篇blog,沒想過寫成手把手的教程,只是想把思路寫出來(lái),和大家交流,所以流水賬了代碼都是些關(guān)鍵片段,不負(fù)責(zé)它正常運(yùn)行!基礎(chǔ)方面的請(qǐng)到Sphinx官方站查看文檔,非常詳細(xì)!談幾點(diǎn)優(yōu)化方面的建議:1.Sphinx自帶PHP API和使用C寫的PHP擴(kuò)展相比,速度快了不少,應(yīng)該是網(wǎng)絡(luò)通訊方面的問題.覺得這應(yīng)該是不正常的,但是問題我還沒找到
14、.也有可能是個(gè)別問題.2.一個(gè)頁(yè)面要是有多個(gè)Sphinx查詢請(qǐng)求,請(qǐng)使用AddQuery方法,盡量收集,一次發(fā)送,一個(gè)接收.3.AddQuery添加Query的條數(shù)有限制,應(yīng)該是32條這樣,我以前提到過.4.做好cache!附錄資料:不需要的可以自行刪除b2c電子商務(wù)網(wǎng)站概要設(shè)計(jì)整體結(jié)構(gòu)b2c電子商務(wù)系統(tǒng)主要是一個(gè)由多個(gè)相互關(guān)聯(lián)的網(wǎng)頁(yè)組成有機(jī)整體的網(wǎng)站,這些網(wǎng)頁(yè)的組成部分可以分為兩大類:素材和功能模塊導(dǎo)航欄。用于指向網(wǎng)站特定內(nèi)容的鏈接的集合。買商品,客戶管理。用戶通過鏈接跳轉(zhuǎn)到感興趣的內(nèi)容網(wǎng)頁(yè)。商品分類信息欄屬于導(dǎo)航信息欄普通信息,公司或者網(wǎng)站介紹,b2c商品交易協(xié)議的聲明,網(wǎng)站使用的方法。內(nèi)
15、容為靜態(tài),并且時(shí)效性不好內(nèi)容更新緩慢,靜態(tài)文件的方式存放即時(shí)信息,包括網(wǎng)站新聞,商品折扣信息,系統(tǒng)廣播。其特點(diǎn)是內(nèi)容更新快,信息量大,需要在系統(tǒng)運(yùn)行時(shí)動(dòng)態(tài)發(fā)布。商品信息所含數(shù)據(jù)的主要組成部分,他的特點(diǎn)是商品種類繁多,不同的商品有不同的屬性和技術(shù)指標(biāo)。顧客管理及安全認(rèn)證,b2c電子商務(wù)的商品交易需要建立在交易雙方彼此信任的基礎(chǔ)上,這就需要對(duì)購(gòu)買商品的顧客進(jìn)行管理,并在交易時(shí)進(jìn)行交易管理。包括顧客注冊(cè),顧客信息管理,顧客登錄驗(yàn)證,交易過程顧客身份的確認(rèn)。商品交易。包括顧客選購(gòu)商品,(購(gòu)物車),訂單生成和確認(rèn),貨款支付和商品交付。附加功能,商品和其他信息的搜索,更好的展示商品。系統(tǒng)目標(biāo)功能分析1:后
16、臺(tái)管理方面;a商品訂單管理:主要實(shí)現(xiàn)商品分類管理,添加與修改商品,管理訂單,投訴訂單,反饋信息,商品留言管理b管理網(wǎng)站用戶:實(shí)現(xiàn)用戶管理,后臺(tái)管理員管理等c新聞公告管理:實(shí)現(xiàn)新聞添加,修改刪除等功能d網(wǎng)站常規(guī)設(shè)置:網(wǎng)站設(shè)置,首頁(yè)廣告,大類廣告,小類廣告,友情鏈接,修改注冊(cè)協(xié)議等e網(wǎng)站信息設(shè)置:匯款方式,送貨方式,定購(gòu)方式,售后服務(wù)等2:前臺(tái)應(yīng)用方面:a用戶管理:實(shí)現(xiàn)用戶注冊(cè),驗(yàn)證碼登陸,資料修改b用戶定購(gòu),實(shí)現(xiàn)在線定購(gòu),在線支付,購(gòu)物車,查看訂單,訂單投訴,信息反饋c商品展示:實(shí)現(xiàn)二級(jí)分類展示,首頁(yè)精品推薦,新品發(fā)布,銷售排行,分類模糊搜索】d網(wǎng)站信息:匯款方式,送貨方式,定購(gòu)方式 售后服務(wù)e
17、首頁(yè)功能:最新新聞,友情鏈接數(shù)據(jù)庫(kù)需求分析用戶的需求具體體現(xiàn)在各種信息的提供、保存、更新和查詢方面,這就要求數(shù)據(jù)庫(kù)結(jié)構(gòu)能夠滿足各種信息的輸出和輸入。收集基本數(shù)據(jù)、數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)處理的流程,組成一份詳盡的數(shù)據(jù)字典,為后面的具體設(shè)計(jì)打下基礎(chǔ)。通過上述系統(tǒng)功能的分析,針對(duì)一般的B2C銷售系統(tǒng),總結(jié)出如下的需求信息:用戶分一般用戶和注冊(cè)用戶。一般用戶只能注冊(cè)后下訂單,注冊(cè)用戶可直接下訂單。注冊(cè)用戶登入后可以維護(hù)自己的個(gè)人信息,并且在向網(wǎng)站發(fā)出訂單時(shí)會(huì)自動(dòng)填寫自己聯(lián)系信息。一種商品有多種信號(hào)和款式,即一個(gè)大類包括多個(gè)小類。一個(gè)小類只能屬于一個(gè)大類。通過上述系統(tǒng)功能分析和需求總結(jié),設(shè)計(jì)如下的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)
18、構(gòu):管理員信息,包括數(shù)據(jù)項(xiàng):賬號(hào),姓名,密碼。注冊(cè)用戶(會(huì)員),包括數(shù)據(jù)項(xiàng),用戶ID,用戶名,密碼等。商品大類,包括數(shù)據(jù)項(xiàng):商品類型編號(hào),商品名稱。商品小類,包括數(shù)據(jù)項(xiàng):小類編號(hào),小類名稱,對(duì)應(yīng)大類名稱。訂單,包括數(shù)據(jù)項(xiàng):訂單編號(hào),訂單號(hào)碼,用戶姓名,購(gòu)買時(shí)間等。投訴,包括數(shù)據(jù)項(xiàng):投訴編號(hào),訂單號(hào)碼,用戶姓名,投訴時(shí)間。系統(tǒng),包括數(shù)據(jù)項(xiàng):系統(tǒng)編號(hào),系統(tǒng)開發(fā)人員的姓名,系統(tǒng)類型等。新聞,包括數(shù)據(jù)項(xiàng):新聞編號(hào),新聞標(biāo)題,新聞內(nèi)容等。數(shù)據(jù)庫(kù)概念模型設(shè)計(jì)在上面數(shù)據(jù)需求信息分析的基礎(chǔ)上,就可以設(shè)計(jì)出能夠滿足用戶需求的各種實(shí)體,以及他們之間的關(guān)系,為后面的具體數(shù)據(jù)表設(shè)計(jì)打下基礎(chǔ)。這些實(shí)體包含各種具體信息,
19、通過相互之間的作用形成數(shù)據(jù)間的流動(dòng)。由此得出實(shí)體關(guān)系模型(E-R)。數(shù)據(jù)表設(shè)計(jì)數(shù)據(jù)庫(kù)的概率結(jié)構(gòu)設(shè)計(jì)完畢后現(xiàn)在可以將上面的數(shù)據(jù)庫(kù)概念結(jié)構(gòu)轉(zhuǎn)化為某種數(shù)據(jù)庫(kù)系統(tǒng)所支持的實(shí)際數(shù)據(jù)模型,也就是數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)。這里所使用的是Access數(shù)據(jù)庫(kù),銷售系統(tǒng)數(shù)據(jù)庫(kù)中的各個(gè)表的設(shè)計(jì)結(jié)果在下面的一系列表格中給出,每個(gè)表格表示在數(shù)據(jù)庫(kù)中的一個(gè)表。會(huì)員信息表字段名稱數(shù)據(jù)類型ID自動(dòng)編號(hào)Username文本Userpass文本Membercode數(shù)字Userhome文本Usermail文本Question文本Answer文本Honor文本Realname文本Birthday文本訂單表字段名稱數(shù)據(jù)類型Sub_id自動(dòng)編號(hào)Basket_id文本User_name文本Sub_date日期/時(shí)間Sub_number文本Sub_check是/否Sub_to文本Sub_mail文本Sub_tel文本Sub_ad
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版外匯期貨市場(chǎng)會(huì)員交易結(jié)算合同3篇
- 2025年度車輛轉(zhuǎn)讓協(xié)議書編制指南8篇
- 2025羽毛球大賽冠名贊助合同范本
- 基于低維凸可行域映射的新能源電網(wǎng)輸-配協(xié)同恢復(fù)研究
- 轉(zhuǎn)錄因子FanHB2b.B1調(diào)控‘蒙特瑞’草莓果實(shí)低糖特性形成的機(jī)制研究
- REDD+生物多樣性增益歸屬研究
- 二零二五年度木質(zhì)裝飾材料批發(fā)與零售合同3篇
- 長(zhǎng)沙縣安沙鎮(zhèn)鄉(xiāng)村教師職業(yè)滿意度影響因素的研究
- 2025年度光伏發(fā)電項(xiàng)目承建與運(yùn)維服務(wù)合同4篇
- 二零二四年共享辦公室租賃合同附設(shè)備租賃與升級(jí)服務(wù)條款3篇
- 農(nóng)民工工資表格
- 【寒假預(yù)習(xí)】專題04 閱讀理解 20篇 集訓(xùn)-2025年人教版(PEP)六年級(jí)英語(yǔ)下冊(cè)寒假提前學(xué)(含答案)
- 2024年智能監(jiān)獄安防監(jiān)控工程合同3篇
- 幼兒園籃球課培訓(xùn)
- 統(tǒng)編版(2024新版)七年級(jí)《道德與法治》上冊(cè)第一單元《少年有夢(mèng)》單元測(cè)試卷(含答案)
- 100道20以內(nèi)的口算題共20份
- 高三完形填空專項(xiàng)訓(xùn)練單選(部分答案)
- 護(hù)理查房高鉀血癥
- 項(xiàng)目監(jiān)理策劃方案匯報(bào)
- 《職業(yè)培訓(xùn)師的培訓(xùn)》課件
- 建筑企業(yè)新年開工儀式方案
評(píng)論
0/150
提交評(píng)論