কোন ইউআইডি সংস্করণ ব্যবহার করবেন?


332

আপনার ইউআইডি-র কোন সংস্করণ ব্যবহার করা উচিত? প্রতিটি সংস্করণে কী কী অন্তর্ভুক্ত রয়েছে তা বোঝাতে আমি প্রচুর থ্রেড দেখেছি, তবে কি অ্যাপ্লিকেশনগুলির জন্য সবচেয়ে ভাল তা নির্ধারণ করতে আমার সমস্যা হচ্ছে।


2
আপনার পছন্দ কি?
গ্যাবে

অজগর নিয়ে যে কোনও কিছু কাজ করে। তাই আমি এই অনুমান docs.python.org/2/library/uuid.html । 1,3,4,5।
ব্যবহারকারী1802143

যদি আপনি সংস্করণ 3 এবং 5 সম্পর্কে আগ্রহী হন তবে এই প্রশ্নটি দেখুন, ভি 5 ইউআইডি তৈরি হচ্ছে। নাম এবং নামস্থান কী?
বাসিল বাউরক

উত্তর:


414

একটি ইউইউডি উত্পন্ন করার দুটি ভিন্ন উপায় রয়েছে।

আপনার যদি কেবল একটি অনন্য আইডি প্রয়োজন, আপনি একটি সংস্করণ 1 বা সংস্করণ 4 চান।

  • সংস্করণ 1: এটি একটি কার্ড কার্ড ম্যাক ঠিকানা এবং একটি টাইমার উপর ভিত্তি করে একটি অনন্য আইডি উত্পন্ন করে। এই আইডিগুলি সহজেই অনুমান করা যায় (একটি দেওয়া হয়েছে, আমি অন্য একটিটি অনুমান করতে সক্ষম হতে পারি) এবং আপনার নেটওয়ার্ক কার্ডে ফিরে পাওয়া যায়। এগুলি তৈরি করার প্রস্তাব দেওয়া হয় না।

  • সংস্করণ 4: এগুলি এলোমেলো (বা ছদ্ম-র্যান্ডম) নম্বর থেকে উত্পন্ন হয়। আপনার যদি কেবল একটি ইউইউডি উত্পন্ন করার দরকার হয় তবে এটি সম্ভবত আপনি চান।

যদি আপনার প্রদত্ত নাম থেকে সর্বদা একই ইউআইডি উত্পন্ন করার দরকার হয় তবে আপনি সংস্করণ 3 বা সংস্করণ 5 চান।

  • সংস্করণ 3: এটি একটি নেমস্পেস এবং নামের এমডি 5 হ্যাশ থেকে একটি অনন্য আইডি উত্পন্ন করে। আপনার যদি পিছনের সামঞ্জস্যতা প্রয়োজন (অন্য সিস্টেমের সাথে নামগুলি থেকে ইউআইডি তৈরি করে), এটি ব্যবহার করুন।

  • সংস্করণ 5: এটি একটি নেমস্পেস এবং নামের একটি SHA-1 হ্যাশ থেকে একটি অনন্য আইডি উত্পন্ন করে। এটি পছন্দসই সংস্করণ।


17
আমি যোগ করব: আপনার যদি reproducibleএকটি প্রদত্ত নাম থেকে কোনও ইউইউডি উত্পন্ন করার দরকার হয় তবে আপনি একটি সংস্করণ 3 বা সংস্করণ 5 চান you আপনি যদি সেই আলগোরিদমকে একই ইনপুট খাওয়ান তবে এটি একই আউটপুট উত্পন্ন করবে।
অরেগেন

3
ক্লাউড কম্পিউটিং পরিবেশে (যেমন এডাব্লুএস বা জিএই), মনে হয় সংস্করণ 1 এর দুর্বলতা বিস্মৃত হয়ে গেছে। ভবিষ্যদ্বাণী এবং / অথবা ট্রেসিবিলিটি বাদ দিয়ে সময়ের সাথে সাথে প্রদত্ত অ্যাপ্লিকেশনটির ইউইউডি জেনারেটরের সাথে হাজার হাজার বিভিন্ন ম্যাক ঠিকানা প্রয়োগ হওয়ার সম্ভাবনা রয়েছে।
মহিষ রেবোর

3
@ ব্যবহারকারী 239558 একটি ইউইউডিউর জন্য স্বীকৃত লক্ষ্যটি তার স্বাতন্ত্র্য, ইউআইডিভিভি 5 এখনও পছন্দসই হতে পারে।
এপিকিউরিস্ট

7
সংস্করণ 1 সম্পর্কে "প্রস্তাবিত নয়" হিসাবে মন্তব্যটি অত্যধিক সরল istic অনেক পরিস্থিতিতে, এগুলি প্রকৃতপক্ষে ভাল এবং পছন্দসই। তবে আপনার যদি কোনও ইউইউডি থেকে এই আইটেমগুলির যে কোনও তথ্য ফাঁস দেওয়ার বিষয়ে সুরক্ষা উদ্বেগ থাকে যা অবিশ্বাস্য অভিনেতাদের জন্য উপলব্ধ করা যেতে পারে: (ক) ইউইউডি তৈরির মেশিনের ম্যাক ঠিকানা, বা (খ) তৈরি হওয়ার তারিখ-সময়, তারপরে সংস্করণ 1 এড়িয়ে চলুন যদি এই দুটি টুকরো তথ্য সংবেদনশীল না হয় তবে সংস্করণ 1 এ যাওয়ার এক দুর্দান্ত উপায়।
বাসিল বাউরক

