मैं एक ऐसी प्रणाली बना रहा हूं जो एसएनएमपी का उपयोग करके (शायद) 5 मिनट के अंतराल पर सीपीयू उपयोग, डिस्क उपयोग, तापमान आदि जैसे अलग-अलग मैट्रिक्स पर डेटा के लिए उपकरणों को प्रदूषित करता है। अंतिम लक्ष्य समय-श्रृंखला ग्राफ़ के रूप में सिस्टम के एक उपयोगकर्ता को विज़ुअलाइज़ेशन प्रदान करना है।
मैंने अतीत में RRDTool का उपयोग किया है, लेकिन इसे अस्वीकार कर दिया क्योंकि कैप्चर किए गए डेटा को अनिश्चित काल तक संग्रहीत करना मेरे प्रोजेक्ट के लिए महत्वपूर्ण है, और मैं कैप्चर किए गए डेटा के लिए उच्च स्तर और अधिक लचीली पहुंच चाहता हूं। तो मेरा प्रश्न वास्तव में है:
बेहतर क्या है, एक संबंधपरक डेटाबेस (जैसे MySQL या PostgreSQL) या एक गैर-संबंधपरक या NoSQL डेटाबेस (जैसे MongoDB या Redis) प्रदर्शन के संबंध में जब ग्राफिंग के लिए डेटा क्वेरी करता है।
संबंधपरक
एक संबंधपरक डेटाबेस को देखते हुए, मैं एक data_instances
तालिका का उपयोग करूंगा , जिसमें निम्नलिखित क्षेत्रों के साथ, सभी उपकरणों के लिए मापी जा रही प्रत्येक मीट्रिक के लिए कैप्चर किए गए डेटा का हर उदाहरण संग्रहीत किया जाएगा:
खेत: id
fk_to_device
fk_to_metric
metric_value
timestamp
जब मैं किसी विशेष डिवाइस पर किसी विशेष मीट्रिक के लिए एक ग्राफ खींचना चाहता हूं, तो मुझे इस विलक्षण तालिका को अन्य उपकरणों को फ़िल्टर करने की क्वेरी करनी होगी , और इस उपकरण के लिए अन्य मैट्रिक्स का विश्लेषण किया जा रहा है:
SELECT metric_value, timestamp FROM data_instances
WHERE fk_to_device=1 AND fk_to_metric=2
इस तालिका में पंक्तियों की संख्या होगी:
d * m_d * f * t
जहां d
की संख्या है उपकरणों , m_d
संचयी है मैट्रिक्स की संख्या , सभी उपकरणों के लिए रिकॉर्ड किया जा रहा f
है आवृत्ति , जिस पर डेटा के लिए सर्वेक्षण में शामिल किया जाता है और t
की कुल राशि है समय प्रणाली डेटा इकट्ठा करने गया है।
एक उपयोगकर्ता के लिए एक वर्ष के लिए हर 5 मिनट में 3 उपकरणों के लिए 10 मीट्रिक रिकॉर्ड करने के लिए, हमारे पास केवल 5 मिलियन रिकॉर्ड होंगे।
इंडेक्स
अनुक्रमित किए बिना fk_to_device
और fk_to_metric
इस लगातार विस्तार तालिका को स्कैन करने में बहुत अधिक समय लगेगा। अतः उपर्युक्त क्षेत्रों को और भी timestamp
(स्थानीयकृत अवधियों के साथ रेखांकन बनाने के लिए) एक आवश्यकता है।
गैर-संबंधपरक (NoSQL)
MongoDB में एक संग्रह की अवधारणा है , तालिकाओं के बिना इन्हें सेटअप के बिना प्रोग्रामेटिक रूप से बनाया जा सकता है। इनके साथ मैं प्रत्येक डिवाइस के लिए डेटा के भंडारण को विभाजित कर सकता हूं, या यहां तक कि प्रत्येक डिवाइस के लिए दर्ज प्रत्येक मीट्रिक भी।
मुझे NoSQL के साथ कोई अनुभव नहीं है और पता नहीं है कि क्या वे किसी भी क्वेरी प्रदर्शन को बढ़ाने वाले फीचर जैसे कि इंडेक्सिंग प्रदान करते हैं, हालांकि पिछले पैराग्राफ में संरचना में अधिकांश पारंपरिक संबंधपरक क्वेरी काम करने का प्रस्ताव है जिसके द्वारा डेटा NoSQL के तहत संग्रहीत किया जाता है।
दुविधा में पड़ा हुआ
सही अनुक्रमण के साथ एक संबंधपरक समाधान वर्ष के भीतर क्रॉल को कम करेगा? या NoSQL दृष्टिकोण के संग्रह आधारित संरचना (जो संग्रहीत डेटा के मेरे मानसिक मॉडल से मेल खाती है) एक ध्यान देने योग्य लाभ प्रदान करती है?