আপনি কখন ডিজাইনের অংশ হিসাবে সত্যই ইউআইডি ব্যবহার করতে বাধ্য হন?


123

আমি সত্যই ইউআইডির পয়েন্টটি দেখতে পাচ্ছি না । আমি জানি যে সংঘর্ষের সম্ভাবনা কার্যকরভাবে শূন্য , তবে কার্যকরভাবে শূন্যতাও অসম্ভবের কাছাকাছি নয়।

আপনার কাছে ইউআইডি ব্যবহার করা ছাড়া কোনও বিকল্প নেই এমন কোনও উদাহরণ দিতে পারেন? আমি যে সমস্ত ব্যবহার দেখেছি তার মধ্যে আমি ইউআইডি ছাড়াই বিকল্প নকশা দেখতে পাচ্ছি। অবশ্যই ডিজাইনটি আরও জটিল হতে পারে তবে কমপক্ষে এটির ব্যর্থতার শূন্য-সম্ভাবনা নেই।

ইউআইডি আমার কাছে গ্লোবাল ভেরিয়েবলের মতো গন্ধযুক্ত। সহজ ডিজাইনের জন্য বৈশ্বিক পরিবর্তনগুলি তৈরি করার অনেকগুলি উপায় রয়েছে তবে এটি কেবল অলস নকশা।


23
সবকিছুরই ব্যর্থতার শূন্যতার সুযোগ থাকে।
ইউইউডিগুলির

16
আসলে, "কার্যকরভাবে শূন্য" অসম্ভবের খুব কাছাকাছি।
এমকিপিপি

21
নাহ, এটি অসম্ভব অসম্ভব থেকে দূরে
পাইরোলিস্টিকাল

32
@ পাইরোলিস্টিকাল যখন আপনি "অনন্ত" এর মতো শব্দগুলি ছড়িয়ে দেওয়া শুরু করেন, আপনি সফ্টওয়্যার বিকাশের জগত ছেড়ে চলেছেন। কম্পিউটার সায়েন্স তত্ত্বটি বাস্তব সফ্টওয়্যার লেখার চেয়ে সম্পূর্ণ ভিন্ন আলোচনা।
রেক্স এম

2
আমি বেশিরভাগই বন্ধ করব কারণ গিট এর
পাইরোলিস্টিকাল

উত্তর:


617

আমি রুবির জন্য ইউআইডি জেনারেটর / পার্সার লিখেছি, তাই আমি নিজেকে বিষয়টিতে যুক্তিসঙ্গতভাবে সুবহিত বলে মনে করি। চারটি বড় ইউআইডি সংস্করণ রয়েছে:

সংস্করণ 4 ইউআইডিগুলি মূলত একটি ক্রিপ্টোগ্রাফিক সুরক্ষিত র্যান্ডম সংখ্যা জেনারেটর থেকে টানা এলোমেলোতার মাত্র 16 বাইট, ইউআইডি সংস্করণ এবং বৈকল্পিক সনাক্ত করতে কিছু বিট-টুইডলিং সহ। এগুলির সংঘর্ষের চূড়ান্ত সম্ভাবনা নেই, তবে এটি ঘটতে পারে যদি কোনও পিআরএনজি ব্যবহার করা হয় বা যদি আপনি কেবল সত্যিই, সত্যিকারের, সত্যই, সত্যই দুর্ভাগ্যজনক হয়ে থাকেন।

সংস্করণ 5 এবং সংস্করণ 3 ইউআইডিগুলি ইউএইউডি তৈরির জন্য ইতিমধ্যে স্বতন্ত্র ডেটার একটি অংশের সাথে একটি নেমস্পেস একত্রিত করতে যথাক্রমে SHA1 এবং MD5 হ্যাশ ফাংশন ব্যবহার করে। এটি উদাহরণস্বরূপ, আপনাকে একটি ইউআরএল থেকে একটি ইউইউডি উত্পাদন করতে দেয়। অন্তর্নিহিত হ্যাশ ফাংশনটিরও যদি সংঘর্ষ হয় তবে এখানে সংঘর্ষগুলি সম্ভব।

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

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

এছাড়াও, 2 ^ 64 * 16 256 এক্সাবাইট। যেমনটি, আপনার একক অ্যাপ্লিকেশন স্পেসে আইডি সংঘর্ষের 50% সম্ভাবনা থাকার আগে আপনাকে 256 এক্সবাইটের আইডি সংরক্ষণ করতে হবে।


8
এটি এখন পর্যন্ত সেরা ব্যাখ্যা। কেন জানি শীর্ষে ভোট দেওয়া হচ্ছে না তা আমি জানি না। আপনি স্পারকমনগারকে।
ব্র্যাড বার্কার

