Splync संवेदनशील आईडी के लिए दो पहचानकर्ताओं का उपयोग करता है
Splync के डेटाबेस में, हर उपयोगकर्ता और हर प्रोजेक्ट को दो भिन्न आईडी से पहचाना जाता है: एक UUID और एक ऑटो-इन्क्रीमेंटेड इंटेजर।
ऑटो-इन्क्रीमेंटेड इंटेजर वही है जिससे अधिकांश लोग परिचित हैं — यह केवल एक काउंटर है: 1, 2, 3, और आगे। Splync इन इंटेजर्स का उपयोग सर्वर डेटाबेस के अंदर लगभग हर तालिका को व्यवस्थित करने के लिए करता है क्योंकि वे सरल, तेज़ और जोड़ों के लिए प्रभावी हैं। हालांकि, हम इन आंतरिक नंबर्स को ऐप पर कभी उजागर नहीं करते। उदाहरण के लिए, यदि आप 42वें उपयोगकर्ता के रूप में साइन अप करते हैं, तो आपके डेटाबेस में आंतरिक आईडी 42 होगी। लेकिन आपका iOS ऐप कभी "42" नहीं देखता। इसके बजाय, ऐप आपको दर्शाने के लिए UUID का उपयोग करता है। हम प्रोजेक्ट्स पर भी यही दृष्टिकोण अपनाते हैं — एक प्रोजेक्ट आईडी डेटाबेस के अंदर "7" हो सकती है, लेकिन ऐप हमेशा इसे लंबे UUID के माध्यम से संदर्भित करता है।
UUID क्या है
UUID का मतलब है यूनिवर्सली यूनिक आइडेंटिफायर। Splync संस्करण 4, प्रकार 1 UUID का उपयोग करता है, जो RFC 4122 के अनुरूप है — यह सबसे व्यापक रूप से अपनाई गई मानकों में से एक है। यह एक रैंडमली जनरेटेड स्ट्रिंग है, जो 949ca11c-a6ed-48a3-b40a-fa9727494917 की तरह दिखती है। एक UUID आम तौर पर 32 हेक्साडेसिमल अक्षरों के रूप में लिखा जाता है, जिसे हाइफ़न द्वारा विभाजित पांच अनुभागों में बाँटा जाता है। इसे वैश्विक रूप से अद्वितीय बनाने के लिए डिज़ाइन किया गया है, जिसका मतलब है कि यह विभिन्न सर्वर्स या डेटाबेस के बीच भी नहीं टकराएगा। गणितीय रूप से, लगभग 16^32 = 2^128 संभावित संयोजन होते हैं। हालांकि, क्योंकि छह बिट्स प्रकार और संस्करण को इंगित करने के लिए आरक्षित होते हैं, इसलिए विशिष्ट संस्करण-4, प्रकार-1 UUID की कुल संख्या लगभग 2^122 या लगभग 5.3 x 10^36 है — व्यावहारिक रूप से अद्वितीयता सुनिश्चित करने वाला खगोलीय बड़ा संख्या।
1 / 5,300,000,000,000,000,000,000,000,000,000,000,000 कितना छोटा है
प्रत्येक UUIDv4 जोड़ी के मेल खाने की संभावना लगभग 5.3 × 10^36 में 1 होती है। यह संख्या इतनी छोटी है कि यह मानवीय कल्पना में लगभग असंभव है। इसे समझने के लिए, कल्पना करें कि आप एक साथ 47 पासे फेंक रहे हैं। सभी पर एक-एक का आना — हर एक पांसे पर "1" दिखना — लगभग 6^47 में 1 या लगभग 3.7 × 10^36 में 1 होता है। यह एक UUID टकराव के समान परिमाण का है। अब, कल्पना करें कि पृथ्वी के हर व्यक्ति — लगभग आठ अरब लोग — उन 47 पासे को हर मिलीसेकंड में एक ट्रिलियन साल तक फेंक रहे हैं। यह लगभग 2.5 × 10^32 कुल प्रयास होते हैं। इसके बाद भी, कहीं न कहीं, एक साथ 47 एक पाने की संभावना केवल दस हजार में एक होगी। यह दो UUIDv4s के टकराने की संभावना को दिखाता है। यह "दुर्लभ" नहीं है। यह खगोलीय रूप से असामान्य है — ऐसा संयोग जो गणितज्ञों को अपने कॉफी को गिरा देता है और ब्रह्मांड में बग देखने के लिए प्रेरित करता है।
UUID जनरेट करना कितना आसान है
पहली नजर में, UUID बनाना सरल लग सकता है — आखिरकार, यह सिर्फ एक रैंडम दिखने वाली अल्फान्यूमेरिक स्ट्रिंग है। लेकिन खुद से इसे पेन और कागज पर लिखकर देखिए। आप 36 अक्षरों को नोट कर सकते हैं, सही है, लेकिन यदि आप इस अभ्यास को हजारों बार दोहराते हैं, तो स्पष्ट पैटर्न उभरने लगेंगे। शायद आप कुछ अंक पसंद करते हैं जैसे 3 या 8, और x जैसे अक्षरों का शायद ही कभी उपयोग करते हैं। एक कंप्यूटर उन पूर्वाग्रहों को तुरंत पकड़ सकता है। एक दुर्भावनापूर्ण हैकर आपके आदतों का विश्लेषण करके आपके "रैंडम" गुप्त स्ट्रिंग को एक दिन में संकीर्ण कर सकता है। फिर, अगर आप भी एक कंप्यूटर की ओर मुड़ते हैं और प्रत्येक अंक उत्पन्न करने के लिए rand(), क्लासिक रैंडम फंक्शन का उपयोग करते हैं। यह बेहतर है — लेकिन पर्याप्त नहीं। कई "रैंडम" नंबर जेनरेटर्स आम प्रोग्रामिंग वातावरण में स्यूडोरैंडम होते हैं, जिसका अर्थ है कि वे एक पूर्वानुमानित गणितीय अनुक्रम का पालन करते हैं जो एक आंतरिक बीज से शुरू होता है, जो सामान्यतः सिस्टम समय पर आधारित होता है। यदि कोई व्यक्ति उस बीज का पता लगाता है या अनुमान लगाता है, तो वे आपके जनरेटर द्वारा उत्पन्न हर मूल्य को पुनः उत्पन्न कर सकते हैं।
UUID कितनी परफेक्ट्ली रैंडम है
पूर्ण रैंडमनेस वास्तव में मौजूद नहीं होती — जैसे एक परफेक्ट पासा मौजूद नहीं होता, या पासा फेंकने का एक पूरी तरह से रैंडम तरीका नहीं होता। प्रत्येक भौतिक या डिजिटल प्रक्रिया कुछ अंतर्निहित नियमों का पालन करती है। फिर भी, गणितज्ञों और इंजीनियरों ने दशकों तक ऐसे एल्गोरिदम डिजाइन किए हैं जो सच्ची रैंडमनेस के जितना संभव हो सके उतने करीब आते हैं। जब Splync एक नया संस्करण-4 UUID बनाता है, तो यह पासे फेंकने की तरह केवल "संख्याएं रैंडमली चुनता" नहीं है। यह ऑपरेटिंग सिस्टम से अस्थिरता के छोटे-छोटे निशान मांगता है — उदाहरण के लिए, जिस क्षण आपका CPU एक कार्य समाप्त करता है, हार्डवेयर के अंदर की धीमी विद्युत शोर, या मेमोरी में पृष्ठभूमि समय के उतार-चढ़ाव। इन एंट्रोपी के टुकड़ों को इकट्ठा कर 128 बिट्स डेटा में मिलाया जाता है — एक लंबे अनुक्रम, जिसमें एक और शून्य होते हैं। परिणामस्वरूप एक कोड होता है जिसे ऐप उपयोगकर्ताओं या संभावित दुर्भावनापूर्ण हमलावरों द्वारा अनुमान लगाना या दोहराना लगभग असंभव होता है।
Splync का दोहरा पहचानकर्ता दृष्टिकोण
Splync संवेदनशील पहचानकर्ताओं के लिए UUIDs का उपयोग करता है जैसे उपयोगकर्ता आईडी और प्रोजेक्ट आईडी, क्योंकि वे अत्यधिक रैंडम और सुरक्षित होते हैं।
इसी समय, अपने सर्वर के अंदर, Splync उन UUIDs को ऑटो-इन्क्रीमेंटेड इंटेजर्स में बदल देता है ताकि बड़े डेटा सेट्स पर तेज़ खोज और विश्लेषण किया जा सके। यह दोहरा पहचानकर्ता दृष्टिकोण सुरक्षा और सुविधा के बीच संतुलन बनाता है — बाहरी गोपनीयता के साथ आंतरिक प्रदर्शन। Splync का लक्ष्य एक तनाव मुक्त, सरल और सुरक्षित बजट ट्रैकिंग ऐप बनना है। दृश्यमान यूआई के पीछे, हम अपने आर्किटेक्चर को परिष्कृत करना जारी रखते हैं ताकि चीजें सरल, सुरक्षित और चुपचाप स्मार्ट बनी रहें।