_स्ट्रक्चर_ डेटा की बड़ी मात्रा को कैसे स्टोर करें?


9

आवेदन लगातार (लगभग हर सेकंड) उपयोगकर्ताओं के स्थान को इकट्ठा करेगा और उन्हें संग्रहीत करेगा।

यह डेटा संरचित है। एक रिलेशनल डेटाबेस में, इसे निम्नानुसार संग्रहीत किया जाएगा: | user | timestamp | latitude | longitude |

हालाँकि, बहुत अधिक डेटा है। प्रति उपयोगकर्ता प्रतिदिन 60 × 60 × 24 = 86,400 रिकॉर्ड होंगे। 1000 उपयोगकर्ताओं के साथ भी, इसका मतलब है कि प्रतिदिन 86,400,000 रिकॉर्ड।

और यह न केवल प्रतिदिन 86,400,000 रिकॉर्ड है। क्योंकि इन अभिलेखों को संसाधित किया जाएगा और उनमें से संसाधित संस्करण भी संग्रहीत किए जाएंगे। तो, उस संख्या को लगभग 2 से गुणा करें।

मैं डेटा का उपयोग करने की योजना कैसे बनाऊं

अनिवार्य रूप से, मैं आसान उपभोग के लिए स्थान डेटा के मोटे अनाज संस्करण बनाने की योजना बना रहा हूं। अर्थात्:

  1. प्राप्त डेटा wrt टाइमस्टैम्प को सॉर्ट करें।
  2. इस सूची में क्रम में यह निर्धारित करते हुए कि क्या स्थान काफी बदल गया है (यह जाँच कर कि अक्षांश और देशांतर कितना बदल गया है)
  3. उत्पादन में एकल प्रविष्टि के रूप में गैर महत्वपूर्ण स्थान परिवर्तन का प्रतिनिधित्व करते हैं (इसलिए, आउटपुट स्थान डेटा का एक मोटे अनाज वाला संस्करण है)।
  4. एक महत्वपूर्ण परिवर्तन के लिए एक भी बड़े अक्षांश और देशांतर परिवर्तन की आवश्यकता द्वारा, आउटपुट पर इस प्रक्रिया को बदल दें। इसलिए, पिछले आउटपुट से उत्पादित किया जाने वाला उत्पादन और भी अधिक दानेदार होगा।
  5. पूरी प्रक्रिया को आवश्यकतानुसार पूरा करें।
  6. प्रस्तावों की एक श्रृंखला को अलग करें और उन्हें उपयोगकर्ताओं को भेजें। इसके अलावा, बाद में खपत के लिए डेटा के सभी प्रस्तावों को स्टोर करें।

इस डेटा को संग्रहीत करने के लिए मुझे क्या उपयोग करना चाहिए? क्या मुझे रिलेशनल डेटाबेस या NoSQL समाधान का उपयोग करना चाहिए? इस एप्लिकेशन को डिज़ाइन करते समय मुझे किन अन्य बातों पर विचार करना चाहिए?


3
2000 रिकॉर्ड प्रति सेकंड की तरह यह शायद अप-टू-डेट SQL इंजन को परेशान नहीं करेगा। एक साधारण क्षमता की परीक्षा को एक कंसोल प्रोग्राम प्राप्त करना होगा जो कुछ फाइलों को यादृच्छिक रूप से लिखता है जो थोक लोड होते हैं।
केलथ

1
@ कैलेथ लेकिन क्या यह स्केलेबल है? जब उपयोगकर्ता आधार 100 गुना बढ़ता है तो क्या होगा?
उत्कर्ष

3
मापें कि आपका हार्डवेयर वर्तमान में क्या संभाल सकता है। मानों या कच्ची डिस्क की गति "सीपीयू" प्रसंस्करण के लिए अड़चन होने की संभावना है। इस सारे डेटा के साथ आपका क्या इरादा है ? यह आकार देना चाहिए कि आप भंडारण के लिए किस तकनीक का चयन करते हैं
केल