1
@ চামনাপ আমি ইউআইডিটিউলগুলি লিখেছি। ইউআইডিগুলিকে একটি পূর্ণসংখ্যা বা তাদের কাঁচা বাইট আকারে রূপান্তর করা যেতে পারে এবং বাইনারি হিসাবে যথেষ্ট ছোট হবে।
বব আমান

1
@ চামনাপ uuid.rawআপনাকে বাইট স্ট্রিং দেবে। hashপদ্ধতি আপনার জন্য উপযোগী নয়। এটি রুবির অভ্যন্তরীণভাবে হ্যাশ টেবিল এবং তুলনা অপারেশনের জন্য ব্যবহৃত হয়। বিভিন্ন ইউইউডি উপস্থাপনায় এবং থেকে রূপান্তর করার জন্য সমস্ত পদ্ধতি শ্রেণি পদ্ধতি হিসাবে সংজ্ঞায়িত করা হয় এবং এর সাথে উপসর্গ করা উচিত "parse"
বব আমান

3
1990-এ @ বোবিআমন আমার একটি এজিস সিস্টেমে 12 টি ইউইউডি সংঘর্ষ হয়েছিল, একটি ত্রুটিযুক্ত এফপিইউ হিসাবে প্রমাণিত হয়েছে, তবে ভেবেছিলাম যে এটি ঘটতে পারে তা আপনাকে জানাব (যদিও গত ৩০++ বছরের প্রোগ্রামিংয়ের পরে আর হয়নি) । খুব সুন্দর ব্যাখ্যা, খুব বিটিডব্লিউ, লোকদের দেওয়ার জন্য এটি এখন আমার ডিএফএটিও ইউইউডি রিফায়েন্স পোস্ট :)
GMasucci

2
@ কেকিউআর আপনি একেবারেই ঠিক বলেছেন যে এটি জন্মদিনের সমস্যা, তবে কোনও এন-বিট কোডের জন্য, জন্মদিনের প্যারাডক্স সমস্যাটি হ্রাস পেয়ে ২ ^ (এন / ২) হয়ে যায়, যা এই ক্ষেত্রে আমার জবাব অনুসারে 2 ^ 64 হয় ।
বব আমান

69

ইউআইডিরা আপনাকে যে জিনিসটি কিনে তা অন্যথায় করা খুব কঠিন সেটি হ'ল কেন্দ্রীয় কর্তৃপক্ষের সাথে পরামর্শ বা সমন্বয় না করে অনন্য শনাক্তকারী । কোনও ধরণের পরিচালিত অবকাঠামো ছাড়াই এ জাতীয় জিনিস পেতে সক্ষম হবার সাধারণ সমস্যা হ'ল ইউআইডিরা যে সমস্যাটি সমাধান করে।

আমি পড়েছি জন্মদিনের প্যারাডক্স অনুযায়ী 2 U 64 ইউইউডি উত্পন্ন হওয়ার পরে কোনও ইউইউডি সংঘর্ষ হওয়ার সম্ভাবনা 50% হয়। এখন 2 ^ 64 হ'ল একটি দুর্দান্ত সংখ্যা, তবে সংঘর্ষের 50% সম্ভাবনা অনেক বেশি ঝুঁকিপূর্ণ বলে মনে হচ্ছে (উদাহরণস্বরূপ, সংঘর্ষের 5% সম্ভাবনা থাকার আগে কতগুলি ইউইউডি থাকা দরকার - এমনকি এটি সম্ভবত সম্ভাবনার চেয়েও বড় বলে মনে হচ্ছে) ।

বিশ্লেষণে সমস্যাটি দ্বিগুণ is

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

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


1
কংক্রিটের উদাহরণ? সিএম / ডিসিই ইউইউআইডিগুলি - তাদের অর্পণ করার কোনও অধিকার নেই, এবং কেউই এই দায়িত্ব নিতে চায়নি এবং / অথবা কেউই সেখানে কর্তৃপক্ষ হতে চায়নি। বিতরণযোগ্য ডেটাবেসগুলিতে নির্ভরযোগ্য লিঙ্ক নেই এবং কোনও মাস্টার নেই।
মাইকেল বুড়

3
আরও দৃ concrete় উদাহরণ - একটি ব্যাংকিং অ্যাপ্লিকেশন। এটি একাধিক ডেটা সেন্টার ইনস্টল করা থাকে, প্রতিটি দেশের জন্য একটি করে, প্রতিটি ডেটা সেন্টারে একটি ডিবি থাকে। একাধিক ইনস্টলেশন বিভিন্ন বিধি মানার জন্য আছে। প্রতিটি গ্রাহকের পুরো সেটটিতে কেবলমাত্র একজন গ্রাহকের রেকর্ড থাকতে পারে .....
ভিনিতে রেনল্ডস

