UUID জেনারেটর
আপনার ব্রাউজারে v4 (র্যান্ডম) বা v7 (সময়-ক্রমানুসারে) UUID তৈরি করুন। র্যান্ডমনেসের জন্য Web Crypto API ব্যবহার করে।
- র্যান্ডম UUID-এর জন্য v4 বা সময়-ক্রমানুসারের জন্য v7 বেছে নিন।
- সংখ্যা সেট করুন (১০০০ পর্যন্ত) এবং তৈরি করুন ক্লিক করুন।
- পুরো তালিকা নিতে সব কপি করুন ব্যবহার করুন, বা একটি লাইন ম্যানুয়ালি নির্বাচন করুন।
এটি কী করে?
v4 UUID হল ১২২ বিট ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী র্যান্ডমনেস — idempotency কী, সেশন ID এবং যেখানেই আপনি একটি অস্বচ্ছ, অ-ক্রমবদ্ধ শনাক্তকারী চান সেখানে সর্বব্যাপী ডিফল্ট। v7 UUID অগ্রবর্তী বাইটে একটি ৪৮-বিট Unix-মিলিসেকেন্ড টাইমস্ট্যাম্প এম্বেড করে, তাই সময়ের কাছাকাছি তৈরি মানগুলি লেক্সিকোগ্রাফিক ক্রমে কাছাকাছি সাজায়। এটি v7-কে ডেটাবেস প্রাইমারি কী-এর জন্য ভালো করে তোলে, যেখানে ইনসার্ট অন্যথায় B-tree ইন্ডেক্স ভেঙে ফেলতে পারে।
উদাহরণ
তিনটি v4 UUID (র্যান্ডম, কোনো ক্রম নেই):
f47ac10b-58cc-4372-a567-0e02b2c3d479
6ba7b810-9dad-11d1-80b4-00c04fd430c8
d1b2c3e4-5678-4abc-9def-0123456789ab একই মিলিসেকেন্ডে তৈরি তিনটি v7 UUID (ভাগ করা প্রিফিক্স লক্ষ্য করুন):
018f8e50-fcaa-7c3c-8d2a-6f5b72e1fd90
018f8e50-fcaa-7c3d-a41f-8c9b07e2c0d1
018f8e50-fcab-7c01-b3e7-1d9a4f5c6e82 সাধারণ ত্রুটি ও সমস্যা
অ্যাপ্লিকেশনে UUID সংযুক্ত করার সময় ডেভেলপাররা যেসব বাস্তব সমস্যায় পড়েন:
- যেখানে ইনসার্শন ক্রম গুরুত্বপূর্ণ সেখানে v4 ব্যবহার করা। ১০ মিলিয়ন র্যান্ডম v4 ইন্ডেক্স করলে B-tree-তে ভারী পেজ স্প্লিট হয়। v4 রাখলে, হয় রাইট অ্যামপ্লিফিকেশনের সাথে মানিয়ে নিন বা প্রাইমারি কী v7-এ পরিবর্তন করুন।
- হাইফেন সরিয়ে সংস্করণ নিবল হারানো। f47ac10b58cc4372a5670e02b2c3d479 এখনও একটি বৈধ ৩২-অক্ষরের hex UUID, কিন্তু ১৩তম অক্ষর (4) হল সংস্করণ মার্কার — একটি র্যান্ডম নিবল নয়। পুরো ৩২ অক্ষরকে র্যান্ডম ধরে নেবেন না।
- Math.random()-এর উপর নির্ভর করা। Math.random()-এর উপর নির্মিত পুরনো লাইব্রেরি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী নয় এবং ভবিষ্যদ্বাণীযোগ্য হতে পারে। crypto.randomUUID() (ব্রাউজার এবং Node 19+) বা crypto থেকে পড়া একটি v7 লাইব্রেরি ব্যবহার করুন।
- v7-কে টাইমস্ট্যাম্প হিসেবে বিবেচনা করা। অগ্রবর্তী ৪৮ বিট সময় বহন করে কিন্তু বাকিটা র্যান্ডম, তাই একই মিলিসেকেন্ডের দুটি v7 নির্ধারকভাবে ক্রমবদ্ধ নয়। টাই-ব্রেকিংয়ের উপর নির্ভর করবেন না।
- VARCHAR(36) হিসেবে সংরক্ষণ। এটি কাজ করে কিন্তু স্থানীয় ১৬-বাইট UUID / BINARY(16) কলামের তুলনায় স্টোরেজ দ্বিগুণ করে এবং join ধীর করে। ডেটাবেসের নেটিভ টাইপ ব্যবহার করুন (Postgres-এ uuid, SQL Server-এ UNIQUEIDENTIFIER)।
- একটি নির্দিষ্ট সংস্করণ প্রয়োজন এমন regex। /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-.../i শুধু v4-এর সাথে মেলে। পরে v7 নির্গত করলে, সেই regex নীরবে বৈধ ID প্রত্যাখ্যান করে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
UUID v4 এবং v7-এর মধ্যে পার্থক্য কী?
v4 হল ১২২ বিট র্যান্ডমনেস এবং সংস্করণ ও ভ্যারিয়েন্ট মার্কার, কোনো সময় উপাদান নেই। v7 একটি ৪৮-বিট Unix-মিলিসেকেন্ড টাইমস্ট্যাম্প প্রিফিক্স করে এবং বাকিটা র্যান্ডম বিট দিয়ে পূরণ করে, তাই সময়ের কাছাকাছি তৈরি v7 মান লেক্সিকোগ্রাফিকভাবে সাজায়। B-tree ইনসার্ট স্থানীয় রাখতে v7 ডেটাবেস প্রাইমারি কী হিসেবে ব্যবহার করুন; যখন কোনো ক্রম সংকেত চান না তখন v4 ব্যবহার করুন।
আমি কি কখনো ডুপ্লিকেট UUID পাব?
কার্যকরভাবে না। একটি v4 UUID-এ ১২২ র্যান্ডম বিট আছে, তাই এক বিলিয়নের ব্যাচে দুটি সংঘর্ষের সম্ভাবনা প্রায় 10^-18। একটি সংঘর্ষের ৫০% সম্ভাবনায় পৌঁছাতে আপনাকে প্রায় ২.৭ কুইন্টিলিয়ন v4 UUID তৈরি করতে হবে। অনন্য-জেনারেশনকে নিশ্চিত হিসেবে নিন এবং অনন্যতা চেক যোগ করবেন না।
v4 কি ক্রিপ্টোগ্রাফিকভাবে র্যান্ডম?
এই টুল crypto.randomUUID() ব্যবহার করে যা স্পেক অনুযায়ী একটি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী PRNG থেকে টানতে প্রয়োজন। সেশন ID, idempotency কী এবং বেশিরভাগ সিকিউরিটি টোকেনের জন্য এটি যথেষ্ট। এটি একটি স্বাক্ষরিত টোকেন বা দীর্ঘ API সিক্রেটের প্রতিস্থাপন নয়, এবং আপনার UUID থেকে এনক্রিপশন কী নেওয়া উচিত নয়।
UUID v7 কি মানসম্মত?
হ্যাঁ। UUID v7 RFC 9562 (মে ২০২৪)-এ সংজ্ঞায়িত, যা RFC 4122 প্রতিস্থাপন করে এবং মূল সংস্করণগুলির পাশাপাশি v6, v7 এবং v8-কে আনুষ্ঠানিক করে। বেশিরভাগ আধুনিক ভাষায় v7 বাস্তবায়ন রয়েছে — Postgres, MySQL এবং SQL Server সবাই কোনো পরিবর্তন ছাড়াই UUID কলাম হিসেবে v7 মান গ্রহণ করে।
বাইনারি ফর্ম দেখতে কেমন এবং endianness কি গুরুত্বপূর্ণ?
একটি UUID ১৬ বাইট। ক্যানোনিকাল টেক্সট ফর্ম তাদের 8-4-4-4-12 হেক্স অক্ষর হিসেবে গোষ্ঠীবদ্ধ করে। RFC 9562 অনুযায়ী বাইট নেটওয়ার্ক (big-endian) ক্রমে লেখা হয়, তাই 018f8e50-fcaa-7c3c-8d2a-6f5b72e1fd90 0x01 বাইট দিয়ে শুরু হয়। Microsoft GUID ঐতিহাসিকভাবে প্রথম তিনটি গ্রুপ মেমরিতে little-endian সংরক্ষণ করে — .NET বাইনারি ডাম্পের সাথে interop করার সময় সতর্ক থাকুন।
এই টুল যে UUID তৈরি করে তা কি আপনি সংরক্ষণ করেন?
না। এখানে আপনি যে UUID তৈরি করেন তা আমরা সংরক্ষণ করি না। প্রতিটি মান আউটপুট এরিয়ায় দেখানো হয় এবং আপনি রিফ্রেশ করলে বা ট্যাব বন্ধ করলে চলে যায় — কিছুই সংরক্ষিত হয় না, মানগুলিতে কোনো টেলিমেট্রি সংগ্রহ করা হয় না। আপনার ব্রাউজারের ডেভেলপার টুলসে যাচাই করতে স্বাগত।