9
সংস্করণ 2 এর কি হয়েছিল?
ম্যাথু উ

53

আপনি যদি একটি এলোমেলো নম্বর চান, একটি এলোমেলো নম্বর লাইব্রেরি ব্যবহার করুন। আপনি যদি কার্যকরভাবে 0.00 ... আরও অনেকগুলি এখানে ... 001% সংঘর্ষের সম্ভাবনা সহ একটি অনন্য শনাক্তকারী চান তবে আপনার ইউআইডিভিভি 1 ব্যবহার করা উচিত। ইউআইডিভি 3 এবং ভি 5 এর জন্য নিকের পোস্ট দেখুন।

ইউআইডিভিভি 1 নিরাপদ নয়। এটা হতে বোঝানো হয় না। এটি অনন্য অনুমানযোগ্য নয়, বোঝার জন্য। ইউআইডিভিভি 1 বর্তমান টাইমস্ট্যাম্প ব্যবহার করে একটি মেশিন শনাক্তকারী, এবং কিছু এলোমেলো-ইশ স্টাফ ব্যবহার করে এমন নম্বর তৈরি করতে পারে যা আর কখনও সেই অ্যালগরিদমের দ্বারা আর তৈরি করা যায় না। এটি কোনও লেনদেন আইডির জন্য উপযুক্ত (এমনকি প্রত্যেকে লক্ষ লক্ষ লেনদেন / গুলি করে থাকলেও)।

সত্যি কথা বলতে কি, ইউআইডিএভিভি 4 কেন বিদ্যমান তা আমি বুঝতে পারি না ... আরএফসি 4122 পড়ে , দেখে মনে হচ্ছে যে সংস্করণটি সংঘর্ষের সম্ভাবনা দূর করে না। এটি কেবল একটি এলোমেলো সংখ্যা জেনারেটর। যদি এটি সত্য হয় তবে আপনার কাছে বিশ্বের দুটি মেশিনের খুব ভাল সম্ভাবনা থাকার পরে অবশেষে একই "ইউইউডি" ভি 4 তৈরি করা হয় (উদ্ধৃতিগুলি কারণ ইউ.এনভার্সিয়াল ইউ.এনইউকনেসকে নিশ্চিত করার কোনও ব্যবস্থা নেই) mechanism এই পরিস্থিতিতে, আমি মনে করি না যে অ্যালগরিদম কোনও আরএফসি-র অন্তর্ভুক্ত যা অনন্য মান উত্পন্ন করার পদ্ধতি বর্ণনা করে। এলোমেলোতা উত্পাদন সম্পর্কে এটি কোনও আরএফসি-র অন্তর্ভুক্ত। এলোমেলো সংখ্যার একটি সেট জন্য:

chance_of_collision = 1 - (set_size! / (set_size - tries)!) / (set_size ^ tries)

67
আপনি দুটি ইউআইডি সংস্করণ 4 বাস্তবায়ন সংঘর্ষ দেখতে পাবেন না, যদি না আপনি এক সেঞ্চুরির জন্য প্রতি সেকেন্ডে এক বিলিয়ন ইউইউডি তৈরি করে এবং একটি কয়েন ফ্লিপ না জিতেন । মনে রাখবেন, set_sizeএটি 2 ^ 122, যা খুব বড়
কেভিন

8
ভি 4 অ্যালগরিদম সিরিয়াল নয়, এর অর্থ এমন একটি সুযোগ রয়েছে যা ভি 4 দ্বারা উত্পাদিত প্রথম দুটি ইউআইডি মেলতে পারে। কেবলমাত্র অনেকগুলি বিকল্প রয়েছে তার অর্থ এই নয় যে আপনি পুনরাবৃত্তি তৈরি করার আগে আপনাকে অনন্য বিকল্পগুলি শেষ করতে হবে। যে কোনও সময় ঘটতে পারে।
অ্যারেজেন

7
আপনি আসলে গণিত করতে ব্যর্থ হচ্ছেন। আমরা (একটি প্রজাতি হিসাবে) প্রতি সেকেন্ডে 1 বিলিয়ন ইউইউডি উত্পাদন করছি না। সুতরাং আমাদের প্রথম সংঘর্ষ (গড়) হওয়া পর্যন্ত 100 বছরেরও বেশি সময় আছে ।
কেভিন

