2013-03-09 7 views
28

मुझे मोंगो में अपना डेटा मॉडलिंग करने में सहायता चाहिए। मेरा अधिकांश अनुभव डीबी के संबंध में रहा है, मैं बस w/mongo शुरू कर रहा हूँ। मैं विभिन्न घटनाओं के लिए डेटा मॉडलिंग कर रहा हूँ।मोंगोडब: एकाधिक संग्रह या एक बड़ा संग्रह w/अनुक्रमणिका

  1. प्रत्येक 'ईवेंट' के साथ एक ही फ़ील्ड है।
  2. प्रत्येक 'ईवेंट' में सैकड़ों से लाखों दस्तावेज़/पंक्तियां
  3. घटनाएं गतिशील हैं, यानी नए आवश्यकतानुसार बनाए जाएंगे। यानी शायद एक नया 'ग्रीष्मकालीन ओलंपिक 2016' कार्यक्रम बनाएं।

संभावित रूप से सबसे महत्वपूर्ण, घटनाओं (सीआरयूडी ऑपरेशंस) से निपटने के दौरान उपयोगकर्ताओं को एक ईवेंट नाम निर्दिष्ट करना होगा।

मैं अब तक ऐसा करने के कुछ तरीके देख सकता हूं और मैं अपने डेटा मॉडल को 'गलत' तरीके से स्थापित करने में कोई बड़ी गलती नहीं करना चाहता हूं।

1) एक 'ईवेंट' संग्रह जिसमें सभी घटनाओं के लिए डेटा है। 'घटना' नाम पर सूचकांक। प्रश्न कुछ ऐसा दिखाई देगा:

