2009-03-09 25 views
8

संग्रहित करने के लिए सर्वश्रेष्ठ डेटाबेस संरचना मैं यहां और Google दोनों का उत्तर खोजने की कोशिश कर रहा हूं, हालांकि मुझे कुछ पॉइंटर्स मिल गए हैं, मुझे समाधान नहीं मिला है।आरएसएस फ़ीड

आप एक डेटाबेस के साथ एक सरल आरएसएस रीडर है, तो आप फ़ीड भंडारण (यहां ग्राहकों के साथ काम कर अनदेखी) के लिए टेबल के एक जोड़े हो सकता है:

  • फ़ीड (फ़ीड आईडी, फ़ीड शीर्षक , फ़ीड यूआरएल)
  • आइटम (आइटम आईडी, फ़ीड आईडी, आइटम-शीर्षक, मद-सामग्री)

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

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

क्या ऐसा करने का कोई बेहतर तरीका है/क्या मैं इसे पूरी तरह से गलत तरीके से देख रहा हूं?

अद्यतन

जैसे जवाब के लिए दोनों के लिए धन्यवाद, ताकि आम सहमति होने के लिए है कि अंतरिक्ष पर बचत शायद काफी महत्वपूर्ण के बारे में चिंता करने के लिए नहीं है और अज्ञात मुद्दों के लिए क्षमता से नकार दिया हो जाएगा लगता है (डीबीआर द्वारा उल्लिखित)।

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

उत्तर

3

मैं सुझाव दूंगा कि आप विकास के इस चरण (डिजाइन, मुझे लगता है) पर फ़ीड डेटा की हर संभव प्रति को अनुकूलित करने का प्रयास न करें। इसे काम करने पर ध्यान केंद्रित करें और जब आप पूरा कर लेंगे, तो यदि आप कुछ प्रोफाइलिंग करते हैं और पाते हैं कि आप वास्तव में एक्स% स्टोरेज को सहेज सकते हैं, तो आप फीड के बीच लिंक या साझा डेटा का उपयोग करते हैं, केवल तभी और यदि एक्स बड़ा है आपके डीबी को अनुकूलित करने के लिए जितना समय लगेगा, उतना ही भुगतान करने के लिए पर्याप्त होगा, क्या मैं सुझाव दूंगा कि आप ऐसी कोई और उन्नत योजनाएं लागू करें।

3

जैसा कि असफ़ ने कहा, मैं कम से कम अब तक विभिन्न फ़ीड से आने पर डुप्लिकेट लेख संग्रहीत करने की चिंता नहीं करता। जटिलता यह जोड़ना होगा अंतरिक्ष तुम्हें बचा था की कुछ किलोबाइट लाभ नहीं होता ..

मुझे लगता है अगर आप सामग्री की एक SHA1 हैश ले, SELECT id FROM articles WHERE hash = $hash करते हैं और अगर कुछ मौजूद है, बस एक "article_content_id" है जो यदि सेट एक और पंक्ति पर लेख सामग्री को इंगित करता है ... लेकिन, यदि आपके पास दो लेख हैं:

id: 1 
title: My First Post! 
feed: Bobs site 
content: Hi! 
hash: abc 
link: no 
content_link_id: 

id:2 
title: My First Post! 
feed: Planet Randompeople Aggregator 
content: 
hash: abc 
content_link_id: 1 

..यह ठीक काम करता है, और आपने आलेख को डुप्लिकेट न करके 3 बाइट्स को सहेज लिया है (स्पष्ट रूप से अधिक लेख अधिक लंबा था)

.. लेकिन जब बॉब अपने आरएसएस फ़ीड में विज्ञापन जोड़ने का निर्णय लेता है, तो Hi! से सामग्री को बदलने का क्या होता है Hi!<p><img src='...'></p> पर - लेकिन ग्रह रैंडमपेल सभी छवियों को बाहर निकाल देता है। फिर फ़ीड आइटम को अपडेट करने के लिए, आपको प्रत्येक पंक्ति को जांचना होगा जो content_link_id - आपके द्वारा अपडेट किए जा रहे आलेख के विरुद्ध लिंक है, जांचें कि क्या नए आइटम के पास समान लेख है जो उसके खिलाफ लिंक है - यदि यह अलग है, तो आपको तोड़ना होगा लिंक और पुराने डेटा को लिंकिंग-आइटम पर कॉपी करें, फिर नई सामग्री को मूल आइटम पर कॉपी करें ..

ऐसा करने के लिए संभवतः तटस्थ तरीके हैं, लेकिन मेरा मुद्दा यह है कि यह बहुत जटिल हो सकता है, और आप पदों के बहुत सीमित सबसेट पर शायद कुछ किलोबाइट्स (मानते हैं कि डेटाबेस इंजन कोई संपीड़न नहीं करता है) को बचाता है ..

इसके अलावा, feeds और items की तालिका होने के कारण समझदार लगता है, और यह कितना है मेरे पास अन्य आरएसएस-स्टोरेज डेटाबेस हैं इसके साथ निपटाया ..

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