(পূর্ববর্তী মন্তব্যের ধারাবাহিকতা) সামগ্রিক প্রতিবেদন এবং ট্র্যাকিংয়ের উদ্দেশ্যে (সমস্ত ইনস্টলেশন জুড়ে) গ্রাহক আইডি উত্পন্ন করার জন্য আপনার একটি কেন্দ্রীয় সার্ভার থাকতে হবে বা পৃথক ইনস্টলেশনগুলি গ্রাহক আইডি হিসাবে পরিবেশন করার জন্য ইউআইডি তৈরি করতে হবে (স্পষ্টতই ইউআইডিগুলি ব্যবহার করা যাবে না) রিপোর্টে)।
ভিনিত রেনল্ডস 0

আপনি যখন সদৃশ হওয়ার 50% সুযোগ পেয়েছেন, আপনি ইতিমধ্যে ডুবে যাচ্ছেন। কেউ 0.0000001% সুযোগ পাওয়ার জন্য প্রয়োজনীয় ভলিউম দেখায়। একাধিক অটো-ইনক্রিমেন্ট ডেটাবেস 1 থেকে এন থেকে শুরু করে এবং n দ্বারা প্রতিবার বাড়ানো একই সমস্যাটিকে কার্যকরভাবে সমাধান করে।
গর্ডন

2
কোনও সদৃশ-সমালোচনামূলক উপায়ে ব্যর্থ কেন্দ্রীয় কর্তৃপক্ষের
প্রতিক্রিয়াগুলির

33

সবকিছুরই ব্যর্থতার শূন্যতার সুযোগ থাকে। আমি ইউইউডিগুলির সংঘর্ষের চেয়ে সমস্যার (যেমন আপনি যে কোনও কিছু ভাবতে পারেন) সম্ভাব্যতার চেয়ে বেশি মনোনিবেশ করব


পাইরোলিস্টিকালের অনুরোধে উত্তর হিসাবে যুক্ত হয়েছে
ড্যানসিংগারম্যান

16

"যুক্তিসঙ্গতভাবে" বা যেমন আপনি এটিকে "কার্যকরভাবে" রেখেছেন তেমন গুরুত্ব দেওয়া: আসল বিশ্ব কীভাবে কাজ করে তা যথেষ্ট। "ব্যবহারিকভাবে অনন্য" এবং "সত্যই অনন্য" এর মধ্যে যে ফাঁকটি coveringাকতে জড়িত গণ্য কাজের পরিমাণ বিপুল। স্বতন্ত্রতা হ্রাস রিটার্ন সহ একটি বক্ররেখা। এই বক্ররেখার এক পর্যায়ে, "সেখানে যথেষ্ট অনন্য" এখনও সাশ্রয়ী মূল্যের মধ্যে একটি লাইন রয়েছে এবং তারপরে আমরা খুব খাড়াভাবে বাঁকাই। আরও স্বতন্ত্রতা যোগ করার ব্যয়টি বেশ বড় হয়ে যায়। অসীমের স্বাতন্ত্র্যের অনন্ত মূল্য রয়েছে।

UUID / GUID অপেক্ষাকৃত বলতে, একটি গণনা দ্রুত এবং সহজ উপায় একটি আইডি যা হতে পারে জেনারেট করতে হয় যুক্তিসঙ্গতভাবে বিশ্বজনীনভাবে অনন্য গণ্য করা। এটি এমন অনেক সিস্টেমে খুব গুরুত্বপূর্ণ যা পূর্বে সংযুক্ত সিস্টেম থেকে ডেটা একীকরণ করা প্রয়োজন। উদাহরণস্বরূপ: যদি আপনার কাছে একটি কন্টেন্ট ম্যানেজমেন্ট সিস্টেম থাকে যা দুটি পৃথক প্ল্যাটফর্মে চলে তবে কোনও এক সময় অন্য সিস্টেমের মধ্যে সামগ্রীটি আমদানি করা দরকার। আপনি আইডি পরিবর্তন করতে চান না, সুতরাং সিস্টেম এ থেকে ডেটাগুলির মধ্যে আপনার রেফারেন্স অক্ষত থাকবে তবে আপনি সিস্টেম বিতে তৈরি ডেটার সাথে কোনও সংঘর্ষ চান না। একটি ইউইউডি এটি সমাধান করে।


সমাধান। অলসতা করবেন না এবং উল্লেখগুলি আপডেট করুন। সঠিকভাবে এটা করো.
পাইরিওলিস্টিকাল