31
ভি 4 "সম্ভবত" সংঘর্ষে পড়তে পারে, তবে সম্ভাব্যতা খুব কম যে বেশিরভাগ ব্যবহারের ক্ষেত্রে এটি ঝুঁকিপূর্ণ। পুনঃ: "বিশ্বের দুটি মেশিন শেষ পর্যন্ত একই 'ইউআইডিএভি 4' তৈরি করে, ভাল, নিশ্চিত, তবে এটি কোনও সমস্যা নয় কারণ বিশ্বের বেশিরভাগ মেশিনই ইউআইডি'র বিভিন্ন প্রসঙ্গে তাদের ব্যবহার করে। আমি বলতে চাইছি, যদি আপনি নিজের অভ্যন্তরীণ অ্যাপ্লিকেশনটির মতো করে থাকেন তবে আমি যদি নিজের অভ্যন্তরীণ অ্যাপ্লিকেশনটির জন্য একই ইউআইডিটি উত্পন্ন করি তবে তাতে কিছু আসে যায় না। সংঘর্ষগুলি কেবল তখনই ঘটে যদি তারা একই প্রসঙ্গে হয়। (মনে রাখবেন, এমনকি কোনও অ্যাপ্লিকেশনের মধ্যেও অনেক ইউইউডি-র পুরো অ্যাপ্লিকেশনটিতে অনন্য হতে হবে না, কেবলমাত্র প্রসঙ্গটিতে তারা ব্যবহার করছেন)

6
সুতরাং এটি শোনাচ্ছে, মত যদি আপনি আপনার GUID প্রয়োজন হবে না নিরাপদ হতে, ব্যবহার সংস্করণ 1. যদি আপনি প্রয়োজন এটা নিরাপদ, এবং ভাগ্যবান অনুভব (অথবা সত্যিই হতভাগ্য মনে হয় না) ব্যবহারের সংস্করণ 4.
Vaccano

16

এটি একটি খুব সাধারণ প্রশ্ন। একটি উত্তর: "এটি নির্ভর করে আপনি কোন ধরণের ইউআইডি তৈরি করতে চান"। তবে এর থেকে আরও ভাল একটি হ'ল: "ভাল, আমি উত্তর দেওয়ার আগে, আপনি কি আমাদের বলতে পারবেন যে বেশিরভাগ আধুনিক অপারেটিং সিস্টেমগুলি সরবরাহ করে এমন ইউইউডি প্রজন্মের কার্যকারিতা কল করার পরিবর্তে আপনার নিজের ইউআইডি প্রজন্মের অ্যালগরিদমকে কোড করার দরকার কেন?"

এটি করা সহজ এবং নিরাপদ এবং আপনার সম্ভবত নিজের তৈরি করার দরকার নেই , তাই কোনও বাস্তবায়ন কোডিং কেন বিরক্ত করবেন? সেক্ষেত্রে উত্তরটি আপনার ও / এস, প্রোগ্রামিং ভাষা বা কাঠামো যা সরবরাহ করে তা ব্যবহারে পরিণত হয়। উদাহরণস্বরূপ, উইন্ডোজ-এ, কোক্রিয়াটগুইড বা ইউইডক্রিয়েট বা ব্যবহারযোগ্য অসংখ্য ফ্রেমওয়ার্ক থেকে পাওয়া বিভিন্ন র‍্যাপারগুলির মধ্যে একটি রয়েছে। লিনাক্সে 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


4
আমি অনুমান করবো কারণ ওপি জিজ্ঞাসা করেনি: বেশিরভাগ আধুনিক অপারেটিং সিস্টেমগুলি সরবরাহ করে এমন ইউআইডি প্রজন্মের কার্যকারিতা কল করার পরিবর্তে আমি কীভাবে "আমার নিজের ইউআইডি প্রজন্মের অ্যালগরিদমকে কোড করব?"
অ্যারেজেন

এটি বাদ দিয়ে, আমি এটি ইউআইডিভি 3 এবং ভি 5 এর একটি ভাল ব্যাখ্যা বলে মনে করি। আমার কেন মনে হয় ভি 1 ভাল পছন্দ হতে পারে সে সম্পর্কে আমার উত্তর নীচে দেখুন।
অ্যারেজেন

NAMESPACE_URL কী? এটি আমি একটি পরিবর্তনশীল পেতে পারি? কোথা থেকে?
স্ট্যাকডেভ

@stackdave NAMESPACE_URLএকটি UUID সাধারণত সমান 6ba7b811-9dad-11d1-80b4-00c04fd430c8, এর 30 পৃষ্ঠার প্রণীত সুপারিশ নিম্নলিখিত বোঝায় যা RFC-4122
জেমি রিডিং

2

Postgres ডকুমেন্টেশনUUID এর মধ্যে পার্থক্য বর্ণনা করে । তাদের মধ্যে একটি দম্পতি:

V3:

uuid_generate_v3(namespace uuid, name text) - এই ফাংশনটি নির্দিষ্ট ইনপুট নাম ব্যবহার করে প্রদত্ত নেমস্পেসে একটি সংস্করণ 3 ইউআইডি উত্পন্ন করে।

V4:

uuid_generate_v4 - এই ফাংশনটি একটি সংস্করণ 4 ইউআইডি উত্পন্ন করে, যা এলোমেলো সংখ্যা থেকে সম্পূর্ণ উত্পন্ন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.