2010-11-17 11 views
5

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

मैं एक ठोस उदाहरण से सीखना चाहता हूं, लेकिन मैं किसी को भी आर्किटेक्ट करने के बारे में चर्चा करने में सक्षम नहीं हूं, उदाहरण के लिए, कॉच डीबी/रेडिस/मोंगोडीबी/रीक/आदि का उपयोग करने वाला ब्लॉग।

कई सवाल है जो मुझे लगता है कि महत्वपूर्ण हैं कर रहे हैं:

  1. कौन सा डेटा के टुकड़े denormalised किया जाना चाहिए (उदाहरण के लिए टैग शायद क्या उपयोगकर्ताओं के बारे में दस्तावेज़ के साथ रहते हैं, लेकिन)
  2. आप कैसे लिंक करूं दस्तावेजों के बीच?
  3. कुल देखा गया, जो (जैसे एक ब्लॉग सूचकांक के रूप में)

उत्तर

0

रयान बेट्स mongoid के बारे में कुछ हफ़्ते पहले एक स्क्रीनकास्ट बनाया और वह एक ब्लॉग के उदाहरण का उपयोग करता है छँटाई की आवश्यकता होती है विशेष रूप से बनाने के लिए सबसे अच्छा तरीका क्या है आवेदन: http://railscasts.com/episodes/238-mongoid यह शुरू करने के लिए यह एक अच्छी जगह हो सकती है।

3

सबसे पहले मुझे लगता है कि आप सूची से रेडिस को हटाना चाहते हैं क्योंकि यह एक दस्तावेज़ स्टोर के बजाय एक महत्वपूर्ण मूल्य स्टोर है। Riak भी एक महत्वपूर्ण मूल्य स्टोर है, लेकिन आप Ripple जैसे लाइब्रेरी के साथ एक दस्तावेज़ स्टोर हो सकते हैं।

संक्षेप में, दस्तावेज़ की दुकान के साथ एक आवेदन मॉडल करने के लिए यह पता लगाने की है:

  1. कौन-सा डेटा अपने आप ही दस्तावेज़ में संग्रहीत करने और किसी अन्य दस्तावेज़ होता है इसे करने के लिए संबंधित हैं। यदि वह दस्तावेज़ कई अन्य दस्तावेजों द्वारा उपयोग किया जा रहा है, तो इसे अपने दस्तावेज़ में मॉडल करने का अर्थ होगा। आपको दस्तावेजों से पूछताछ के बारे में भी विचार करना चाहिए। यदि आप अक्सर पूछताछ करने जा रहे हैं, तो इसे अपने दस्तावेज़ में संग्रहीत करना एक अच्छा विचार हो सकता है क्योंकि आपको एम्बेडेड दस्तावेज़ पर क्वेरी करना मुश्किल लगेगा।
    • उदाहरण के लिए, मान लें कि आपके पास एकाधिक ब्लॉग उदाहरण हैं, एक ब्लॉग और आलेख अपने दस्तावेज़ में होना चाहिए, हालांकि ब्लॉग दस्तावेज़ के अंदर एक आलेख एम्बेड किया जा सकता है।
    • एक और उदाहरण उपयोगकर्ता और भूमिका है। इनके लिए एक अलग दस्तावेज़ होने का अर्थ है। मेरे मामले में मैं अक्सर उपयोगकर्ता से पूछताछ करता हूं और यदि यह अपने दस्तावेज़ के रूप में अलग किया जाता है तो यह आसान होगा।
  2. आप किसी अन्य दस्तावेज़ के अंदर कौन सा डेटा स्टोर (एम्बेड) करना चाहते हैं। यदि वह दस्तावेज़ केवल एक दस्तावेज़ से संबंधित है, तो यह किसी अन्य दस्तावेज़ के अंदर स्टोर करने का एक अच्छा विकल्प हो सकता है।

    • टिप्पणियाँ कभी कभी किसी अन्य दस्तावेज़

    { article : { comments : [{ content: 'yada yada', timestamp: '20/11/2010' }] } }

    एक और चेतावनी आप पर विचार करना चाहते हैं कितना बड़ा एम्बेडेड दस्तावेज़ का आकार क्योंकि MongoDB में हो जाएगा अंदर एम्बेड करने के लिए और अधिक समझ बनाने होगा , एम्बेडेड दस्तावेज़ का अधिकतम आकार 5 एमबी है।

  3. क्या डेटा एक सादा ऐरे होना चाहिए। ई।छ:
    • टैग मतलब होगा एक सरणी के रूप में जमा किया जाना है। { article: { tags: ['news','bar'] } }
    • या यदि आप कई भूमिकाएं { user: { role_ids: [1,2,3]}}