db.events.find({event: 'Summer Olympics 2012'); 
{event: 'Summer Olympics 2012', attributes: [{name: 'joe smith', .... } 
{event: 'Summer Olympics 2012', attributes: [{name: 'jane doe', .... } 
{event: 'Summer Olympics 2012', attributes: [{name: 'john avery', .... } 
{event: 'Summer Olympics 2012', attributes: [{name: 'ted williams', .... } 

db.events.find({event: 'Summer Olympics 2013'}) 
{event: 'Summer Olympics 2016', attributes: [{name: 'steve smith', .... } 
{event: 'Summer Olympics 2016', attributes: [{name: 'amy jones', .... } 

2) सभी घटनाओं के नाम रखने के लिए प्रत्येक नए कार्यक्रम के लिए एक संग्रह, डब्ल्यू/संग्रह के साथ एक संग्रह। ईवेंट नाम पर कोई अनुक्रमणिका आवश्यक नहीं है क्योंकि प्रत्येक ईवेंट को एक अलग संग्रह में संग्रहीत किया जाता है।

// multiple collections, create new as needed 
db.summer2012.find() // get summer 2012 docs 

db.summer2016.find() // get summer 2016 docs 

//'events' collection 
db.events.find() // get all events that I would have collections for 
{name: 'summer2012', title: 'Summer Olympics 2012}; 
{name: 'summer2016', title: 'Summer Olympics 2016}; 

# 1 के लिए मैं एक छोटे से चिंतित है कि एक बार मैं रिकॉर्ड है कि 'घटना' प्रति lookups के लाखों लोगों के साथ 100 घटनाओं प्रत्येक तक पहुँचने के धीमी गति से हो जाएगा, भले ही घटनाओं में से एक केवल 500 दस्तावेज़ नहीं है हूँ।

# 2 के लिए मैं हर बार एक नया संग्रह बनाकर और यहां आने के साथ मोंगो मॉडल 'स्कर्टिंग' करता हूं?

कोई टिप्पणी/विचार स्वागत है क्योंकि मुझे वास्तव में कोई जानकारी नहीं है कि कौन सा बेहतर प्रदर्शन करने जा रहा है या यदि कोई या दूसरा मुझे सड़क पर और अधिक परेशानी में डाल देगा। मैंने चारों ओर देखा है (मोंगो की साइट शामिल है) मुझे वास्तव में ठोस जवाब नहीं मिल रहा है।

+0

ये विशेषताएं क्या हैं? लोग? तो क्या आपके पास घटनाएं x लोग हैं जो किसी ईवेंट में भाग लेते हैं? क्या वे लोग आपके सिस्टम में पंजीकृत हैं? यदि आप अभी मोंगोडीबी से शुरू कर रहे हैं, तो इसे देखें: https://code.google.com/p/morphia/wiki/QuickStart – rbento

+0

क्षमा करें बुरा उदाहरण :(। वास्तव में इसका भू-स्थानिक डेटा। तो मेरे पास एक एक्स होगा , प्रत्येक दस्तावेज़ के लिए वाई। उपयोगकर्ता आसानी से अपने वर्तमान स्थान के लिए मानचित्र पर पिन जोड़ सकते हैं और उस स्थान के बारे में कुछ मेटाडेटा संलग्न कर सकते हैं। यानी चित्र/वीडियो, शीर्षक, मौसम इत्यादि। तो कल्पना करें कि ओलंपिक में लोगों का एक समूह नया डेटा। लोग/स्थान एक ही अंतर। प्रश्न यह है कि प्रत्येक 'घटना' में लाखों दस्तावेज़ों को प्रत्येक अलग-अलग ईवेंट अपने संग्रह में लाइव होना चाहिए, या सभी घटनाओं के दस्तावेज़ों को उसी संग्रह में फेंकना चाहिए? 10 लाख दस्तावेज़ों या 10 के साथ एक संग्रह संग्रह जिनमें प्रत्येक के पास ~ 1 मिलियन डॉक्स हैं। – lostintranslation

+0

इसके अलावा बस मोंगो शुरू करना। मुझे लगता है कि मैनुअल का यह हिस्सा महत्वपूर्ण है: http://docs.mongodb.org/manual/applications/indexes/। यह मुझे इस छाप पर ले जाता है कि MongoDb डीबी डिजाइन, कर सकते हैं, और डीबी डिजाइन के समान होना चाहिए, और इसलिए, मैं चाहता था वर्ष पहले विकल्प के लिए pulmp, विशेष रूप से यदि आप "क्रॉस-इवेंट" quesries –

उत्तर

38

मोंगो डॉक्स यहाँ से: data modeling

कुछ स्थितियों में, आप बल्कि एक मात्र संग्रह में से कई संग्रह में जानकारी स्टोर करने के लिए चुन सकते हैं।

नमूना संग्रह लॉग पर विचार करें जो विभिन्न पर्यावरण और अनुप्रयोगों के लिए लॉग दस्तावेज़ संग्रहीत करता है। लॉग संग्रह में निम्नलिखित फॉर्म के दस्तावेज़ शामिल हैं:

{लॉग: "dev", ts: ..., info: ...} {log: "डीबग", ts: ..., info:। ..}

यदि दस्तावेजों की कुल संख्या कम है तो आप दस्तावेज़ों को संग्रह प्रकार से समूहबद्ध कर सकते हैं। लॉग के लिए, logs.dev और logs.debug जैसे विशिष्ट लॉग संग्रह बनाए रखने पर विचार करें। Logs.dev संग्रह में केवल देव पर्यावरण से संबंधित दस्तावेज़ होंगे।

आम तौर पर, बड़ी संख्या में संग्रहों में कोई महत्वपूर्ण प्रदर्शन दंड नहीं होता है और परिणाम बहुत अच्छे प्रदर्शन में होते हैं। विशिष्ट उच्च-थ्रूपुट बैच प्रोसेसिंग के लिए संग्रह बहुत महत्वपूर्ण हैं।

भी w/10gen लड़का बोला। वास्तव में बड़े संग्रह के लिए उन्होंने छोटे और विशिष्ट संग्रहों में अलग होने के लिए कई लाभ सूचीबद्ध किए। सभी डेटा के लिए एक संग्रह का उपयोग करने और इंडेक्स का उपयोग करने पर उनकी टिप्पणी थी:

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

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