3
केल्थ बिल्कुल सही है। लाखों रिकॉर्ड एक आधुनिक डेटाबेस प्रणाली को नहीं धकेलते हैं। NoSQL स्टोर बहुत अधिक मात्रा में डेटा लिखने में बहुत तेज़ हैं, लेकिन अंततः आप कुछ ऐसा करना चाहते हैं जिसमें चीजों को फिर से पढ़ना शामिल है । आपको कितने पढ़ने की आवश्यकता होगी, यह निर्धारित करता है कि आपको किस तरह के स्टोर का उपयोग करना चाहिए।
किलन फ़ॉथ

3
एक अच्छा जवाब देने के लिए, हमें यह जानना होगा कि आप इस डेटा का उपयोग करने की योजना कैसे बनाते हैं । यदि आप तदर्थ प्रश्न चाहते हैं, तो डेटाबेस एक अच्छा विकल्प हो सकता है, जबकि फ़ाइल आधारित समाधान संभवतः संपूर्ण-डेटा विश्लेषण के लिए बेहतर होगा। मतदान बंद।
kdgregory

जवाबों:


9

इस डेटा को संग्रहीत करने के लिए कुछ विकल्प:

  1. संदेश कतार (संभवतः वितरित), अपाचे काफ्का की तरह

यह डेटा की एक धारा को लिखने और पढ़ने के लिए अनुकूलित किया जाएगा। यह एक आसान से प्रक्रिया प्रारूप में डेटा धाराओं को इकट्ठा करने के लिए आदर्श है, लेकिन यह आम तौर पर इसकी संपूर्णता में धारा को पढ़ने के अलावा नहीं छोड़ा जा सकता है। तो, यह या तो अभिलेखीय उद्देश्यों के लिए होगा, या प्रसंस्करण परत के रास्ते पर एक मध्यवर्ती कदम होगा।

  1. संबंधपरक डेटाबेस

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

  1. वितरित NoSQL डेटाबेस, जैसे Cassandra।

आप अपने डेटा को वितरित NoSQL डेटाबेस में लिखते हैं, और यह स्वचालित रूप से आपके लिए डेटा को शार्प कर देगा। कैसंड्रा आपको डेटा पर वापस पाने के लिए कम एप्लिकेशन कोड की आवश्यकता के साथ, क्लस्टर भर में क्वेरी करने की अनुमति देता है। लाभ: अधिक स्वाभाविक रूप से बड़ी मात्रा में डेटा के लिए अनुकूल, नकारात्मक पक्ष: विशिष्ट तंत्र और यांत्रिकी की गहन समझ की आवश्यकता होगी कि ये सिस्टम कैसे अच्छा प्रदर्शन प्राप्त करने और आपकी आवश्यकताओं के अनुसार डेटा को क्वेरी करने के लिए काम करते हैं। NoSQL कोई मैजिक परफॉर्मेंस फिक्स नहीं है, यह ट्रेड-ऑफ का एक सेट है जिसे समझना होगा।

  1. Hadoop / फ़ाइल

डेटा को उन फ़ाइलों से जोड़ा जाता है जो Hadoop प्लेटफ़ॉर्म द्वारा सर्वरों में स्वचालित रूप से वितरित की जाती हैं, जो M / R या Apache Spark जैसे उपकरणों का उपयोग करके उन सर्वरों पर संसाधित होती हैं, और अंत में Hiveop या Impala जैसे Hadoop SQL इंजन का उपयोग करके (फ़ाइल के रूप में) क्वेरी की जाती हैं।

कौन सा चुनना है?

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


मैंने डेटा का उपयोग करने की योजना के बारे में अधिक जानकारी प्रदान की है। क्या आप दी गई किसी भी जानकारी को जोड़ना चाहेंगे?
Utku

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

यह उपयोगकर्ताओं को ट्रैक करने के लिए है। उपयोगकर्ता एक-दूसरे को ट्रैक करते हैं, और मैं ग्राफ़ करता हूं जहां उपयोगकर्ता उन पर नज़र रखते हैं जो उपकरणों पर पिछले 5 घंटों में हैं। अनिवार्य रूप से, बेहतर दानेदार, बेहतर। हालाँकि, मोबाइल उपकरणों में सीमित मात्रा में मेमोरी होती है, इसलिए आप इसके रिज़ॉल्यूशन को कम किए बिना डेटा नहीं भेज सकते। अर्थात, मान लीजिए कि उपयोगकर्ता A, उपयोगकर्ता B, C और D. को ट्रैक कर रहा है, यदि मैं बस सर्वर स्थान पर कोई प्रसंस्करण किए बिना B, C और D से जो भी स्थान डेटा प्राप्त करता हूं, उसे अग्रेषित करता हूं, तो उपयोगकर्ता A के डिवाइस की मेमोरी बहुत जल्दी भर जाएगी। । इसलिए, मुझे कुछ प्रसंस्करण करने की आवश्यकता है।
Utku