8
অলসতার সাথে এর কোনও যোগসূত্র নেই - নীতিটি যদি কোনও আইটেমের আইডি স্থায়ী এবং অপরিবর্তনীয় বলে বিবেচিত হয়, তবে আইডি পরিবর্তন হয় না। সুতরাং আপনি চান যে আইডিটি শুরু থেকেই অনন্য হয়ে যায় এবং আপনি এটি করতে চান যে সমস্ত সিস্টেম শুরু থেকে কোনওভাবে সংযুক্ত হওয়া প্রয়োজন।
মাইকেল বুড়

আপনার তখন প্রসঙ্গ দরকার। আপনার যদি দুটি অনন্য
আইডির

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

16

কোনও ইউইউডি তৈরি করা কখনই একেবারেই প্রয়োজন হয় না। তবে এটি এমন স্ট্যান্ডার্ড থাকা সুবিধাজনক যেখানে অফলাইন ব্যবহারকারীরা একে অপরের সংঘর্ষের খুব কম সম্ভাবনা সহ কোনও কিছুর জন্য কী তৈরি করতে পারেন।

এটি ডাটাবেস প্রতিলিপি সমাধান ইত্যাদি সহায়তা করতে পারে ...

ওভারহেড বা সংঘর্ষের সম্ভাবনা ছাড়াই কোনও কিছুর জন্য অনন্য কী উত্পন্ন করা সহজ হবে অনলাইন ব্যবহারকারীদের পক্ষে, তবে ইউইউডিগুলির পক্ষে এটি নয়।

যাইহোক, সংঘর্ষের সম্ভাবনা সম্পর্কিত একটি শব্দ, উইকিপিডিয়া থেকে নেওয়া:

এই সংখ্যাগুলিকে পরিপ্রেক্ষিতে রাখার জন্য, একর বার্ষিক উল্কা দ্বারা আঘাতের ঝুঁকির ঝুঁকি 17 বিলিয়ন এক বছরে হওয়ার সম্ভাবনা রয়েছে, যা এক বছরে কয়েক দশ লক্ষ ট্রিলিয়ন ইউআইডি তৈরি করার এবং তার সাথে একটি সদৃশ তৈরির প্রতিক্রিয়া। অন্য কথায়, পরের 100 বছরের জন্য প্রতি সেকেন্ডে 1 বিলিয়ন ইউইউডি উত্পন্ন করার পরে, কেবল একটি নকল তৈরির সম্ভাবনা প্রায় 50% হবে।


4
সরল, অফলাইন ব্যবহারকারীদের কী তৈরি করতে দেবেন না। সিস্টেমটি অনলাইনে না যাওয়া পর্যন্ত অস্থায়ী কীগুলি নির্ধারিত করুন যাতে আসল কীগুলি তৈরি করা যায়।
পাইরোলিস্টিকাল

এটি আমার মতে খুব সহায়ক একটি উত্তর ... সম্ভাবনার জন্য নিজেকে একরকম উপমা দেওয়ার প্রস্তাব দিয়েছিল, কারণ মনে হয়েছিল যে ওপি এর অর্থ বুঝতে পারছে না, তবে আপনি সম্ভবত এটি করেছেন বলে মনে হচ্ছে।
নলডোরিন

আমি শান্ত বুঝতে সম্ভাবনা কার্যকরভাবে শূন্য। আমার কাছে ইউআইডি ব্যবহার অলস ডিজাইন এবং আমি কেবল এটি দেখতে চেয়েছিলাম যে আপনি সর্বদা এটি এড়াতে পারবেন কিনা
পাইরোলিস্টিকাল

এটি যথেষ্ট ন্যূনতম, যতক্ষণ না আপনি দেখেন যে নিম্ন সম্ভাবনাটিকে এমনকি সবচেয়ে চরম পরিস্থিতিতে বিবেচনা করা দরকার, আমি এখন ধরে নিচ্ছি যে আপনি যা করছেন।
নলডোরিন

13

একটি ক্লাসিক উদাহরণ হ'ল আপনি যখন দুটি ডাটাবেসের মধ্যে প্রতিলিপি করছেন।

ডিবি (এ) ইন্ট আইডি 10 সহ একটি রেকর্ড সন্নিবেশ করায় এবং একই সাথে ডিবি (বি) আইডি 10-এ আ রেকর্ড তৈরি করে This এটি একটি সংঘর্ষ।

ইউআইডি-র সাথে এটি মিলবে না কারণ তারা মেলে না। (প্রায় অবশ্যই)


1
ঠিক আছে, তারপরে ডিবি এটিকে এমনকি আইডি এবং ডিবি বি বিজোড় আইডি ব্যবহার করুন। সম্পন্ন, কোনও ইউইউডি নেই।
পাইরোলিস্টিকাল

