Sphinx在電子商務網(wǎng)站中的應用_第1頁
Sphinx在電子商務網(wǎng)站中的應用_第2頁
Sphinx在電子商務網(wǎng)站中的應用_第3頁
Sphinx在電子商務網(wǎng)站中的應用_第4頁
Sphinx在電子商務網(wǎng)站中的應用_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第一部分-分析與思路:實際項目的特點是:1.數(shù)據(jù)量大2.商品分類多3.每個商品可以處于多個分類下4.平均每個商品擁有2個以上的屬性要求可以做到:1.按照商品名稱搜索2.按照商品屬性篩選3.按照分類篩選4.按照價格分組篩選5.按照價格、時間排序MySQL基本數(shù)據(jù)結構: HYPERLINK /wp-content/uploads/2011/10/%E6%9C%AA%E5%91%BD%E5%90%8D.jpg 說明:product是基本產(chǎn)品表,id為產(chǎn)品編號,name是待搜索字段product_index為產(chǎn)品屬性表,index_id是屬性編號,product_id為product表的id。如果編號

2、為100的產(chǎn)品,有5個 不同屬性,在product_index表中就會記錄product_id為100,index_id不相同的五條記錄。product_show的結構與product_index類似,記錄的是產(chǎn)品于分類的聯(lián)系,如果同一個產(chǎn)品同屬5個不同的分類,在表中就會存在五條記錄。數(shù)據(jù)結構不復雜,但是實際應用中,使用Mysql的查詢實現(xiàn)的搜索和檢索,效率是比較低的。最消耗性能的地方是產(chǎn)品列表的索引導航,這是類似淘寶網(wǎng)產(chǎn)品列表的”按XXX瀏覽”: SQL的實現(xiàn)不多說。在Sphinx有個非常棒的特性:MVA(多值屬性),MVA類似Mysql的set類型的字段,但是存放值不受預設的限制,使用MV

