मैं एक webshop बनाने currenlty हूँ। यह दुकान उपयोगकर्ताओं category
द्वारा उत्पादों फिल्टर करने के लिए अनुमति देता है, और एक जोड़ी वैकल्पिक अतिरिक्त फ़िल्टर ऐसे brand
, color
, आदिPHP, MySQL, कुशल टैग-संचालित खोज एल्गोरिदम
फिलहाल के रूप में, विभिन्न गुणों विभिन्न स्थानों में जमा हो जाती है, लेकिन मैं एक करने के लिए स्विच करना चाहते हैं टैग-आधारित प्रणाली।
product_id
tag_url_alias
(अद्वितीय)tag_type
(अद्वितीय) (श्रेणी, product_brand, product_color, आदि)tag_value
(अद्वितीय नहीं: आदर्श रूप में, मेरी डेटाबेस टैग निम्न डेटा के साथ संग्रहीत करना चाहिए)
प्रथम उद्देश्य
मैं product_id
की खोज करना चाहूंगा जो कहीं भी से 1-5 विशेष टैग के बीच जुड़े हुए हैं। टैग एक एसईओ अनुकूल यूआरएल से निकाले जाते हैं। तो मैं प्रत्येक टैग के लिए एक अद्वितीय तार (tag_url_alias
) पुनर्प्राप्त कर दूंगा, लेकिन मुझे tag_type
नहीं पता होगा। खोज, एक चौराहे हो जाएगा तो मेरी खोज product_id
की कि सभी प्रदान की tags
की से मेल लौटना चाहिए।
दूसरा उद्देश्य
उत्पादों है कि वर्तमान फिल्टर से मेल खाते प्रदर्शित इसके अलावा, मैं भी अन्य श्रेणियों और फ़िल्टर जो उपयोगकर्ता की आपूर्ति कर सकते हैं के लिए उत्पाद गिनती प्रदर्शित करना चाहते हैं।
Shoe + Black + Adidas
अब, दुकान के एक आगंतुक जिसके परिणामस्वरूप उत्पादों और आश्चर्य जो काले जूते अन्य ब्रांडों की पेशकश करने के लिए है पर विचार करना चाह सकते हैं:
उदाहरण के लिए, मेरे वर्तमान खोज उत्पादों है कि टैग से मेल के लिए है। इसलिए वे "ब्रांड" फ़िल्टर पर जा सकते हैं, और अन्य सूचीबद्ध ब्रांड्स का चयन कर सकते हैं। कहते हैं कि चलो वे 2 अलग अलग विकल्प हैं निम्नलिखित खोजें जिसका परिणाम (व्यवहार में, यह शायद कई और अधिक होगा),:
Shoe + Black + Nike > 103 results
Shoe + Black + K-swiss > 0 results
इस मामले में, अगर वे ब्रांड देख "कश्मीर स्विस" एक उपलब्ध के रूप में सूचीबद्ध अपने फ़िल्टर में choise, उनकी खोज 0 परिणाम वापस आ जाएगी।
यह स्पष्ट रूप से उपयोगकर्ता के लिए निराशाजनक है ... मुझे बहुत पता है कि "एडिडास" से "के-स्विस" में "ब्रांड" को स्विच करने से 0 परिणाम होंगे, और फ़िल्टर से पूरे विकल्प को हटा दें ।
यही बात श्रेणियों, रंग, आदि
के लिए चला जाता है व्यवहार में यह केवल एक पृष्ठ दृश्य केवल फ़िल्टर उत्पाद सूची मेरा प्राथमिक उद्देश्य में वर्णित वापस नहीं होगा मतलब होगा, लेकिन संभावित समान अभी तक अलग-अलग सूचियां के सैकड़ों। प्रत्येक फ़िल्टर मान के लिए एक जो अन्य फ़िल्टर मान को प्रतिस्थापित कर सकता है, या मौजूदा फ़िल्टर मानों में जोड़ा जा सकता है।
क्षमता
मुझे लगता है मेरी डेटाबेस अंत में शामिल होंगे:
250 के बीच और 1.000 अद्वितीय टैग
और यह शामिल होंगे:
10,000 और 100,000 के बीचअद्वितीय उत्पाद
वर्तमान विचार
मैं कुछ Google खोजों किया था और निम्न आलेख पाया: http://www.pui.ch/phred/archives/2005/06/tagsystems-performance-tests.html
उस लेख से परखने के बाद, प्रश्नों के सैकड़ों चल 2 उद्देश्य को प्राप्त करने, एक दर्दनाक धीमी मार्ग होने जा रहा है। "विषाक्त" उदाहरण मेरी आवश्यकताओं के लिए काम कर सकता है और यह मेरे पहले उद्देश्य के लिए स्वीकार्य हो सकता है, लेकिन यह दूसरे उद्देश्य के लिए अस्वीकार्य रूप से धीमा होगा।
मैं सोच रहा था कि मैं अलग-अलग प्रश्नों को चला सकता हूं जो tag
से संबंधित product_id
से संबंधित हैं, उन प्रश्नों को कैश करें, और फिर परिणामों पर चौराहे की गणना करें। लेकिन, क्या मैं MySQL में इन चौराहे की गणना करता हूं? या PHP में? अगर मैं MySQL का उपयोग करता हूं, तो क्या मुझे एक अलग तरीका है कि मुझे इन व्यक्तिगत प्रश्नों को कैश करना चाहिए, या मुझे आवश्यक सभी इंडेक्स की आपूर्ति कर रहा है?
मुझे लगता है कि इन tag
/product_id
सेटों में से दो के बीच चौराहे को कैश करना भी संभव है। चौराहे की मात्रा इस तथ्य से सीमित होगी कि tag_type
में केवल एक विशेष मूल्य हो सकता है, लेकिन मुझे यकीन नहीं है कि इस प्रकार के कैशिंग को कुशलता से प्रबंधित करने का तरीका कैसा है। दोबारा, मुझे नहीं पता कि मुझे इसे MySQL या PHP में करना चाहिए या नहीं। और अगर मैं इसे MySQL में करता हूं, तो इस प्रकार के कैश किए गए परिणामों को स्टोर और गठबंधन करने का सबसे अच्छा तरीका क्या होगा?
यह एक थीसिस है: डी – dynamic
ठीक है, मैं यही प्रश्न पूछता हूं! बधाई महोदय – Weacked
धन्यवाद! मुझे यकीन है कि जवाब मुझे बहुत सारे नए ज्ञान प्रदान करेंगे! –