2
তিনটি ডিবি'র সাথে, 3
গুণগুলি

20
আপনি যদি 2/3 / যাইহোক গুণগুলি ব্যবহার করেন তবে আপনি পরে মিশ্রণে একটি নতুন সার্ভার যুক্ত করলে কী হবে? আপনাকে একটি স্যুইচ সমন্বয় করতে হবে যাতে আপনি নতুন সার্ভারে n + 1 গুণক ব্যবহার করছেন, এবং সমস্ত পুরানো সার্ভারকে নতুন অ্যালগরিদমে নিয়ে যেতে হবে এবং সংঘর্ষগুলি এড়াতে আপনি যখন এটি করছেন তখন আপনাকে সমস্ত কিছু বন্ধ করতে হবে during অ্যালগরিদম সুইচ। বা ... আপনি কেবল প্রত্যেকে ELSE এর মতো ইউআইডি ব্যবহার করতে পারেন।
বব আমান

3
এটি এর চেয়েও খারাপ, কারণ আপনি 2 এর গুণক এবং 4 এর গুণকগুলির মধ্যে পার্থক্য কীভাবে করবেন? বা 3 টি বনাম 6 এর গুণক? আসলে, আপনাকে বহুসংখ্যক মৌলিক সংখ্যার সাথে আটকে থাকতে হবে। Blech! শুধু ইউআইডি ব্যবহার করুন, এটি কাজ করে। মাইক্রোসফ্ট, অ্যাপল এবং অগণিত অন্যরা তাদের উপর নির্ভর করে এবং তাদের বিশ্বাস করে।
পাশেরউইংগুই

2
@ পাশওয়ারগুয়ে, জিইউডিতে আমরা বিশ্বাস করি! :)
রন ক্লেইন

13

শূন্যেরও সম্ভাবনা নেই যে আপনার শরীরের প্রতিটি কণা আপনি যে চেয়ারে বসেছেন তার সাথে সাথে একই সাথে সুড়ঙ্গ করবে এবং আপনি হঠাৎ নিজেকে মেঝেতে বসে দেখতে পাবেন।

তুমি কি এটা নিয়ে চিন্তা করো?


7
অবশ্যই তা নয়, এটি আমি নিয়ন্ত্রণ করতে পারি এমন কিছু নয়, তবে আমি ডিজাইন করতে পারি।
পাইরোলিস্টিকাল

4
@Pyrolistical হল যে সত্যিই, আমি সত্যিই কারণ আপনি যে সম্পর্কে চিন্তা করবেন না মানে? তাহলে আপনি বেশ অদ্ভুত। এবং আরও, আপনি ঠিক না। আপনি এটি নিয়ন্ত্রণ করতে পারেন । আপনি যদি কয়েক পাউন্ড অর্জন করেন তবে আপনি এই জাতীয় ঘটনার সম্ভাবনা উল্লেখযোগ্যভাবে হ্রাস করবেন। আপনি কি বিবেচনা করেন যে আপনার ওজন বাড়ানো উচিত? :-)
ভিকি

8

ইউআইডিগুলি এড়াতে আমার একটি পরিকল্পনা আছে। কোথাও একটি সার্ভার সেট আপ করুন এবং এটি রাখুন যাতে প্রতিবারই কোনও কোনও সফ্টওয়্যার কোনও সর্বজনীন অনন্য শনাক্তকারী চায়, তারা সেই সার্ভারটির সাথে যোগাযোগ করে এবং এটি একটি হস্তান্তরিত হয়। সরল!

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

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


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

7
@ বাসিলবার্ক আমি প্রথম অনুচ্ছেদে কটাক্ষ ব্যবহার করছি, যদি তা স্পষ্ট না হয়।
ডোনাল ফেলো

5

সংঘর্ষের সম্ভাবনা সম্পর্কে আমি সমস্ত আলোচনা করি না। আমি সংঘর্ষের বিষয়ে চিন্তা করি না। আমি যদিও পারফরম্যান্স সম্পর্কে যত্নশীল।

https://dba.stackexchange.com/a/119129/33649

ইউআইডিগুলি হ'ল খুব বড় টেবিলগুলির জন্য একটি কার্যকারিতা বিপর্যয়। (200 কে সারিগুলি "খুব বড়" নয়))

আপনার # 3 সত্যই খারাপ যখন অক্ষর সেটটি utf8 হয় - চর (36) 108 বাইট দখল করে!