के साथ कई आईडी, यानी उपयोगकर्ता संग्रहीत करना चाहते हैं इस दस्तावेज़ की दुकान के साथ मॉडलिंग के बारे में एक संक्षिप्त सिंहावलोकन है। सौभाग्य।

+0

बेहतर समझने के लिए: आप टिप्पणी के अंदर उपयोगकर्ता जोड़ना चाहते हैं, मुझे लगता है कि आप denormalize और दोनों उपयोगकर्ता नाम और हर टिप्पणी के अंदर उपयोगकर्ता आईडी जोड़ने के लिए है। इस तरह आप उपयोगकर्ताओं को पूछे बिना ब्लॉग टिप्पणियां भी दिखा सकते हैं, लेकिन आप किसी दिए गए उपयोगकर्ता द्वारा टिप्पणी की गई सभी ब्लॉग पोस्ट को आसानी से पुनर्प्राप्त कर सकते हैं। क्या यह सही है? – Uberto

+0

वास्तव में नहीं। आप केवल टिप्पणी दस्तावेज़ में उपयोगकर्ता आईडी जोड़ सकते हैं। लेकिन यह आप पर निर्भर करता है कि आप डेटा को कैसे व्यवस्थित करना चाहते हैं। मैं आम तौर पर टिप्पणी में उपयोगकर्ता आईडी और उपयोगकर्ता ईमेल डालता हूं क्योंकि मैं गुरुत्वाकर्षण उत्पन्न करना चाहता हूं। –

1
  1. निर्णय लेना जो वस्तुओं स्वतंत्र होना चाहिए और जो अन्य वस्तुओं के हिस्से के रूप एम्बेड किए जाने चाहिए ज्यादातर संतुलन पढ़ने/लिखने प्रदर्शन/प्रयास का मामला है - एक बच्चे वस्तु स्वतंत्र है, तो अद्यतन करने यह केवल एक दस्तावेज़ को बदलने का मतलब है लेकिन जब मूल वस्तु को पढ़ते हैं तो आपके पास केवल आईडी हैं और डेटा प्राप्त करने के लिए अतिरिक्त प्रश्नों की आवश्यकता होती है। यदि बच्चा ऑब्जेक्ट एम्बेड किया गया है, तो जब आप मूल दस्तावेज़ पढ़ते हैं तो सभी डेटा ठीक होते हैं, लेकिन परिवर्तन करने के लिए उस ऑब्जेक्ट का उपयोग करने वाले सभी दस्तावेज़ों को ढूंढना आवश्यक होता है।

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

  3. क्वेरी क्षमताओं प्लेटफार्मों के बीच एक बहुत भिन्न हो तो वहाँ यह कैसे दृष्टिकोण के लिए एक स्पष्ट जवाब नहीं है। हालांकि एक सामान्य नियम के रूप में आप आम तौर पर दस्तावेज़ को संग्रहीत करने और एसक्यूएल के साथ-साथ विज्ञापन-प्रसार क्वेरी चलाने के बजाए दस्तावेज़ लिखने के बजाय विचार/अनुक्रमणिका सेट अप करेंगे।

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