3、A建立Sphinx的屬性,用來存放每個產(chǎn)品的index_id和category_id,很方便就能實現(xiàn)篩選功能。第二部分-索引結構配置:Sphinx配置文件貼出主要部分,其他的手冊上說的很清楚了(手冊非常重要: 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部分,項目的編碼是UTF-8,所以首先得

4、執(zhí)行:“SET NAMES utf8”。product里面的price是以保留兩位小數(shù)的形式存放的,在sql_query里面,將它乘以100換成整數(shù),避免浮點精度帶來的不必要的小數(shù)位。關鍵的兩條“sql_attr_multi”,配置了屬性和分類的MVA,“from query”后面緊接著SQL,表示來自查詢,product_id放第一個字段,后面跟著值字段,這樣Sphinx內部才會進行處理。建立索引后,結構可以看成下圖所示: HYPERLINK /wp-content/uploads/2011/10/index.gif 第三部分-查詢:Sphinx自帶的PHP的API進行查詢。示例1:編號為1

5、,2,3,4,5的5個分類下的產(chǎn)品列表:$Sphinx-SetFilter(category_id,array(1,2,3,4,5);$Sphinx-Query(”,*);示例2:屬性編號為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:屬性編號為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);$Sphinx-SetGroupBy(price,SPH_GROUPBY_ATTR,group asc);$Sphin

7、x-Query(”,*);示例4:屬性編號為1,2,3,4,5的下的產(chǎn)品列表(屬性的交集),分類編號是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ù)組;關于MVA的使用,如果數(shù)組有多個成員:$Sphinx-SetFilter(category_id,array(7,8,9);表示索引中的category_id滿足數(shù)組中的任意一個值就會篩選出來.$Sphinx-SetFilter(index_id,array(7);$Sphinx-SetFilter(index_id,array(8);$Sphinx-SetFilter(index_id,array(9)

9、;表示索引中的index_id包含7,8,9三個值才會被篩選出.MVA也可以用來進行Group操作:$Sphinx-SetGroupBy( index_value_id, SPH_GROUPBY_ATTR );可以很方便的得出當前條件下的,各種屬性(樣式,品牌)的數(shù)量.第四部分-即時更新方案:使用了Sphinx代替了Mysql進行查詢后,最大的問題還在于數(shù)據(jù)的更新問題:我們在后臺進行了產(chǎn)品的編輯,刪除,添加操作,都需要盡快的反應到用戶端.架構圖: HYPERLINK /wp-content/uploads/2011/10/index-update.gif 說明:(1).在Mysql中建立一個增

10、量表,凡是產(chǎn)品更新操作(添加,修改,刪除),都會將相關ID更新到到增量表;表結構很簡單,只記錄ID.(2).修改Sphinx的配置文件sql_query=SELECT id,name,price*100ASprice,0ASin_update FROM shop_productsql_attr_uint=in_update增加了一個字段in_update,用來標記主索引的這條記錄,是否在增量表中.(3).產(chǎn)品的更新操作時,除了更新增量表,同時也利用Sphinx API的UpdateAttributes方法,將主索引中的相關記錄的in_update屬性設置成”1$this-Sphinx-Upda

11、teAttributes($index,array(in_update),array($id=1);代碼中的$id指的是商品編號.更新完了屬性后,發(fā)出增量索引更新通知,可以是寫隊列,寫文件等方式.(4).在查詢時,增加過濾器.$Sphinx-SetFilter(in_update,array(0);這樣,就不會使用到主索引中的處于增量索引中的doc,以免搜索到錯誤的編輯前的數(shù)據(jù).(5).守護進程接到增量索引更新通知,重建增量索引.(6).每天某時段更新主索引,清空增量表,清空增量索引思路就是這樣,下面的增量索引更新腳本是我用在測試環(huán)境的,生產(chǎn)環(huán)境的比較復雜,供參考.#!/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后臺操作時,簡單的用寫文件的方式通知索引更新腳本,索引更新完成后,將文件重置.第五部分-優(yōu)化總結:這幾篇blog,沒想過寫成手把手的教程,只是想把思路寫出來,和大家交流,所以流水賬了代碼都是些關鍵片段,不負責它正常運行!基礎方面的請到Sphinx官方站查看文檔,非常詳細!談幾點優(yōu)化方面的建議:1.Sphinx自帶PHP API和使用C寫的PHP擴展相比,速度快了不少,應該是網(wǎng)絡通訊方面的問題.覺得這應該是不正常的,但是問題我還沒找到

14、.也有可能是個別問題.2.一個頁面要是有多個Sphinx查詢請求,請使用AddQuery方法,盡量收集,一次發(fā)送,一個接收.3.AddQuery添加Query的條數(shù)有限制,應該是32條這樣,我以前提到過.4.做好cache!附錄資料:不需要的可以自行刪除b2c電子商務網(wǎng)站概要設計整體結構b2c電子商務系統(tǒng)主要是一個由多個相互關聯(lián)的網(wǎng)頁組成有機整體的網(wǎng)站,這些網(wǎng)頁的組成部分可以分為兩大類:素材和功能模塊導航欄。用于指向網(wǎng)站特定內容的鏈接的集合。買商品,客戶管理。用戶通過鏈接跳轉到感興趣的內容網(wǎng)頁。商品分類信息欄屬于導航信息欄普通信息,公司或者網(wǎng)站介紹,b2c商品交易協(xié)議的聲明,網(wǎng)站使用的方法。內

15、容為靜態(tài),并且時效性不好內容更新緩慢,靜態(tài)文件的方式存放即時信息,包括網(wǎng)站新聞,商品折扣信息,系統(tǒng)廣播。其特點是內容更新快,信息量大,需要在系統(tǒng)運行時動態(tài)發(fā)布。商品信息所含數(shù)據(jù)的主要組成部分,他的特點是商品種類繁多,不同的商品有不同的屬性和技術指標。顧客管理及安全認證,b2c電子商務的商品交易需要建立在交易雙方彼此信任的基礎上,這就需要對購買商品的顧客進行管理,并在交易時進行交易管理。包括顧客注冊,顧客信息管理,顧客登錄驗證,交易過程顧客身份的確認。商品交易。包括顧客選購商品,(購物車),訂單生成和確認,貨款支付和商品交付。附加功能,商品和其他信息的搜索,更好的展示商品。系統(tǒng)目標功能分析1:后

16、臺管理方面;a商品訂單管理:主要實現(xiàn)商品分類管理,添加與修改商品,管理訂單,投訴訂單,反饋信息,商品留言管理b管理網(wǎng)站用戶:實現(xiàn)用戶管理,后臺管理員管理等c新聞公告管理:實現(xiàn)新聞添加,修改刪除等功能d網(wǎng)站常規(guī)設置:網(wǎng)站設置,首頁廣告,大類廣告,小類廣告,友情鏈接,修改注冊協(xié)議等e網(wǎng)站信息設置:匯款方式,送貨方式,定購方式,售后服務等2:前臺應用方面:a用戶管理:實現(xiàn)用戶注冊,驗證碼登陸,資料修改b用戶定購,實現(xiàn)在線定購,在線支付,購物車,查看訂單,訂單投訴,信息反饋c商品展示:實現(xiàn)二級分類展示,首頁精品推薦,新品發(fā)布,銷售排行,分類模糊搜索】d網(wǎng)站信息:匯款方式,送貨方式,定購方式 售后服務e

17、首頁功能:最新新聞,友情鏈接數(shù)據(jù)庫需求分析用戶的需求具體體現(xiàn)在各種信息的提供、保存、更新和查詢方面,這就要求數(shù)據(jù)庫結構能夠滿足各種信息的輸出和輸入。收集基本數(shù)據(jù)、數(shù)據(jù)結構及數(shù)據(jù)處理的流程,組成一份詳盡的數(shù)據(jù)字典,為后面的具體設計打下基礎。通過上述系統(tǒng)功能的分析,針對一般的B2C銷售系統(tǒng),總結出如下的需求信息:用戶分一般用戶和注冊用戶。一般用戶只能注冊后下訂單,注冊用戶可直接下訂單。注冊用戶登入后可以維護自己的個人信息,并且在向網(wǎng)站發(fā)出訂單時會自動填寫自己聯(lián)系信息。一種商品有多種信號和款式,即一個大類包括多個小類。一個小類只能屬于一個大類。通過上述系統(tǒng)功能分析和需求總結,設計如下的數(shù)據(jù)項和數(shù)據(jù)結

18、構:管理員信息,包括數(shù)據(jù)項:賬號,姓名,密碼。注冊用戶(會員),包括數(shù)據(jù)項,用戶ID,用戶名,密碼等。商品大類,包括數(shù)據(jù)項:商品類型編號,商品名稱。商品小類,包括數(shù)據(jù)項:小類編號,小類名稱,對應大類名稱。訂單,包括數(shù)據(jù)項:訂單編號,訂單號碼,用戶姓名,購買時間等。投訴,包括數(shù)據(jù)項:投訴編號,訂單號碼,用戶姓名,投訴時間。系統(tǒng),包括數(shù)據(jù)項:系統(tǒng)編號,系統(tǒng)開發(fā)人員的姓名,系統(tǒng)類型等。新聞,包括數(shù)據(jù)項:新聞編號,新聞標題,新聞內容等。數(shù)據(jù)庫概念模型設計在上面數(shù)據(jù)需求信息分析的基礎上,就可以設計出能夠滿足用戶需求的各種實體,以及他們之間的關系,為后面的具體數(shù)據(jù)表設計打下基礎。這些實體包含各種具體信息,

19、通過相互之間的作用形成數(shù)據(jù)間的流動。由此得出實體關系模型(E-R)。數(shù)據(jù)表設計數(shù)據(jù)庫的概率結構設計完畢后現(xiàn)在可以將上面的數(shù)據(jù)庫概念結構轉化為某種數(shù)據(jù)庫系統(tǒng)所支持的實際數(shù)據(jù)模型,也就是數(shù)據(jù)庫的邏輯結構。這里所使用的是Access數(shù)據(jù)庫,銷售系統(tǒng)數(shù)據(jù)庫中的各個表的設計結果在下面的一系列表格中給出,每個表格表示在數(shù)據(jù)庫中的一個表。會員信息表字段名稱數(shù)據(jù)類型ID自動編號Username文本Userpass文本Membercode數(shù)字Userhome文本Usermail文本Question文本Answer文本Honor文本Realname文本Birthday文本訂單表字段名稱數(shù)據(jù)類型Sub_id自動編號Basket_id文本User_name文本Sub_date日期/時間Sub_number文本Sub_check是/否Sub_to文本Sub_mail文本Sub_tel文本Sub_ad

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論