ইউআইডি (জিইউআইডি) খুব "এলোমেলো"। বড় টেবিলগুলিতে একটি অনন্য বা একটি প্রাথমিক কী হিসাবে তাদের ব্যবহার করা অত্যন্ত দক্ষ। এটি প্রতিবার সারণি / সূচকের চারপাশে ঝাঁপিয়ে পড়ার কারণে আপনি যখন কোনও নতুন ইউইউডি লিখুন বা ইউইউডি দ্বারা নির্বাচন করুন। যখন টেবিল / সূচকটি ক্যাশে ফিট করার জন্য খুব বড় হয় (ইনডোডবি_বাফলার_পুল_সাইজ দেখুন, যা র‌্যামের চেয়ে ছোট হতে হবে, সাধারণত %০%) তখন 'পরবর্তী' ইউআইডি ক্যাশে নাও হতে পারে, সুতরাং একটি ধীর ডিস্ক হিট। যখন টেবিল / সূচকটি ক্যাশের চেয়ে 20 গুণ বড় হয়, কেবলমাত্র 1/20 তম (5%) হিটগুলি ক্যাশ করা হয় - আপনি I / O- আবদ্ধ।

সুতরাং, ইউআইডিগুলি ব্যবহার করবেন না যদি না হয়

আপনার কাছে "ছোট" সারণী রয়েছে বা বিভিন্ন স্থান থেকে অনন্য আইডি তৈরির কারণে আপনার সত্যই এগুলির প্রয়োজন (এবং এটি করার জন্য অন্য কোনও উপায় বের করেননি)। ইউআইডিগুলিতে আরও: http://mysql.rjweb.org/doc.php/uuid (এটি স্ট্যান্ডার্ড 36-চর ইউআইডি এবং বিনারি (16) এর মধ্যে রূপান্তর করার জন্য ফাংশন অন্তর্ভুক্ত করে))

একই টেবিলে একটি অনন্য স্বীকৃতি এবং একটি অনন্য ইউইউডি উভয় থাকা নষ্ট।

যখন একটি INSERT দেখা দেয়, সমস্ত অনন্য / প্রাথমিক কীগুলি নকলের জন্য অবশ্যই পরীক্ষা করা উচিত। একটি মূল কী থাকার জন্য InnoDB- র প্রয়োজনীয়তার জন্য অনন্য কী যথেষ্ট sufficient বিনারি (১)) (১ by বাইট) কিছুটা ভারী (একে পিকে তৈরির পক্ষে যুক্তি), তবে খুব খারাপ নয়। যখন আপনার গৌণ কী থাকে তখন স্নিগ্ধতা গুরুত্বপূর্ণ। InnoDB নিঃশব্দে প্রতিটি মাধ্যমিক কীটির শেষে পিকে ট্যাক করে। এখানে মূল পাঠটি হ'ল মাধ্যমিক কীগুলির সংখ্যা হ্রাস করা, বিশেষত খুব বড় টেবিলগুলির জন্য। তুলনার জন্য: INT UNSIGNED হল 4 বাইট যার বিস্তৃতি 0..4 বিলিয়ন। BIGINT 8 বাইট।


4

আপনি যদি কেবলমাত্র একটি নতুন ডাটাবেস তৈরির আগে যেমন ডাটাবেসটিকে জিজ্ঞাসা করতে একটি সাধারণ ডাটাবেস অ্যাপ্লিকেশনটির বিকল্পগুলির দিকে নজর দেন, আপনি শীঘ্রই দেখতে পাবেন যে ইউআইডি ব্যবহার করে কার্যকরভাবে আপনার সিস্টেমের জটিলতা হ্রাস করতে পারে। মঞ্জুরিপ্রাপ্ত - আপনি যদি কী কীগুলি 32 টি বিট ব্যবহার করেন তবে এটি 128 বিট ইউআইইউডের এক চতুর্থাংশে সঞ্চয় করবে। মঞ্জুর করা হয়েছে - ইউইউডি জেনারেশন অ্যালগরিদম কেবল একটি সংখ্যা বাড়ানোর চেয়ে আরও বেশি গণনার শক্তি গ্রহণ করে। কিন্তু কে ভাবে? একটি "কর্তৃপক্ষ" পরিচালনার ওভারহেড অন্যথায় অনন্য সংখ্যা নির্ধারণের জন্য সহজেই তার চেয়ে বেশি হয়ে যায় যা আপনার উদ্দেশ্যযুক্ত স্বতন্ত্রতা আইডি স্পেসের উপর নির্ভর করে প্রস্থের অর্ডার দ্বারা ছাড়িয়ে যায়।


3

ইউআইডি == অলস নকশায় design

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


1

