2012-02-14 12 views
8

यह एक समस्या है जो मुझे सही करने के तरीके के बारे में सोचने के लिए और अधिक समय खो गया है, जो करने के लिए सबसे अच्छा अनुकूलित तरीका सोच रहा है।"हैशटैग" सिस्टम बनाने के लिए सबसे अच्छा तरीका

मेरे पास एक टेबल "सामग्री" है, और सामग्री में कई "हैशटैग" या "टैग" या "कीवर्ड" को जोड़ने के लिए विकल्प जोड़ने की आवश्यकता है, उदाहरण के लिए, "केचप के साथ तला हुआ पॉटेटोस" जैसी सामग्री में है "चाबियाँ": "आलू", "केचप" और "तला हुआ"।

और जब मैं एक शब्द से खोज करता हूं, उदाहरण के लिए "आलू", मुझे उस सामग्री को दिखाने की ज़रूरत है जो इसमें है।

सवाल यह है कि, परिणामों की गति में सोचने के लिए यह सबसे अच्छी संरचना क्या है क्योंकि सामग्री तालिका 30 मिलियन पंक्तियों से अधिक मायिसैम मिथ है।

मैं इस में लगता है:

2 से अधिक टेबल बनाएं "contents_hashtags" (id(INT11), content_id(INT11), hashtag_id(INT11)) और "हैशटैग" (id(INT11), hashtag(VARCHAR(40))) 2 InnoDB

जब उपयोगकर्ता बनाने/तालिका सामग्री को संशोधित में टेबल, मैं खोज हैशटैग टेबल और आईडी प्राप्त करें, यदि कोई हैशटैग मौजूद नहीं है, तो इसे मौजूद हैशटैग में बनाएं, यदि मौजूद है, तो आईडी प्राप्त करें, इस सामग्री का उपयोग करके सामग्री प्राप्त करें सामग्री सामग्री को सम्मिलित करें सामग्री 0h-contents_hashtas-> हैशटाह

खोज में, जॉइन (LEFT/दाएं/अंदरूनी दोस्त ..) और पसंद करके एक खोज करें ?? सटीक (हैशटैग = "XXX") या पूर्ण पाठ खोज द्वारा?

क्या यह विधि सही/तेज है? मुझे पता है कि एक बड़ा पंक्ति में गिना जाता है और बड़े यातायात के साथ इस चलाने के न ..

उत्तर

2

वास्तव में, एक अतिरिक्त तालिका पर्याप्त

"हैशटैग" (आईडी (INT11), हैशटैग (VARCHAR (40))), content_id है (int11))

अब आप बस नाम से hastag जोड़ सकते हैं। एक सामग्री के लिए सभी हैशटैग पाने के लिए,

SELECT hashtag FROM hashtable WHERE content_id=$content_id 

एक निकालें एक हैशटैग जोड़ने के लिए, अपनी आईडी या हैशटैग खुद का उपयोग कर इसे हटा का उपयोग करें। विशिष्ट hastags के लिए सामग्री प्राप्त करने के लिए, बस

SELECT ct.* from hashtable ht, contenttable ct WHERE ht.hashtag=$hastag and ct.id=ht.content_id 

और इतने का उपयोग

3

तीन टेबल पर चाल करना होगा:

सामग्री, हैशटैग, और ConTags। ConTags सामग्री जंक्शन और हैशटैग.आईडी युक्त एक जंक्शन तालिका होगी। इस तरह, आप सामग्री में प्रत्येक आइटम में एकाधिक हैशटैग को विशेषता दे सकते हैं।

SELECT * FROM Contents c, Hashtags h LEFT JOIN ConTags t ON c.Id = t.ConId AND h.Id = t.HashId 

वैकल्पिक रूप से, सेट हैशटैग नाम और ContentID के रूप में अद्वितीय कुंजी और जंक्शन तालिका अब जरूरत है

+0

क्या तरीकों खोज में उपवास कर रहे हैं? 3 टेबल या 2 टेबल विधि? 3 टेबल विधि में जॉइन द्वारा सीधा संबंध है, लेकिन 2 टेबल विधि में हैशटैग सामग्री के लिए "डुप्लिकेट" है (क्योंकि आईडी + हैशटैग दोहराना नहीं है)। अगर मैं उदाहरण के लिए खोज करता हूं: content.active = 1 और (content.name = 'xxx' या (Contags.hashtag = 'XXX' और Content.id = Contags।content_id)) – Zenth

+0

"वैकल्पिक रूप से, हैशटैग नाम और सामग्री आईडी को अद्वितीय कुंजी के रूप में सेट करें" के लिए उपरोक्त। 3 टेबल 2 की आवश्यकता नहीं होगी। – DeepBlue

संबंधित मुद्दे