উত্তর:
ডকুমেন্টেশন অনুসারে , স্ট্যাটিক পদ্ধতিটি UUID.randomUUID()
একটি প্রকার 4 ইউআইডি উত্পন্ন করে।
এর অর্থ হ'ল ছয়টি বিট কিছু প্রকারের তথ্যের জন্য ব্যবহৃত হয় এবং বাকি 122 বিট এলোমেলোভাবে বরাদ্দ করা হয়।
ছয়টি নন-এলোমেলো বিটগুলি ইউআইডি-র সবচেয়ে উল্লেখযোগ্য অর্ধে চারটি এবং কমপক্ষে উল্লেখযোগ্য অর্ধেক অংশে দুটি দিয়ে বিতরণ করা হয়। সুতরাং আপনার ইউইউডি-র সবচেয়ে উল্লেখযোগ্য অর্ধেকটি এলোমেলোভাবে b০ বিট ধারণ করে যার অর্থ আপনি একটি সংঘর্ষের জন্য গড়পড়তা 2 ^ 30 ইউআইডি উত্পন্ন করতে হবে (সম্পূর্ণ ইউইউডিটির জন্য 2 ^ 61 এর তুলনায়)।
সুতরাং আমি বলব যে আপনি বরং নিরাপদ। নোট করুন, তবে কার্ল সেলেবর্গ যেমন উল্লেখ করেছেন তেমন এটি অন্যান্য ধরণের ইউআইডি-র ক্ষেত্রে একেবারেই সত্য নয়।
ঘটনাক্রমে, আপনি ইউআইডি'র সর্বনিম্ন উল্লেখযোগ্য অর্ধেক ব্যবহার করে (বা সিকিউরর্যান্ডম ব্যবহার করে কেবল একটি এলোমেলো দীর্ঘ উত্পাদন করে) কিছুটা ভাল হয়ে যাবেন।
রেমন্ড চেনের এ সম্পর্কে সত্যিই দুর্দান্ত একটি ব্লগ পোস্ট রয়েছে:
জিইউইডিগুলি বিশ্বব্যাপী অনন্য, তবে জিইউইডিগুলির সাবস্ট্রিংগুলি নয়
আমি মনে করি এটি এলোমেলোভাবে ব্যবহারের জন্য সেরা উদাহরণ:
আপনি কেবল একটি এলোমেলো দীর্ঘ মান উত্পন্ন করা ভাল, তারপরে সমস্ত বিট এলোমেলো। জাভা 6-এ, নতুন র্যান্ডম () System.nanoTime () এবং বীজ হিসাবে একটি কাউন্টার ব্যবহার করে।
স্বতন্ত্রতার বিভিন্ন স্তর রয়েছে।
আপনার যদি অনেকগুলি মেশিনের মধ্যে স্বতন্ত্রতার প্রয়োজন হয় তবে আপনার কাছে অনন্য আইড বরাদ্দ করার জন্য একটি কেন্দ্রীয় ডাটাবেস টেবিল বা এমনকি অনন্য আইডির ব্যাচ থাকতে পারে।
যদি আপনার কেবলমাত্র একটি অ্যাপ্লিকেশনে স্বতন্ত্রতা থাকতে হয় তবে আপনার কেবলমাত্র একটি কাউন্টার (বা বর্তমানের টাইমমিলিস () * 1000 বা ন্যানোটাইম () আপনার প্রয়োজনীয়তার উপর নির্ভর করে শুরু হতে পারে) পেতে পারেন
YYYYDDDD
উপসর্গ হিসাবে সময় (বছর + বছরের দিন) ব্যবহার করুন । এটি সারণী এবং সূচীগুলিতে ডাটাবেস বিভাজন হ্রাস করে। এই পদ্ধতিটি ফিরে আসে byte[40]
। আমি এটিকে একটি হাইব্রিড পরিবেশে ব্যবহার করেছি যেখানে অ্যাক্টিভ ডিরেক্টরি এসআইডি ( varbinary(85)
) এলডিএপি ব্যবহারকারীদের জন্য কী এবং একটি অ্যাপ্লিকেশন স্বয়ংক্রিয়-জেনারেট আইডি নন-এলডিএপি ব্যবহারকারীদের জন্য ব্যবহৃত হয়। এছাড়াও লেনদেনের টেবিলগুলিতে প্রতিদিন বিপুল সংখ্যক লেনদেন (ব্যাংকিং শিল্প) Int
কীগুলির জন্য মানক প্রকার ব্যবহার করতে পারে না
private static final DecimalFormat timeFormat4 = new DecimalFormat("0000;0000");
public static byte[] getSidWithCalendar() {
Calendar cal = Calendar.getInstance();
String val = String.valueOf(cal.get(Calendar.YEAR));
val += timeFormat4.format(cal.get(Calendar.DAY_OF_YEAR));
val += UUID.randomUUID().toString().replaceAll("-", "");
return val.getBytes();
}