uuid_short()
सर्वर आईडी का एक बिटवाइज़ समूह, एक काफी स्थिर समय घटक, और क्रमिक रूप से बढ़ता हुआ 24 बिट पूर्णांक उत्पन्न करता है। इन बिट्स को 8 बाइट पूर्णांक में भरा जाता है। समय घटक सर्वर के बूट समय पर आधारित होता है।
uuid()
हेक्स स्ट्रिंग उत्पन्न करता है जो 16 बाइट संस्करण 1 यूयूआईडी का प्रतिनिधित्व करता है। संस्करण 1 यूयूआईडी सर्वर आईडी, वर्तमान टाइमस्टैम्प, कुछ बाइट्स का एक बिटवाइज समूह है जो यदि आप हाइपरस्पीड पर आईडी जनरेट करते हैं, और कुछ उपयोगिता बिट्स चलन में आते हैं।
आपके प्रश्न का उत्तर देने के लिए:करता है uuid_short
प्रतिद्वंद्वी uuid
. समय और स्थान की विशिष्टता प्रदान करते हैं ? जवाब न है। मामले में, सर्वर आईडी uuid_short
. में है केवल एक बाइट है। इसलिए यदि आपके पास 256 या अधिक सर्वर हैं, तो उनमें से कम से कम कुछ के पास समान नोड आईडी होगी, जिसका अर्थ है कि आप स्थान की विशिष्टता खो देते हैं। तुलना के लिए, संस्करण 1 यूयूआईडी में सर्वर आईडी 6 बाइट लंबा है, प्रभावी रूप से कॉर्पोरेट सर्वर फ़ार्म के अलावा सभी के लिए डुप्लीकेट की संभावना को समाप्त करता है :)
एक बेहतर सवाल यह है कि क्या uuid_short
काफी अच्छा है। आप आईडी टकराव देख सकते हैं यदि आप:
- एक ही सर्वर से कम समय में 16 मिलियन से अधिक IDS जेनरेट करें। ***
- एक ही सर्वर आईडी वाले सर्वर को एक ही समय में बूट करें, और उनके बीच डेटा साझा करें।
- सिस्टम घड़ी के साथ बेला करें और फिर अपने सर्वर को रीबूट करें।
दूसरा मुद्दा अधिकांश लोगों के लिए असंभव लगता है, लेकिन आपके द्वारा uuid_short
बनाने के लिए प्रतिबद्ध होने से पहले पहला मुद्दा जांच के लायक है। आपकी चाबियों का आधार।
*** uuid_short
. के लिए mysql डॉक्स पर आधारित , ऐसा लगता है कि यदि आप एक सर्वर के अपटाइम के दौरान 16 मिलियन से अधिक आईडी जनरेट करते हैं तो आपको टकराव दिखाई देगा। लेकिन यह मूर्खतापूर्ण होगा। mysql डॉक्स आगे कहते हैं कि आप तब तक ठीक हैं जब तक आप प्रति सेकंड 16 मिलियन आईडी नहीं बनाते हैं। इसका तात्पर्य है कि यदि आप 16 मिलियन अनुक्रमिक आईडी समाप्त कर देते हैं तो उन्हें टाइमस्टैम्प में कुछ बिट्स को टक्कर देनी चाहिए। मैंने इसका परीक्षण नहीं किया है।