আপনার ইউআইডি-র কোন সংস্করণ ব্যবহার করা উচিত? প্রতিটি সংস্করণে কী কী অন্তর্ভুক্ত রয়েছে তা বোঝাতে আমি প্রচুর থ্রেড দেখেছি, তবে কি অ্যাপ্লিকেশনগুলির জন্য সবচেয়ে ভাল তা নির্ধারণ করতে আমার সমস্যা হচ্ছে।
আপনার ইউআইডি-র কোন সংস্করণ ব্যবহার করা উচিত? প্রতিটি সংস্করণে কী কী অন্তর্ভুক্ত রয়েছে তা বোঝাতে আমি প্রচুর থ্রেড দেখেছি, তবে কি অ্যাপ্লিকেশনগুলির জন্য সবচেয়ে ভাল তা নির্ধারণ করতে আমার সমস্যা হচ্ছে।
উত্তর:
একটি ইউইউডি উত্পন্ন করার দুটি ভিন্ন উপায় রয়েছে।
আপনার যদি কেবল একটি অনন্য আইডি প্রয়োজন, আপনি একটি সংস্করণ 1 বা সংস্করণ 4 চান।
সংস্করণ 1: এটি একটি কার্ড কার্ড ম্যাক ঠিকানা এবং একটি টাইমার উপর ভিত্তি করে একটি অনন্য আইডি উত্পন্ন করে। এই আইডিগুলি সহজেই অনুমান করা যায় (একটি দেওয়া হয়েছে, আমি অন্য একটিটি অনুমান করতে সক্ষম হতে পারি) এবং আপনার নেটওয়ার্ক কার্ডে ফিরে পাওয়া যায়। এগুলি তৈরি করার প্রস্তাব দেওয়া হয় না।
সংস্করণ 4: এগুলি এলোমেলো (বা ছদ্ম-র্যান্ডম) নম্বর থেকে উত্পন্ন হয়। আপনার যদি কেবল একটি ইউইউডি উত্পন্ন করার দরকার হয় তবে এটি সম্ভবত আপনি চান।
যদি আপনার প্রদত্ত নাম থেকে সর্বদা একই ইউআইডি উত্পন্ন করার দরকার হয় তবে আপনি সংস্করণ 3 বা সংস্করণ 5 চান।
সংস্করণ 3: এটি একটি নেমস্পেস এবং নামের এমডি 5 হ্যাশ থেকে একটি অনন্য আইডি উত্পন্ন করে। আপনার যদি পিছনের সামঞ্জস্যতা প্রয়োজন (অন্য সিস্টেমের সাথে নামগুলি থেকে ইউআইডি তৈরি করে), এটি ব্যবহার করুন।
সংস্করণ 5: এটি একটি নেমস্পেস এবং নামের একটি SHA-1 হ্যাশ থেকে একটি অনন্য আইডি উত্পন্ন করে। এটি পছন্দসই সংস্করণ।
reproducible
একটি প্রদত্ত নাম থেকে কোনও ইউইউডি উত্পন্ন করার দরকার হয় তবে আপনি একটি সংস্করণ 3 বা সংস্করণ 5 চান you আপনি যদি সেই আলগোরিদমকে একই ইনপুট খাওয়ান তবে এটি একই আউটপুট উত্পন্ন করবে।
আপনি যদি একটি এলোমেলো নম্বর চান, একটি এলোমেলো নম্বর লাইব্রেরি ব্যবহার করুন। আপনি যদি কার্যকরভাবে 0.00 ... আরও অনেকগুলি এখানে ... 001% সংঘর্ষের সম্ভাবনা সহ একটি অনন্য শনাক্তকারী চান তবে আপনার ইউআইডিভিভি 1 ব্যবহার করা উচিত। ইউআইডিভি 3 এবং ভি 5 এর জন্য নিকের পোস্ট দেখুন।
ইউআইডিভিভি 1 নিরাপদ নয়। এটা হতে বোঝানো হয় না। এটি অনন্য অনুমানযোগ্য নয়, বোঝার জন্য। ইউআইডিভিভি 1 বর্তমান টাইমস্ট্যাম্প ব্যবহার করে একটি মেশিন শনাক্তকারী, এবং কিছু এলোমেলো-ইশ স্টাফ ব্যবহার করে এমন নম্বর তৈরি করতে পারে যা আর কখনও সেই অ্যালগরিদমের দ্বারা আর তৈরি করা যায় না। এটি কোনও লেনদেন আইডির জন্য উপযুক্ত (এমনকি প্রত্যেকে লক্ষ লক্ষ লেনদেন / গুলি করে থাকলেও)।
সত্যি কথা বলতে কি, ইউআইডিএভিভি 4 কেন বিদ্যমান তা আমি বুঝতে পারি না ... আরএফসি 4122 পড়ে , দেখে মনে হচ্ছে যে সংস্করণটি সংঘর্ষের সম্ভাবনা দূর করে না। এটি কেবল একটি এলোমেলো সংখ্যা জেনারেটর। যদি এটি সত্য হয় তবে আপনার কাছে বিশ্বের দুটি মেশিনের খুব ভাল সম্ভাবনা থাকার পরে অবশেষে একই "ইউইউডি" ভি 4 তৈরি করা হয় (উদ্ধৃতিগুলি কারণ ইউ.এনভার্সিয়াল ইউ.এনইউকনেসকে নিশ্চিত করার কোনও ব্যবস্থা নেই) mechanism এই পরিস্থিতিতে, আমি মনে করি না যে অ্যালগরিদম কোনও আরএফসি-র অন্তর্ভুক্ত যা অনন্য মান উত্পন্ন করার পদ্ধতি বর্ণনা করে। এলোমেলোতা উত্পাদন সম্পর্কে এটি কোনও আরএফসি-র অন্তর্ভুক্ত। এলোমেলো সংখ্যার একটি সেট জন্য:
chance_of_collision = 1 - (set_size! / (set_size - tries)!) / (set_size ^ tries)
set_size
এটি 2 ^ 122, যা খুব বড় ।
এটি একটি খুব সাধারণ প্রশ্ন। একটি উত্তর: "এটি নির্ভর করে আপনি কোন ধরণের ইউআইডি তৈরি করতে চান"। তবে এর থেকে আরও ভাল একটি হ'ল: "ভাল, আমি উত্তর দেওয়ার আগে, আপনি কি আমাদের বলতে পারবেন যে বেশিরভাগ আধুনিক অপারেটিং সিস্টেমগুলি সরবরাহ করে এমন ইউইউডি প্রজন্মের কার্যকারিতা কল করার পরিবর্তে আপনার নিজের ইউআইডি প্রজন্মের অ্যালগরিদমকে কোড করার দরকার কেন?"
এটি করা সহজ এবং নিরাপদ এবং আপনার সম্ভবত নিজের তৈরি করার দরকার নেই , তাই কোনও বাস্তবায়ন কোডিং কেন বিরক্ত করবেন? সেক্ষেত্রে উত্তরটি আপনার ও / এস, প্রোগ্রামিং ভাষা বা কাঠামো যা সরবরাহ করে তা ব্যবহারে পরিণত হয়। উদাহরণস্বরূপ, উইন্ডোজ-এ, কোক্রিয়াটগুইড বা ইউইডক্রিয়েট বা ব্যবহারযোগ্য অসংখ্য ফ্রেমওয়ার্ক থেকে পাওয়া বিভিন্ন র্যাপারগুলির মধ্যে একটি রয়েছে। লিনাক্সে uuid_generate রয়েছে ।
আপনি যদি কোনও কারণে একেবারে নিজের তৈরি করতে চান তবে কমপক্ষে ভি 1 এবং ভি 2 ইউআইডি উত্পন্ন করা থেকে দূরে থাকার জন্য ভাল ধারণা থাকতে হবে । এগুলি সঠিকভাবে পাওয়া খুব কঠিন। পরিবর্তে, v3, v4 বা v5 ইউআইডিগুলিতে স্টিক করুন।
আপডেট : একটি মন্তব্যে আপনি উল্লেখ আছে যাতে আপনি পাইথন এবং লিঙ্ক ব্যবহার করছেন এই । প্রদত্ত ইন্টারফেসটি দেখে, আপনার পক্ষে সবচেয়ে সহজ বিকল্পটি কল করে একটি ভি 4 ইউআইডি (যা এলোমেলো তথ্য থেকে তৈরি করা) তৈরি করা হবে uuid.uuid4()
।
আপনার যদি এমন কিছু ডেটা থাকে যা থেকে আপনার কোনও ইউআইডি তৈরি করতে হ্যাশ দরকার (বা করতে পারেন), তবে আপনি v3 (যা MD5 এর উপর নির্ভর করে) বা ভি 5 (যা SHA1 এর উপর নির্ভর করে) ব্যবহার করতে পারেন। একটি ভি 3 বা ভি 5 ইউআইডি উত্পন্ন করা সহজ: প্রথমে আপনি যে ইউইউডি টাইপ করতে চান তা চয়ন করুন (আপনার সম্ভবত ভি 5 বেছে নেওয়া উচিত) এবং তারপরে উপযুক্ত নাম স্থানটি চয়ন করুন এবং ইউইউডি উত্পন্ন করতে আপনি যে ডেটা ব্যবহার করতে চান তা দিয়ে ফাংশনটিতে কল করুন। উদাহরণস্বরূপ, আপনি যদি কোনও ইউআরএল নিয়ে থাকেন তবে আপনি এটি ব্যবহার করবেন NAMESPACE_URL
:
uuid.uuid3(uuid.NAMESPACE_URL, 'https://ripple.com')
দয়া করে মনে রাখবেন যে এই ইউআইডিটি একই ইউআরএলটির জন্য ভি 5 ইউআইডি থেকে আলাদা হবে, যা এই জাতীয় উত্পন্ন হয়:
uuid.uuid5(uuid.NAMESPACE_URL, 'https://ripple.com')
ভি 3 এবং ভি 5 ইউআরএলগুলির একটি দুর্দান্ত সম্পত্তি হ'ল এগুলি বাস্তবায়নের মধ্যে আন্তঃযোগযোগ্য হওয়া উচিত। অন্য কথায়, দুটি ভিন্ন সিস্টেম যদি একটি বাস্তবায়ন ব্যবহার করে যা আরএফসি 4122 মেনে চলে, তারা (বা কমপক্ষে হওয়া উচিত ) উভয়ই একই ইউআইডি উত্পন্ন করবে যদি অন্য সমস্ত জিনিস সমান হয় (যেমন একই নামস্থান এবং একই সাথে একই সংস্করণ ইউআইডি উত্পন্ন হয়) একই ডেটা)। এই সম্পত্তিটি কিছু পরিস্থিতিতে (বিশেষত সামগ্রী-ঠিকানাযোগ্য সঞ্চয়স্থানের ক্ষেত্রে) খুব সহায়ক হতে পারে , তবে সম্ভবত আপনার বিশেষ ক্ষেত্রে নয় but
NAMESPACE_URL
একটি UUID সাধারণত সমান 6ba7b811-9dad-11d1-80b4-00c04fd430c8
, এর 30 পৃষ্ঠার প্রণীত সুপারিশ নিম্নলিখিত বোঝায় যা RFC-4122 ।
Postgres ডকুমেন্টেশনUUID
এর মধ্যে পার্থক্য বর্ণনা করে । তাদের মধ্যে একটি দম্পতি:
V3:
uuid_generate_v3(namespace uuid, name text)
- এই ফাংশনটি নির্দিষ্ট ইনপুট নাম ব্যবহার করে প্রদত্ত নেমস্পেসে একটি সংস্করণ 3 ইউআইডি উত্পন্ন করে।
V4:
uuid_generate_v4
- এই ফাংশনটি একটি সংস্করণ 4 ইউআইডি উত্পন্ন করে, যা এলোমেলো সংখ্যা থেকে সম্পূর্ণ উত্পন্ন।