2012-05-15 13 views
11

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

मैं वास्तव में कॉच डीबी का उपयोग करना चाहता हूं (मुख्य रूप से ठंडा _changes फ़ीड और मानचित्र/विचारों को कम करने के कारण)। मैं ऐप को शुद्ध सोचैप के रूप में लागू करने के बारे में सोच रहा था, लेकिन मुझे अनुमति मॉडल के साथ परेशानी हो रही है। AFAIK, कॉच डीबी में कोई प्रति-दस्तावेज़ अनुमतियां नहीं हैं और यह आमतौर पर प्रति-उपयोगकर्ता डेटाबेस और प्रतिकृति का उपयोग करके लागू की जाती है।

लेकिन जब विभिन्न उपयोगकर्ताओं के बीच बहुत अधिक ओवरलैप होता है, तो यह बहुत अधिक ओवरहेड पेश करेगा ... सामग्री को सभी जगहों पर दोहराया जाएगा और कई डेटाबेस में डुप्लिकेट किया जाएगा। मुझे इस दृष्टिकोण की लालित्य पसंद है, लेकिन भारी ओवरहेड सिर्फ एक डीलब्रेकर की तरह लगता है ... (मान लीजिए कि मेरे पास 50 उपयोगकर्ता हैं और वे सभी एक ही डेटा देखते हैं ...)।

कोई विचार, उस पर कैसे, कृपया? दूसरा तरीका?

उत्तर

7

आप CouchDB Authorization on a Per-Database Basis में वर्णित अनुसार पढ़ने की अनुमति लागू कर सकते हैं।

लेखन अनुमतियों के लिए आप CouchDB The Definitive Guide - Security पर वर्णित सत्यापन कार्यों का उपयोग कर सकते हैं।

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

इस डिज़ाइन का उपयोग करके आप प्रत्येक प्रोजेक्ट के लिए उपयोगकर्ता या उपयोगकर्ताओं (समूह) के समूह को अधिकृत कर सकते हैं।

+0

दुर्भाग्यवश प्रति-परियोजना अनुमति मॉडल मेरी आवश्यकताओं के लिए पर्याप्त नहीं है (मुझे कुछ उपयोगकर्ताओं को केवल एक निश्चित परियोजना से संबंधित कुछ आइटम देखने की आवश्यकता है)। –

4

(victorsavu3 के अलावा पहले से ही सुझाव दिया गया है) आपके ऐप और सोफे के बीच प्रॉक्सी में अपने पढ़ने के लेख को संभालने के अलावा, केवल दो अन्य विकल्प हैं जिन्हें मैं सोच सकता हूं।

सबसे पहले देखभाल नहीं करना है, डिस्क सस्ता है और डेटा की कई प्रतियां अनावश्यक नकल की तरह लग सकती हैं, लेकिन यह आपके आर्किटेक्चर को व्यापक रूप से सरल बनाती है और आपको लोड को संभालने के लिए आसान स्केलिंग जैसे कुछ स्वचालित लाभ मिलते हैं (अपने कुछ उपयोगकर्ताओं के डीबी को अन्य सर्वरों पर ले जाकर)।

दूसरा साझा डेटा एक अलग डीबी में विभाजित होना है। यह कभी-कभी उन चीज़ों को सीमित कर देगा जो आप विचारों में कर सकते हैं (उदाहरण के लिए "लिंक किए गए दस्तावेज़") लेकिन यह कई स्थितियों में एक बड़ा सौदा नहीं है।

+1

डिस्क स्पेस सस्ता है - हाँ, लेकिन मेरे मामले में अंत में परिणामस्वरूप * डिस्क स्पेस का उपयोग किया जा रहा था इसलिए मैंने इस सड़क पर जाने का फैसला नहीं किया। डीबी को विभाजित करना - मैंने इसके बारे में भी सोचा ... लेकिन मेरा मानना ​​है कि यह दृष्टिकोण कोचच बीबी के शीर्ष पर एक पतली सर्वर चलाने से अधिक जटिल बना देगा जो प्रमाणीकरण को संभालता है। –

+0

हाँ, यह भी एक अच्छा समाधान है। – smathy

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

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