मेरे प्रोजेक्ट के लिए मुझे ऐसे आईडी चाहिए जिन्हें आसानी से साझा किया जा सके, इसलिए फायरस्टोर्स डिफ़ॉल्ट ऑटो जेनरेटेड आईडी काम नहीं करेंगे।
मैं 8329423 जैसी आईडी को स्वत: उत्पन्न करने का एक तरीका ढूंढ रहा हूं जिसे 0 से 9999999 की सीमा में बढ़ाया या यादृच्छिक रूप से चुना जाएगा।

1
Andrian Koghoshvili 20 अप्रैल 2019, 15:46

1 उत्तर

सबसे बढ़िया उत्तर

Firestore के ऑटो-आईडी फ़ील्ड सांख्यिकीय रूप से गारंटी देने के लिए डिज़ाइन किए गए हैं कि कोई भी दो क्लाइंट कभी भी समान मान उत्पन्न नहीं करेंगे। यही कारण है कि वे तब तक हैं जब तक वे हैं: यह सुनिश्चित करना है कि उनमें पर्याप्त यादृच्छिकता (एन्ट्रॉपी) है।

यह फायरस्टोर को सर्वर पर देखने की आवश्यकता के बिना इन चाबियों को पूरी तरह से क्लाइंट-साइड निर्धारित करने की अनुमति देता है कि क्या इससे उत्पन्न कुंजी पहले से ही किसी अन्य क्लाइंट पर उत्पन्न हुई थी। और इसके बदले में ये मुख्य लाभ हैं:

  1. चूंकि कुंजियां क्लाइंट-साइड जेनरेट की जाती हैं, इसलिए क्लाइंट के किसी सर्वर से कनेक्ट नहीं होने पर भी उन्हें जेनरेट किया जा सकता है।
  2. चूंकि कुंजियां क्लाइंट-साइड जेनरेट की जाती हैं, इसलिए नई कुंजी जेनरेट करने के लिए सर्वर पर राउंडट्रिप की कोई आवश्यकता नहीं होती है। यह प्रक्रिया को काफी तेज करता है।
  3. चूंकि कुंजियाँ क्लाइंट-साइड जेनरेट की जाती हैं, इसलिए क्लाइंट्स द्वारा कीज़ जनरेट करने के बीच कोई विवाद नहीं है। प्रत्येक क्लाइंट केवल आवश्यकतानुसार कुंजी उत्पन्न करता है।

यदि ये लाभ आपके उपयोग-मामले के लिए महत्वपूर्ण हैं, तो आपको दृढ़ता से विचार करना चाहिए कि क्या आप पहले से ही Firestore की तुलना में एक बेहतर अद्वितीय आईडी बनाने की संभावना रखते हैं। उदाहरण के लिए, फायरस्टोर की आईडी में 62^20 अद्वितीय मान होते हैं, यही कारण है कि सांख्यिकीय रूप से गारंटी दी जाती है कि वे बहुत लंबे समय तक समान मान उत्पन्न नहीं करेंगे। 0 - 9999999 की आपकी प्रस्तावित श्रेणी में 1 मिलियन अद्वितीय मान हैं, जिससे डुप्लिकेट उत्पन्न होने की बहुत अधिक संभावना है।

यदि आप वास्तव में आईडी के लिए यह योजना चाहते हैं, तो आपको उन आईडी को स्टोर करने की आवश्यकता होगी जो आपने पहले ही सर्वर पर दे दी हैं (संभवतः फायरस्टोर में), ताकि आप एक नई कुंजी बनाते समय इसके खिलाफ जांच कर सकें। ऐसा करने का एक बहुत ही सामान्य तरीका है कि आप किसी दस्तावेज़ में पहले से दी गई अंतिम आईडी का एक काउंटर रखें। एक नई विशिष्ट आईडी बनाने के लिए, आप:

  1. दस्तावेज़ से नवीनतम काउंटर वैल्यू पढ़ें।
  2. काउंटर बढ़ाएँ।
  3. दस्तावेज़ में अद्यतन काउंटर मान लिखें।
  4. अपने कोड में अद्यतन काउंटर मान का उपयोग करें।

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

3
Frank van Puffelen 20 अप्रैल 2019, 14:07