2011-02-03 14 views
8

मैं डेटाबेस इकाइयों के लिए एक अद्वितीय आईडी उत्पन्न करने के लिए जावा में System.currentTimeMillis() (जो long पूर्णांक देता है) का उपयोग कर रहा हूं क्योंकि मुझे लगता है कि किसी भी समय इन ओवरलैप के लिए यह संभव नहीं है।एक अद्वितीय डेटाबेस आईडी उत्पन्न करने के लिए System.currentTimeMillis() का उपयोग करने के लिए सुरक्षित?

क्या यह एक सुरक्षित धारणा है?

उदाहरण के लिए, इस समय मैं यह मिलता है:

1296691225227 

उत्तर

8

यह काफी संभावना नहीं आप एक संघर्ष मिलेगा, हाँ (जब तक आप एक उच्च लोड प्रणाली में कर रहे हैं, जिस स्थिति में यह है बहुत संभावना), लेकिन अभी भी संभव है।

जावा अद्वितीय पहचानकर्ता उत्पन्न करने के लिए एक मौजूदा तंत्र है, हालांकि - java.util.UUID। इसमें यादृच्छिक आईडी उत्पन्न करने के तरीके हैं।

मैं दृढ़ता से इसके बजाय इसका उपयोग करने का सुझाव देता हूं।

+0

विफलता संभावना के संदर्भ में, मुझे शक है मिलीसेकेंड दृष्टिकोण इकाई परीक्षण से बच जाएगा। – Dolph

+0

@ डॉल्फ़ - या सिस्टम लोड परीक्षण। निश्चित रूप से यह नहीं होना चाहिए ... यदि आप उन्हें सही तरीके से कर रहे हैं। –

+1

मुझे यूयूआईडी बहुत पसंद है हालांकि यह काफी अक्षम है (समझ में आया है कि कठिन तरीका ...) स्टोर करने का सामान्य तरीका UUID.toString() है जो 36bytes लंबा है (आमतौर पर वर्चर (36) जैसा कुछ मैप किया जाता है)। डीबी इंडेक्स को स्मृति में रखा जाना चाहिए - सूचकांक जितना बड़ा होगा, उतनी अधिक मेमोरी की आवश्यकता होगी, इंडेक्सिंग धीमा हो जाएगा, आदि। मैं कुछ उच्च-स्तरीय योजना w/क्लस्टरिंग बिट्स और 'लांग' आईडी का उपयोग करने की सलाह दूंगा। – bestsss

16

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

+5

यह भी ध्यान देने योग्य है कि मिलीसेकंद टाइमर की * न्यूनतम * ग्रैन्युलरिटी सैद्धांतिक रूप से 1ms है, वास्तविक ग्रॅन्युलरिटी अधिक हो सकती है। मैंने सिस्टम का उपयोग किया है जहां यह 20 मिमी था। –

+1

एनटीपी की तरह कुछ घड़ी का उल्लेख नहीं करना चाहिए। – jtahlborn

+0

न्यूनतम ग्रैन्युलरिटी क्या है? मैं अपने सिस्टम के मूल्य की जांच कैसे कर सकता हूं? – piechuckerr

0

यदि आपका कोड कभी भी क्लस्टर्ड वातावरण में चलता है, तो यह आपके बाधाओं को बाधित करता है।

अधिकांश जेपीए डेटाबेस में स्वयं द्वारा अद्वितीय आईडी उत्पन्न करने के तरीके होते हैं।

http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing

संबंधित मुद्दे

 संबंधित मुद्दे