मैं a previous discussion I had with Jon Skeet का निर्माण कर रहा हूं।मैं क्लाइंट द्वारा जेनरेट किए गए GUID पर भरोसा क्यों नहीं कर सकता? पीके को क्लाइंट-GUID के एक समग्र और सर्वर-GUID के संयोजन के रूप में कुछ भी हल करता है?
मेरी परिदृश्य का सार इस प्रकार है:
- ग्राहक आवेदन नए 'PlaylistItem' जिन वस्तुओं पर एक डेटाबेस में कायम करने की आवश्यकता बनाने की क्षमता है।
- केस का उपयोग प्लेलिस्टइटम को इस तरह से बनाने की आवश्यकता है कि क्लाइंट को PlaylistItem प्रदर्शित करने से पहले सर्वर से प्रतिक्रिया पर इंतजार नहीं करना पड़े।
- क्लाइंट PlaylistItem के लिए एक UUID उत्पन्न करता है, क्लाइंट में PlaylistItem दिखाता है और फिर सर्वर पर एक सहेजें आदेश जारी करता है।
इस बिंदु पर, मैं समझता हूं कि क्लाइंट द्वारा मेरे डेटाबेस में ऑब्जेक्ट के पीके के रूप में उत्पन्न यूयूआईडी का उपयोग करना बुरा व्यवहार होगा। इसका कारण यह है कि एक दुर्भावनापूर्ण उपयोगकर्ता जेनरेट यूयूआईडी को संशोधित कर सकता है और मेरे डीबी पर पीके टकराव को मजबूर कर सकता है।
PlaylistItem पर पीके टकराव को मजबूर करने से होने वाली किसी भी क्षति को कम करने के लिए, मैंने पीके को दो आईडी के संयोजन के रूप में परिभाषित करना चुना - क्लाइंट द्वारा जेनरेट किए गए यूयूआईडी और सर्वर से उत्पन्न GUID। सर्वर द्वारा जेनरेट की गई GUID PlaylistItem की प्लेलिस्ट की आईडी है।
अब, मैं थोड़ी देर के लिए इस समाधान का उपयोग कर रहा हूं, लेकिन मुझे समझ में नहीं आता कि मेरा समाधान क्लाइंट आईडी पर भरोसा करने से बेहतर क्यों है। यदि उपयोगकर्ता किसी अन्य उपयोगकर्ता की PlaylistItem ऑब्जेक्ट्स के साथ पीके टकराव को मजबूर करने में सक्षम है तो मुझे लगता है कि मुझे लगता है कि वे उस उपयोगकर्ता की PlaylistId भी प्रदान कर सकते हैं। वे अभी भी टक्कर लगी हो सकती है।
तो ... हाँ। ऐसा कुछ करने का सही तरीका क्या है? ग्राहक को यूयूआईडी बनाने की अनुमति दें, सफलतापूर्वक सहेजे जाने पर सर्वर एक अंगूठे ऊपर/नीचे देता है। यदि टक्कर मिलती है, तो ग्राहक परिवर्तनों को वापस लाएं और पता लगाने के बारे में सूचित करें?