আমার শেষ কাজটিতে, আমরা তৃতীয় পক্ষের কাছ থেকে এমন বস্তু পেয়েছিলাম যা ইউইউডি দিয়ে অনন্যভাবে চিহ্নিত হয়েছিল। আমি একটি ইউইউডি-> দীর্ঘ পূর্ণসংখ্যার অনুসন্ধানের টেবিলটি রেখেছি এবং আমার প্রাথমিক কী হিসাবে দীর্ঘ পূর্ণসংখ্যার ব্যবহার করেছি কারণ এটি সেই পথে দ্রুত ছিল।


হ্যাঁ নিশ্চিত, তৃতীয় পক্ষ আপনাকে ইউআইডি ব্যবহার করতে বাধ্য করছে এমন একটি অন্য বিষয় যা আমি .ুকতে চাই না। ধরে নিচ্ছি আপনার ইউআইডি ব্যবহার করার নিয়ন্ত্রণ আছে বা নেই।
পাইরোলিস্টিকাল

ভাল, একটি "দীর্ঘ পূর্ণসংখ্যা" (128 বিট) আসলে একটি ইউআইডি হয়। এটি কেবল মানুষের ব্যবহারের স্ট্রিং হিসাবে দেখানো হয়েছে। কখনও কখনও এটি সেভাবে সঞ্চারিত হতে পারে তবে স্টোরেজ এবং সূচীকরণের জন্য এটি অবশ্যই আপনার পূর্ণসংখ্যার আকারে আরও দ্রুত হবে you
নিকোল

1

সংস্করণ 1 অ্যালগরিদম ব্যবহার করে মনে হয় যে সীমাবদ্ধতার অধীনে এটি অসম্ভব সংঘর্ষ যে একই ম্যাক ঠিকানা থেকে প্রতি মিলিসেকেন্ডে 10 টিরও কম ইউইউডি উত্পন্ন হয়

ধারণামূলকভাবে, ইউইউডিগুলির জন্য মূল (সংস্করণ 1) প্রজন্মের স্কিমটি ছিল ইউইউডি উত্পাদনকারী কম্পিউটারের ম্যাক ঠিকানা এবং পশ্চিমে গ্রেগরিয়ান ক্যালেন্ডার গ্রহণের পর থেকে 100-ন্যানোসেকেন্ড ব্যবধানের সাথে ইউইউডি সংস্করণটি সংযুক্ত করা to । অনুশীলনে, আসল অ্যালগরিদম আরও জটিল। এই প্রকল্পটি সমালোচিত হয়েছে যে এটি যথেষ্ট পরিমাণে অস্বচ্ছ নয়; এটি ইউইউডি উত্পন্ন কম্পিউটারের পরিচয় এবং এটি যে সময়টি করেছিল তা উভয়ই প্রকাশ করে।

কেউ কীভাবে কাজ করে আমি ভুল ব্যাখ্যা করে যদি কেউ আমাকে সংশোধন করে


এখানে অনেকগুলি সংস্করণ রয়েছে এবং অনেকগুলি সফ্টওয়্যার সিস্টেম (উদাহরণস্বরূপ জাভা) সংস্করণ 1 ব্যবহার করতে পারে না কারণ এতে ম্যাক ঠিকানাটি অ্যাক্সেস করার বিশুদ্ধ জাভা উপায় নেই।
পাইরিওলিস্টিকাল

ম্যাক ঠিকানা পাওয়ার জন্য জাভার অক্ষমতার বিষয়ে: সম্পূর্ণ সত্য নয়। এর জন্য কাজের চারপাশ রয়েছে। আপনি ম্যানুয়ালি একটি কনফিগার ফাইলের মাধ্যমে জেনারেটরের দ্বারা ব্যবহৃত ম্যাক ঠিকানা সেট করতে পারেন। আপনি ifconfig এ কল করতে পারেন এবং আউটপুট পার্স করতে পারেন। আমি যে রুবি ইউইউডি জেনারেটর লিখেছি তা উভয় পদ্ধতিরই ব্যবহার করে।
বব আমান

এছাড়াও, আমার উত্তরে উল্লিখিত হিসাবে, আপনি যদি কোনও সংস্করণ 1 ইউইউডিটির জন্য ম্যাক ঠিকানাটি না পেতে পারেন তবে আপনি তার পরিবর্তে আরএফসি 4122 এর ৪.৪ অনুচ্ছেদ অনুযায়ী 6 টি এলোমেলো বাইট ব্যবহার করেন। সুতরাং আপনি যদি কোনওটিরও ব্যবহার করতে না চান তবে জাভা দুটি কাজের ক্ষেত্র, আপনি এখনও একটি বৈধ সংস্করণ 1 ইউইউডি উত্পাদন করতে পারেন।
বব আমান

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

1

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


0