अगर मैं आपको जो वर्णन कर रहा हूं उसका निर्माण करना था, तो मैं इसे स्पार्क स्ट्रीमिंग के माध्यम से जुड़े कफ़्का लॉग की एक श्रृंखला के रूप में निर्माण करूंगा, जहां स्पार्क स्ट्रीम में विंडोज़ पर स्थिति को एकीकृत किया जाता है, और अंतिम आउटपुट कफ़्का लॉग को पुल और के रूप में प्रदान किया जाता है। ग्राहकों के लिए वेब एपीआई को धक्का। हालाँकि ... यह बहुत ही विशेष तकनीक है, और आपकी पृष्ठभूमि और उपलब्ध समय के आधार पर वे विकल्प आपके लिए गलत हो सकते हैं।
जोएरी सेब्रैट्स

धन्यवाद। मैं इसे ध्यान में रखूंगा लेकिन YAGNI सिद्धांत का पालन करते हुए, मैं अभी के लिए एक संबंधपरक डेटाबेस का उपयोग करने की योजना बना रहा हूं। जब आवश्यकता होती है, तो मैं उस चीज पर स्विच करूंगा जो बेहतर रूप से एप्लिकेशन को सूट करता है। यदि आप चाहें तो किसी भी जानकारी को अपने उत्तर में संपादित करने के लिए स्वतंत्र महसूस करें।
उत्कर्ष

6

अपनी आवश्यकताओं को थोड़ा गहराई से देखें। ट्रैकिंग पोजीशन का भ्रम हर पल बनाने का एक तरीका है।

यदि आपके पास एक ऐसा ऐप है जो आपके वर्तमान जीपीएस स्थान को जानता है और इसे डेटाबेस में लिखता है, तो यदि आप इसे नहीं बदलते हैं तो आप स्थान क्यों लिखते रहेंगे? यहां तक ​​कि अगर आपको डेटा की आवश्यकता होती है, अगर उपयोगकर्ता 7 घंटे के लिए सो रहा है, तो आप अपने गणना या मैपिंग या जो कुछ भी आपको करने की आवश्यकता है, वह एक डुप्लिकेट स्थान के साथ गुम समय स्लॉट में प्रोग्राम को भर सकता है।

यदि आप हर दूसरे स्थान को ट्रैक करते हैं, तो क्या आपको इन डेटा को हमेशा के लिए स्टोर करना है? आप वर्तमान तालिका को बहुत बड़े होने से रोकने के लिए रिकॉर्ड को किसी अन्य डेटाबेस में संग्रहीत कर सकते हैं। या फिर आप केवल उन रिकॉर्ड्स को रख सकते हैं जहां स्थिति में बदलाव होता है। यह डेटा वेयरहाउस में आम है।


2

आपका डेटा समय श्रृंखला का एक सेट है। आपने संख्याओं के सेट (प्रति उपयोगकर्ता दो) दिए हैं जो समय के साथ विकसित होते हैं। आमतौर पर, आप किसी भी प्रकार के रिलेशनल स्टोरेज के लिए नहीं, बल्कि आरआरडी स्टोरेज की तलाश में रहते हैं। ये स्टोरेज कई छोटे-छोटे लेखन के I / O काम को कम करके इसे बफरिंग पर केंद्रित करता है।

संबंधपरक भंडारण समय श्रृंखला की इस मात्रा के लिए एक विधर्म है। हालाँकि, चेतावनी दी जाती है कि आरआरडी का विकास एसक्यूएल की तुलना में प्रोग्राम योग्य शोषण के संदर्भ में काफी समर्थित नहीं है। आप शायद गंभीर एकीकरण कार्य देख रहे हैं, लेकिन आपकी आवश्यकताओं को देखते हुए यह शायद ही संभव है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.