2015-06-12 11 views
8

के साथ डीबीआरआईफ़ का उपयोग करना मेरे पास ज्यामिति के 100 मिलियन दस्तावेज़ों के साथ एक संग्रह है।मोंगोडीबी और स्थानिक डेटा

मेरे पास प्रत्येक अन्य ज्यामिति से जुड़े समय डेटा के साथ दूसरा संग्रह है। यह 365 * 96 * 100 मिलियन या 3.5 ट्रिलियन दस्तावेज होगा।

आवश्यकतानुसार 100 मिलियन प्रविष्टियों (365 * 9 6) गुना अधिक स्टोर करने के बजाय, मैं उन्हें अलग-अलग संग्रह में रखना चाहता हूं और जोन/डीबीआरआईफ़/जो भी मैं मोंगोडीबी में कर सकता हूं, उसे एक प्रकार का संग्रह करना चाहता हूं।

सबसे पहले और सबसे महत्वपूर्ण, मैं भू-सूचना का उपयोग करके ज्यामिति संग्रह से GUID की एक सूची प्राप्त करना चाहता हूं। यह इसे 100 मिलियन से 5000 तक फ़िल्टर करेगा। फिर उन 5000 ज्यामिति guids का उपयोग करके मैं 5000 गोमेट्री और अतिरिक्त दिनांक मानदंडों के आधार पर 3.5 ट्रिलियन दस्तावेज़ों को फ़िल्टर करना चाहता हूं जो मैं निर्दिष्ट करता हूं और डेटा एकत्र करता हूं और औसत ढूंढता हूं। आपके द्वारा निर्दिष्ट दिनांक मानदंडों के लिए आपको 5000 ज्यामिति और 5000 औसत के साथ छोड़ा गया है।

यह मूल रूप से एक जॉइन है क्योंकि मैं इसे एसक्यूएल में जानता हूं, क्या यह मोंगोडीबी में संभव है और इसे 10 सेकंड से कम समय में बेहतर तरीके से किया जा सकता है।

स्पष्ट करें: जैसा कि मैं समझता हूं, डीबीआरएफ का उपयोग इस प्रकार किया जाता है, लेकिन मैंने पढ़ा है कि यह बिल्कुल कुशल नहीं है, और इस डेटा से निपटने के साथ कि यह एक अच्छा फिट नहीं होगा।

+1

डीबीआरएफ को मूल रूप से बहिष्कृत किया जाता है - यह आपके आवेदन में शामिल होने का एक बुरा विचार है जो आप यहां कर रहे हैं। ये ज्यामिति कितनी बड़ी हैं? –

+0

ज्यामिति प्रति 100 बाइट प्रति हैं, इसलिए उनके लिए एक सामान्यीकृत तरीके से दोहराया जा सकता है। साथ में सिर्फ ज्यामिति संग्रह 10 जीबी चलाता है, इसलिए इसमें शामिल होने के बिना 350400 जीबी अतिरिक्त स्पेस की आवश्यकता होगी। – ParoX

उत्तर

1

यदि आप एक ज्यामिति और से अपने समय श्रृंखला डेटा को एकसाथ से निपटने जा रहे हैं, तो उन्हें एक ही दस्तावेज़ में स्टोर करना समझ में आता है। 15 मिनट की वृद्धि में एक साल का डेटा हत्यारा नहीं है - और आप निश्चित रूप से प्रत्येक समय-श्रृंखला प्रविष्टि के लिए दस्तावेज़ नहीं चाहते हैं! चूंकि आप एक ही ज्यामिति दस्तावेज़ के रूप में काम करने के लिए इच्छित सभी चीजें पुनर्प्राप्त कर सकते हैं, यह एक बड़ी जीत है। ध्यान दें कि यह आपको गायब डेटा के लिए चीजों को छेड़छाड़ करने देता है। यदि आप 35040 स्लॉट सरणी में अनुक्रमणित करने के बजाय स्पैस हैं तो आप डेटा को अलग-अलग एन्कोड कर सकते हैं।

एक $ geo ज्यामिति डेटा के बड़े ढेर पर इंटरफेरक्ट्स हालांकि एक प्रदर्शन समस्या होगी। सुनिश्चित करें कि चीजों को गति देने के लिए आपके पास कुछ अनुक्रमण (जैसे 2dsphere) है।

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

बेशक, बहुत दूर जाकर ओवरहेड जोड़ता है। यदि आप 100 मिलियन ज्यामिति के घनत्व के लिए सिस्टम को सही ढंग से ट्यून कर सकते हैं, तो आप समय को बहुत कम कर सकते हैं। लेकिन वास्तव में समस्या के विनिर्देशों के साथ काम किए बिना, यह जानना मुश्किल है। एक सामान्य समाधान पर निर्भर होने के बजाय उस डेटा को शायद कुछ विशिष्ट प्रयोग की आवश्यकता होती है।

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