एन-ग्राम द्वारा अनुक्रमित डेटा को संग्रहीत करने के लिए कुशल डेटाबेस मॉडल


12

मैं एक ऐसे अनुप्रयोग पर काम कर रहा हूँ जिसके लिए एक बड़े पाठ कोष में मौजूद n-gr के एक बहुत बड़े डेटाबेस को बनाने की आवश्यकता है।

मुझे तीन कुशल संचालन प्रकारों की आवश्यकता है: लुकअप और प्रविष्टि को n-gram द्वारा अनुक्रमित किया गया है, और उन सभी n-ग्रामों के लिए क्वेरी करना जिनमें उप-n-ग्राम शामिल हैं।

यह मुझे लगता है कि डेटाबेस को एक विशाल दस्तावेज़ पेड़ होना चाहिए, और दस्तावेज़ डेटाबेस, जैसे कि मोंगो, को अच्छी तरह से काम करने में सक्षम होना चाहिए, लेकिन मैंने कभी भी उन पैमाने का उपयोग नहीं किया है।

स्टैक एक्सचेंज प्रश्न प्रारूप को जानने के बाद, मैं स्पष्ट करना चाहूंगा कि मैं विशिष्ट प्रौद्योगिकियों पर सुझाव नहीं मांग रहा हूं, बल्कि एक प्रकार का डेटाबेस जिसे मैं कुछ इस तरह लागू करने के लिए देख रहा हूं।


2
मुझे लगता है कि जिस संरचना को आप लागू करना चाहते हैं, वह "ट्राइ" है - क्या आप एक डीबी पा सकते हैं जो कुशलता से उस संरचना के साथ काम करता है, या अपनी पसंद के आरडीबीएमएस में अपना खुद का रोल करने की आवश्यकता है जो मैं नहीं कह सकता।
नील स्लेटर

जवाबों:


9

ल्यूसिन NGramTokenizer देखें

क्या आप वाकई लूसिन या इसी तरह की अनुक्रमण तकनीकों का उपयोग नहीं कर सकते हैं?

उल्टे सूचकांक केवल एक बार एन-ग्राम को स्टोर करेंगे, फिर बस दस्तावेज आईडी जिसमें एनग्राम होते हैं; वे इसे अत्यधिक अनावश्यक कच्चे पाठ के रूप में संग्रहीत नहीं करते हैं।

जैसे कि आपके क्वेरी सब-एन-ग्राम में एनग्राम खोजने के लिए, मैं प्रेक्षित एनग्राम पर एक इंडेक्स का निर्माण करेगा, जैसे कि एक दूसरे ल्यूसिन इंडेक्स का उपयोग करना, या किसी अन्य स्थानापन्न इंडेक्स जैसे कि ट्राइ या प्रत्यय ट्री। यदि आपका डेटा गतिशील है, तो संभवतः ल्यूसीन एक उचित विकल्प है, जो आपके एन-ग्राम को खोजने के लिए वाक्यांश प्रश्नों का उपयोग करता है।


3

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

3 तालिकाएँ बनाएँ:

  1. दस्तावेज़ तालिका, कॉलम: आईडी / दस्तावेज़
  2. एन-ग्राम तालिका: n_gram_id / n_gram
  3. एन-ग्राम और दस्तावेजों के बीच मानचित्रण: document_id / n_gram_id

एन-ग्राम टेबल / n_gram स्ट्रिंग और मैपिंग टेबल / n_gram_id पर इंडेक्स बनाएं, प्राथमिक कुंजियों को भी डिफ़ॉल्ट रूप से अनुक्रमित किया जाएगा।

आपके कार्य कुशल होंगे:

  1. दस्तावेज़ का सम्मिलन: बस सभी एन-ग्राम निकालें और दस्तावेज़ तालिका और एन-ग्राम तालिका में डालें
  2. इंडेक्स के समर्थन से in_gram के लिए लुकअप त्वरित होगा
  3. सभी एन-ग्राम के लिए क्वेरी जिसमें एक उप-एन-ग्राम होता है: 2 चरणों में - केवल सभी एन-ग्राम के सूचकांक के आधार पर क्वेरी जिसमें 2 टेबल से उप-एन-ग्राम होता है। फिर - इनमें से प्रत्येक एन-ग्राम के लिए सभी संबंधित दस्तावेजों को पुनः प्राप्त करें।

आपको इन सभी ऑपरेशनों को प्राप्त करने के लिए जॉइन का उपयोग करने की भी आवश्यकता नहीं है, इसलिए इंडेक्स बहुत मदद करेंगे। इसके अलावा अगर डेटा एक मशीन में सूट नहीं करेगा - आप शार्किंग योजना को लागू कर सकते हैं, जैसे कि एक सर्वर पर शुरू किया गया n_grams या किसी अन्य या अन्य उपयुक्त योजना पर oz।

इसके अलावा आप MongoDB का उपयोग कर सकते हैं, लेकिन मुझे यकीन नहीं है कि वास्तव में आपको अनुक्रमण योजना को लागू करने की आवश्यकता कैसे है। MongoDB के लिए आपको मुफ्त में शार्डिंग स्कीम मिलेगी क्योंकि यह पहले से निर्मित है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.