meteors - बड़ी मात्रा में आंकड़ों को संकलित करने के लिए डीडीपी बनाम स्ट्रेट मोंगोडीबी पहुंच




व्हाट अरे मेटॉर्स (2)

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

मेरी समझ यह है कि डीडीपी "क्लाइंट" को एक उल्का ऐप के साथ कनेक्ट करने के लिए प्रयोग किया जाता है (फीडबस की सदस्यता लेने के द्वारा जब उल्का डेटा परिवर्तनों को बढ़ा रहा है और आरपीसी को डेटा को उल्का में प्राप्त करने के लिए) और आम तौर पर एक "ग्राहक" को एक उपयोगकर्ता को स्कॉच किया जाता है ... इसलिए आंकड़ों के ब्रह्मांड की तुलना में डेटा सेट का आकार अपेक्षाकृत छोटा है (शिक्षक को 250 के दस्तावेज़ों में से 100 तक पहुंच हो सकती है)।

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

धन्यवाद! माइक


इस http://meteor.com/blog/2012/03/21/introducing-ddp पर आधारित

वितरित डेटा प्रोटोकॉल क्लाइंट-साइड जावास्क्रिप्ट डेवलपर्स का सामना करने वाली सबसे बड़ी समस्या हल करने के लिए डीडीपी एक मानक तरीका है: एक सर्वर-साइड डेटाबेस से पूछताछ, परिणाम ग्राहक को नीचे भेजते हैं, और फिर ग्राहक को जब भी डेटाबेस में कुछ भी बदलाव होता है, तब परिवर्तन कर देता है।

यह स्पष्ट है कि कोई नया डीडीपी ग्राहक, सभी डेटा प्राप्त करता है और फिर डेटा परिवर्तन के रूप में डेल्टा।

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

अगर आपको अधिक वास्तविक समय की आवश्यकता है, तो डीडीपी की संभावना अधिक है और प्रारंभिक सेटअप कठिनाई है


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

1 - Connect to DDP Server/Proxy (Long Polling now due to websocket issues with chrome)
2 - Establish a 'subscription'
3 - Fetch all data relevant to subscription (initial download)
4 - Subscription is complete, now the client will 'listen' for changes
5 - Any updates (remove/update/insert, etc) are sent down to the client

वास्तव में इस बिंदु पर एक सिंक सिस्टम नहीं है, जहां पुराने डेटा को ऑफ़लाइन रखा जाता है (स्थानीय स्टोरेज या अनुक्रमित डीबी या कुछ में) ताकि चरण 3 को बचाया जा सके और उस बिंदु से केवल सिंक हो सकें।

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