java - फायरस्टार में इस तरह के डेटा की संरचना करने का सही तरीका क्या है?



firebase firebase-realtime-database (1)

फायरस्टार में इस तरह के डेटा की संरचना करने का सही तरीका क्या है?

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

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

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

अब आप आश्चर्यचकित हो सकते हैं कि कौन सी तन्हाई सबसे अच्छी है। एक बहुत ही सामान्य अर्थ में, जिस तरह से आप NoSQL डेटाबेस में संदर्भ या डुप्लिकेट डेटा संग्रहीत कर सकते हैं, वह पूरी तरह से आपकी परियोजना की आवश्यकताओं पर निर्भर है।

इसलिए आपको अपने आप से उस डेटा के बारे में कुछ प्रश्न पूछना चाहिए जिसे आप डुप्लिकेट करना चाहते हैं या इसे केवल संदर्भ के रूप में रखें:

  1. स्थैतिक है या यह समय के साथ बदल जाएगा?
  2. यदि ऐसा होता है, तो क्या आपको डेटा के हर डुप्लिकेट उदाहरण को अपडेट करने की आवश्यकता है ताकि वे सभी सिंक में रहें? यह मैंने पहले भी उल्लेख किया है।
  3. जब फायरस्टार की बात आती है, तो क्या आप performance या cost लिए अनुकूलन कर रहे हैं?

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

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

यदि आपको अपने प्रश्नों को बहुत तेज़ करने की आवश्यकता है, तो आप अधिक डेटा डुप्लिकेट करना पसंद कर सकते हैं, ताकि ग्राहक को केवल एक दस्तावेज़ को प्रति दस्तावेज़ पढ़ना पड़े, बजाय कई दस्तावेज़ों के। लेकिन आप स्थानीय क्लाइंट कैश पर निर्भर हो सकते हैं, जिससे ग्राहक को जो डेटा पढ़ना होता है, उसके आधार पर यह सस्ता हो जाता है।

इस दृष्टिकोण में आप प्रत्येक product दस्तावेज़ के लिए एक provider लिए सभी डेटा की नकल करते हैं। इसका मतलब है कि इस डेटा को लिखने के लिए कोड अधिक जटिल है, और आप निश्चित रूप से अधिक डेटा संग्रहीत कर रहे हैं, प्रत्येक उत्पाद दस्तावेज़ के लिए एक और प्रदाता ऑब्जेक्ट। और आपको यह पता लगाने की आवश्यकता होगी कि क्या और कैसे इसे प्रत्येक दस्तावेज़ को अद्यतित रखना है। लेकिन दूसरी ओर, अब एक product दस्तावेज़ को पढ़ना आपको provider दस्तावेज़ के बारे में सभी जानकारी एक ही बार में देता है।

यह NoSQL डेटाबेस में एक आम विचार है: आपको अक्सर लिखने के प्रदर्शन और डिस्क भंडारण बनाम पढ़ने के प्रदर्शन और मापनीयता पर विचार करना होगा।

आपकी पसंद के लिए कुछ डेटा की नकल करना या न करना, यह आपके डेटा और इसकी विशेषताओं पर अत्यधिक निर्भर है। आपको यह सोचना होगा कि केस के आधार पर केस के जरिए।

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

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

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

कृपया इस post से मेरे उत्तर पर एक नज़र डालें जहां मैंने फायरस्टार में collections , maps और arrays बारे में अधिक बताया है।

मैंने वीडियो देखा है और Google फायरबेस सेवा से क्लाउड फायरस्टार के दस्तावेज़ीकरण को पढ़ा है, लेकिन मैं रियलटाइम डेटाबेस से आने वाले लोगों का पता नहीं लगा सकता।

मेरे पास यह वेब ऐप है, जिसमें मैं अपने प्रदाताओं को विभिन्न श्रेणी के उत्पादों से संग्रहीत करना चाहता हूं। मैं अपने सभी उत्पादों के माध्यम से एक खोज क्वेरी करना चाहता हूं कि ऐसे उत्पाद के लिए मेरे पास क्या प्रदाता हैं, और अंततः उस प्रदाता की जानकारी प्राप्त करें।

मैं इस उद्देश्य के लिए इस संरचना का उपयोग करने की योजना बना रहा हूं:

Providers ( Collection )
   Provider 1 ( Document )
      Name
      City
      Categories
   Provider 2
      Name
      City

Products ( Collection )
   Product 1 ( Document )
      Name
      Description
      Category
      Provider ID
   Product 2
      Name
      Description
      Category
      Provider ID

तो मेरा प्रश्न यह है कि क्या मुझे उस उत्पाद की जानकारी प्राप्त करने का सही तरीका है जिससे मुझे वह उत्पाद मिल जाए जो मुझे चाहिए?

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





google-cloud-firestore