Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL / PHP में सबसे लोकप्रिय शब्द खोजें

मेरे हिसाब से सबसे आसान तरीका होगा:

  • दो नई तालिकाएँ बनाएँ:keywords (आईडी, शब्द) और keywords_comments (कीवर्ड_आईडी, कमेंट_आईडी, गिनती)
    • keywords एक अद्वितीय आईडी और पाठ में मिले कीवर्ड को सहेजता है
    • keywords_comments प्रत्येक टिप्पणी के बीच प्रत्येक कनेक्शन के लिए एक पंक्ति संग्रहीत करता है जिसमें वह कीवर्ड होता है। count में आप टिप्पणी में इस कीवर्ड के आने की संख्या को बचा लेंगे। दो कॉलम कीवर्ड_आईडी + कमेंट_आईडी मिलकर एक अद्वितीय या सीधे प्राथमिक कुंजी बनाते हैं।
  • डेटाबेस से सभी टिप्पणियों को पुनः प्राप्त करें
  • सभी टिप्पणियों को पार्स करें और गैर-वर्णों (या अन्य सीमाओं) से विभाजित करें
  • इन प्रविष्टियों को अपनी तालिकाओं में लिखें

उदाहरण

आपकी निम्नलिखित दो टिप्पणियाँ हैं:

अब आप उन दोनों पर पुनरावृति करेंगे और उन्हें गैर-वर्णों से विभाजित करेंगे। इसके परिणामस्वरूप प्रत्येक पाठ के लिए निम्न लोअरकेस शब्द होंगे:- पहला पाठ:हैलो, कैसे, हैं, आप- दूसरा पाठ:वाह, हैलो, मेरा, नाम, है, स्टीफ़न

जैसे ही आपने इस पाठ में से किसी एक को पार्स किया है, आप इसे पहले से ही डेटाबेस में फिर से सम्मिलित कर सकते हैं। मुझे लगता है कि आप RAM पर 100,000 टिप्पणियाँ लोड नहीं करना चाहते हैं।

तो यह इस प्रकार होगा:

  • पहले टेक्स्ट को पार्स करें और ऊपर दिए गए कीवर्ड प्राप्त करें
  • प्रत्येक कीवर्ड को टैबके में लिखें keywords अगर यह अभी तक नहीं है
  • कीवर्ड से टिप्पणी के लिए एक संदर्भ सेट करें (keywords_comments ) और गिनती को सही ढंग से सेट करें (हमारे उदाहरण में प्रत्येक शब्द प्रत्येक पाठ में केवल एक बार आता है, आपको उसे गिनना होगा)।
  • दूसरा पाठ पार्स करें

मामूली सुधार

एक बहुत ही आसान सुधार जो आपको संभवतः 100,000 टिप्पणियों के लिए उपयोग करना होगा, एक गणना चर . का उपयोग करना है या एक नया फ़ील्ड जोड़ें has_been_analyzed प्रत्येक टिप्पणी के लिए। फिर आप उन्हें डेटाबेस से टिप्पणी द्वारा टिप्पणी पढ़ सकते हैं।

मैं आमतौर पर गिनती चर का उपयोग करता हूं जब मैं डेटा को खंडवार पढ़ता हूं और जानता हूं कि डेटा उस दिशा से नहीं बदल सकता है जो मैं शुरू कर रहा हूं (यानी यह उस बिंदु तक लगातार रहेगा जो मैं वर्तमान में हूं)। फिर मैं कुछ ऐसा करता हूं:

SELECT * FROM table ORDER BY created ASC LIMIT 0, 100
SELECT * FROM table ORDER BY created ASC LIMIT 100, 100
SELECT * FROM table ORDER BY created ASC LIMIT 200, 100
…

विचार करें कि यह केवल तभी काम करता है जब हम निश्चित रूप से जानते हैं कि किसी स्थान पर जोड़ने के लिए कोई तिथियां नहीं हैं, हमें लगता है कि हम पहले ही पढ़ चुके हैं। उदा. DESC . का उपयोग करना काम नहीं करेगा, क्योंकि डेटा डाला जा सकता है। तब पूरा ऑफसेट टूट जाएगा और हम एक लेख को दो बार पढ़ेंगे और नया लेख कभी नहीं पढ़ेंगे।

यदि आप यह सुनिश्चित नहीं कर सकते हैं कि बाहरी गणना चर एक समान रहता है, तो आप विश्लेषण किया गया एक नया फ़ील्ड जोड़ सकते हैं जिसे आप कमेंट पढ़ते ही सही पर सेट कर देते हैं। फिर आप हमेशा देख सकते हैं कि कौन सी टिप्पणियाँ पहले ही पढ़ी जा चुकी हैं और कौन सी नहीं। एक SQL क्वेरी तब इस तरह दिखेगी:

SELECT * FROM table WHERE analyzed = 0 LIMIT 100 /* Reading chunks of 100 */

यह तब तक काम करता है जब तक आप वर्कलोड (एकाधिक क्लाइंट या थ्रेड के साथ) को समानांतर नहीं करते हैं। अन्यथा आपको यह सुनिश्चित करना होगा कि रीडिंग + सेटिंग ट्रू एटमर (सिंक्रनाइज़्ड) है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .नेट कोर 2.0 डाटाबेस पहला दृष्टिकोण स्कैफोल्ड-मैसकल डीबी का डीबीकॉन्टेक्स्ट

  2. MySQL-पायथन इंस्टॉल - अंडा नहीं बना सका

  3. MySQL त्रुटि 2006:mysql सर्वर चला गया है

  4. MySQL पर दो तिथियों के बीच अंतर के दिनों की संख्या कैसे प्राप्त करें?

  5. मैं एक mysql_query में दो प्रश्न कैसे रख सकता हूं?