मुझे डेटा सैंपल को विशाल सेंसर एरे से स्टोर करने के लिए एक समाधान (ऐप और डीबी) को लागू करने का काम सौंपा गया है। सरणी में वर्तमान में लगभग 20,000 सेंसर हैं, लेकिन यह जल्द ही बढ़ने वाला है, 100,000 सेंसर तक। प्रत्येक सेंसर प्रत्येक 10 सेकंड में एक डेटा नमूना भेजता है और प्रत्येक नमूना आकार में 28 बाइट्स होता है।
इस प्रकार योग करने से निम्न होता है:
- प्रति दिन प्रति संवेदक 8640 नमूने
- प्रति दिन प्रति सेंसर 242kB डेटा
- प्रति दिन 864 मिलियन नमूने
अब मैं सोच रहा था कि डेटा को संग्रहीत / पुनः प्राप्त करने का सबसे अच्छा तरीका क्या होगा? सॉफ़्टवेयर के पहले ही निर्दिष्ट किए जाने के बाद मैं इस प्रोजेक्ट से "जुड़ गया", इसलिए इसे SQL सर्वर का उपयोग करके Windows प्लेटफ़ॉर्म पर लागू करने की आवश्यकता है।
मेरे सिर में वर्तमान समाधान डेटा नमूनों को संग्रहीत करने के लिए दो तालिकाओं के साथ एक डीबी बनाना है। पहला दूसरे में एक इंडेक्स के एक प्रकार के रूप में कार्य करता है जो प्रति दिन प्रति संवेदक के आधार पर बाइनरी फ़ील्ड में एकत्रित नमूनों को संग्रहीत करता है:
Table 1:
RecordID - BigInt - Identity
SensorID - BigInt - Primary Key
Date - DateTime - Primary Key (yyyy-mm-dd)
Table 2:
RecordID - BigInt - Primary Key (from an insert into Table 1)
Data - Binary
मूल रूप से मैं सभी सेंसर से अस्थायी फाइलों (1 प्रति सेंसर) में नमूने लिखूंगा। प्रत्येक दिन के अंत में मैं तब तालिका 1 में एक प्रविष्टि बनाऊंगा, उत्पन्न RecordID का उपयोग करूँगा और तालिका 2 में डेटा फ़ील्ड में फ़ाइल को डंप कर दूंगा।
इस तरह मैं 864 मिलियन प्रविष्टियों के बजाय प्रति दिन तालिका में केवल 100,000 प्रविष्टियों के साथ समाप्त होता हूं। डेटा लैन या हाई स्पीड वैन पर उपलब्ध होना चाहिए, इसलिए पूरे दिन के आधार पर सेंसर डेटा की पुनर्प्राप्ति स्वीकार्य होगी।
हालाँकि सभी डेटा को संग्रहीत करना पड़ता है, लेकिन इसका अधिकांश हिस्सा शायद कभी नहीं पढ़ा जाएगा। अतः सारणी पर पठन की मात्रा, लिखावट से अधिक नहीं होगी।
मुझे पता है कि मैं डेटा फ़ाइलों के लिए पथ को संग्रहीत करके फ़ाइल सिस्टम का उपयोग करके कुछ लागू कर सकता हूं, लेकिन मैंने पढ़ा है कि SQL सर्वर एनटीएफएस को बेहतर बनाता है जबकि आपके बाइनरी फ़ील्ड कम से कम 256kB के लिए धन्यवाद हैं। (एक ग्रे क्षेत्र 256kB और 1MB के बीच मौजूद है, जबकि NTFS अब तक बाइनरी साइज़> 1 MB के लिए SQL सर्वर से बेहतर प्रदर्शन करता है)।
मैं भी अपनी फ़ाइलों में 100,000 सेंसर से डेटा संग्रहीत करने से थोड़ा सावधान हूं, क्योंकि फ़ाइल सिस्टम में किसी फ़ोल्डर में बड़ी मात्रा में फ़ाइलें होने से, या प्रत्येक फ़ोल्डर में कुछ फ़ाइलों के साथ एक जटिल ट्री संरचना होने से समस्या नहीं होती है, जबकि नहीं यहां तक कि फ़ाइल के विखंडन को भी ध्यान में रखते हुए।
क्या कोई मुझे ऊपर की कुछ व्यावहारिक सलाह / टिप्पणियां दे सकता है?
वहाँ स्पष्ट नुकसान है कि मैं में गिरने जा रहा हूँ?
नमूना डेटा काफी अच्छी तरह से संपीड़ित करता है। 242 kB फ़ाइल लगभग 85kB तक संपीड़ित होती है। लेकिन क्या मैं डेटाबेस स्तर पर कुछ प्रकार के संपीड़न को लागू कर सकता हूं ताकि नमूना डेटा (स्तंभ) स्वचालित रूप से संपीड़ित हो जाए?
SQL सर्वर इस परियोजना के लिए एक स्पष्ट रूप से गलत विकल्प है?
क्या मेरा डिज़ाइन दो तालिकाओं का है, या क्या मैं इसे एक ही तालिका में संयोजित कर सकता हूँ जो अभी भी दो तालिकाओं के रूप में "प्रदर्शनकारी" होगी?