আপনি যে কোনও ইউআইডি দাবি করে এমন কারওর এপিআই ব্যবহার করতে হবে সেখানে অবশ্যই অন্যরকম সমাধান রয়েছে। কিন্তু এই বিকল্পগুলি ইউআইডি দ্বারা করা সমস্ত সমস্যার সমাধান করবে ? আপনি কি হ্যাকের আরও কয়েকটি স্তর যুক্ত করবেন, প্রত্যেকটি আলাদা সমস্যার সমাধান করার জন্য, যখন আপনি একবারে সমস্ত সমাধান করতে পারতেন?

হ্যাঁ, ইউইউডিগুলির পক্ষে সংঘর্ষ হওয়া তাত্ত্বিকভাবে সম্ভব। যেমনটি অন্যরা উল্লেখ করেছেন, এটি হাস্যকর বিষয় নয় যে এটি বিবেচনা করার মতো নয় to এটি আজও কখনও ঘটেনি এবং সম্ভবত কখনও হয় না। এটি ভুলে যাও

সংঘর্ষ এড়ানোর সর্বাধিক "সুস্পষ্ট" উপায় হ'ল একক সার্ভারটি প্রতিটি sertোকাতে অনন্য আইডি তৈরি করতে দেয় যা স্পষ্টতই গুরুতর পারফরম্যান্স সমস্যা তৈরি করে এবং অফলাইন প্রজন্মের সমস্যাটি একেবারেই সমাধান করে না। উফ।

অন্যান্য "সুস্পষ্ট" সমাধানটি একটি কেন্দ্রীয় কর্তৃপক্ষ যা আগাম অনন্য সংখ্যার ব্লকগুলি হস্তান্তর করে, যা উত্পাদক মেশিনের ম্যাক ঠিকানা (আইইইইইউইউআইয়ের মাধ্যমে) ব্যবহার করে ইউইউডি ভি 1 মূলত যা করে। তবে সদৃশ ম্যাকের ঠিকানাগুলি ঘটে কারণ প্রতিটি কেন্দ্রীয় কর্তৃপক্ষ শেষ পর্যন্ত স্ক্রু আপ করে, তাই বাস্তবে এটি ইউআইডি ভি 4 সংঘর্ষের চেয়ে অনেক বেশি সম্ভাবনা। উফ।

ইউইউডিগুলি ব্যবহারের বিরুদ্ধে সর্বোত্তম যুক্তিটি হ'ল তারা "খুব বড়", তবে একটি (উল্লেখযোগ্যভাবে) ছোট স্কিম অবশ্যম্ভাবীভাবে সবচেয়ে আকর্ষণীয় সমস্যাগুলি সমাধান করতে ব্যর্থ হবে; ইউআইডি'র আকার হ'ল খুব সমস্যা সমাধানে তাদের কার্যকারিতার অন্তর্নিহিত পার্শ্ব প্রতিক্রিয়া।

আপনার সমস্যাটি ইউআইডিএস যা দেয় তা প্রয়োজনের পক্ষে যথেষ্ট বড় নয় এবং সেক্ষেত্রে অন্য কিছু ব্যবহার করতে নির্দ্বিধায় মনে হয়। তবে যদি আপনার সমস্যাটি অপ্রত্যাশিতভাবে বেড়ে যায় (এবং বেশিরভাগ ক্ষেত্রে) তবে আপনি পরে স্যুইচিং শেষ করবেন - এবং এগুলি প্রথম স্থানে ব্যবহার না করার জন্য নিজেকে লাথি মারবেন। সাফল্যের জন্য ডিজাইন করা ঠিক তত সহজ কেন ব্যর্থতার জন্য ডিজাইন করবেন?


-10

ইউইউডিগুলি বিশ্বব্যাপী ভেরিয়েবলগুলির সাথে সম্পর্কিত সমস্ত খারাপ কোডিং অনুশীলনগুলিকে মূর্ত করে, কেবল এটির চেয়ে খারাপ, যেহেতু তারা সুপারগ্লোবাল ভেরিয়েবল যা বিভিন্ন কিটের বিভিন্ন অংশে বিতরণ করা যেতে পারে।

একটি যথাযথ প্রতিস্থাপন মডেল সহ একটি প্রিন্টারের প্রতিস্থাপনের সাথে সম্প্রতি এই জাতীয় সমস্যাটিকে আঘাত করুন এবং আবিষ্কার করেছেন যে ক্লায়েন্ট সফ্টওয়্যারটির কোনওটিই কাজ করবে না।


2
আনন্দিত আমরা এমন একটি সমাজে বাস করি যা এখনও এলোমেলো মতামতের বিপরীতে তথ্যগুলিতে ফোকাস করে, অন্যথায় স্ট্যাক ওভারফ্লোতে আমরা সকলেই চাকরির বাইরে চলে যাব। :)
মাকরানদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.