2013-01-22 17 views
7

मैं एक एंड्रॉइड मोबाइल ऐप विकसित कर रहा हूं जिसमें संभावित रूप से बहुत से उपयोगकर्ता हैं (चलो लगभग 1 मिलियन)। ये उपयोगकर्ता अन्य उपयोगकर्ताओं (जैसे ट्विटर) का अनुसरण कर सकते हैं। ऐप रिमोट आरईएसटी बैकएंड के माध्यम से उपयोगकर्ता डेटा को सिंक करता है। उपयोगकर्ता डेटा स्वयं दस्तावेज़ उन्मुख डेटाबेस में जारी रहता है (मेरे मामले में यह एक मोंगोडीबी है)।MongoDB: MongoDB में ट्विटर-शैली अनुयायियों/निम्नलिखित संबंध मॉडल को कैसे डिज़ाइन किया जाए?

वर्तमान में मैं अपने अनुयायी और निम्नलिखित संबंधों सहित उपयोगकर्ता मॉडल को डिजाइन करने का सबसे अच्छा तरीका पूछता हूं। पहला विचार उपयोगकर्ता दस्तावेज़ के भीतर संबंधों को एम्बेड करना था।

उदाहरण उपयोगकर्ता दस्तावेज़:

{ 
"_id":"50fd6bb530043e3c569af288", 
"name":"Marsha Garcia", 
"follower"["50fd6bb530043e3c569af287","50fd6bb530043e3c569af289","50fd6bb530043e3c569af28c"], 
"following":["70fd6bb530043e3c569af289","10fd6bb530043e3c569af222","89fd6bb530043e3c569af45o"] 
} 

सकारात्मक बात यह है कि अनुवर्ती/निम्नलिखित संबंधों को पहले से ही उपयोगकर्ता के साथ शामिल हो रहे हैं। हालांकि मान लें कि कोई उपयोगकर्ता लगभग 100,000 या उससे अधिक अन्य उपयोगकर्ताओं का अनुसरण करता है। फिर दस्तावेज़ का आकार बहुत बड़ा हो जाएगा। अगर मैं अपने मोबाइल ऐप में आरईएसटी सेवा के माध्यम से इस उपयोगकर्ता ऑब्जेक्ट को लोड करता हूं तो इसमें कुछ समय लग सकता है। इसके अलावा सबसे खराब स्थिति में उपयोगकर्ता दस्तावेज़ MongoDb 16MB दस्तावेज़ सीमा से अधिक हो सकता है।

इसलिए मेरा दूसरा विचार अनुयायियों को मॉडल करना और अधिक क्लासिक तरीके से संबंधों का पालन करना था: प्रत्येक उपयोगकर्ता के निम्नलिखित संबंधों वाला एक अतिरिक्त दस्तावेज़।

उदाहरण 'उपयोगकर्ता संबंध' दस्तावेज़:

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

मैं किसी भी विचार, मेरी मॉडलिंग समस्या के बारे में अनुभवों की सराहना करता हूं। शायद किसी के पास भी एक बेहतर समाधान दृष्टिकोण है।

Thx बहुत पहले से ही।

+0

एक और विचार पर, आप मोबाइल डिवाइस पर 1 मिलियन अनुयायी सूची कैसे प्रदर्शित कर रहे हैं? –

+3

बेशक मैं उन्हें एक साथ दिखाने के लिए नहीं जा रहा हूं।शायद मैं एक पेजिंग तंत्र का उपयोग करने जा रहा हूँ। जैसे पहले 50 अनुयायियों को लोड करें। यदि उपयोगकर्ता अगले 50 अनुयायियों को और अधिक लोड देखना चाहता है। – user1425635

उत्तर

12
1. collection users: 
- userid 
- username 
- userpass 
- other user specific info user 


2. collection following: 
- userid 
- [array of followingid] 


3. collection followed: 
- userid 
- [array of followedid] 
4. messages_relation collection: 

- userid 
- messageid 
- time 

5. messages_text: 
- messageid 
- text 
+0

thx बुरा नहीं है। इस तरह से मैं बड़े आकार के उपयोगकर्ता दस्तावेजों से बचूंगा। हालांकि विशेष मामलों में मेरे पास अभी भी बड़े 'अनुवर्ती' दस्तावेज हो सकते हैं, लेकिन मुझे कम बुराई चुननी है;) – user1425635

+0

यह सामान्य स्कीमा है। यदि आपके पास कई उपयोगकर्ता होंगे, तो आपको कुछ संग्रहों के लिए शेडिंग बनाना होगा। –

+0

मैंने अभी तक मोंगोडीबी शेरिंग अवधारणा के बारे में बहुत कुछ नहीं पढ़ा है। लेकिन मुझे लगता है कि मुझे अब करना होगा;) – user1425635

0

मैं एक सीएमएस टिप्पणी भंडारण करता है, तो आप पहले से ही नहीं है पर this प्रलेखन पढ़ना प्रारंभ होगी। हालांकि यह टिप्पणियों के लिए है, वही सामान्य समस्या मौजूद है - जहां आप एक ही दस्तावेज़ में सभी टिप्पणियां संग्रहीत नहीं कर सकते हैं (आपके मामले में, अनुयायियों/निम्नलिखित)।

या तो हाइब्रिड दृष्टिकोण (जो कम दस्तावेज़ों का उपयोग करता है और एक दस्तावेज़ के अंदर कुछ संबंधों को स्टोर करता है) या जिस दृष्टिकोण का आप वर्णन कर रहे हैं उसे अच्छी तरह से काम करना चाहिए।

मैं पुनर्प्राप्ति के प्रदर्शन की जांच करने के लिए एक साधारण पीओसी बनाने का सुझाव भी दूंगा। कुछ परिणामों को कैश करने या उन्हें प्रीकंपाइल करने का अर्थ हो सकता है। आम तौर पर, यह इस तरह की प्रणालियों में ठीक है अगर सब कुछ सभी उपयोगकर्ताओं के लिए तत्काल संगत नहीं है (जैसे अनुयायी गिनती तुरंत सही हो)।

वहाँ की संभावना एक आदर्श समाधान नहीं है, और अनुकूलतम प्रदर्शन के लिए (जैसे कि कैसे एक उपयोगकर्ता और अनुयायियों के रूप में अनुयायियों की संख्या बढ़ जाती है, उदाहरण के लिए बदल सकते हैं नियंत्रित किया जाता है) में कुछ समाधान की आवश्यकता हो सकती है।

+0

धन्यवाद प्रलेखन लिंक सहायक था। आप सही हैं शायद कोई सही समाधान नहीं है। मुझे लगता है कि कुछ परीक्षण डेटा के साथ विभिन्न दृष्टिकोणों को आजमाएं। शायद मोंगो डीबी प्रक्षेपण और टुकड़ा तंत्र भी सहायक होगा। – user1425635

-1

आप flockDB डेटाबेस को जांचना चाहते हैं जो आसन्नता सूचियों को संग्रहीत करता है। https://github.com/twitter/flockdb