UUIDs (সর্বজনীনভাবে অনন্য আইডি এনটিফায়ার) হল 128-বিট মান যা ডাটাবেসে ব্যবহৃত হয়, অন্যান্য জিনিসগুলির মধ্যে, টেবিল এন্ট্রিগুলিকে অনন্যভাবে সনাক্ত করতে। তারা হাইফেন দ্বারা পৃথক পাঁচটি গ্রুপে বিভক্ত একটি হেক্সাডেসিমেল স্ট্রিং হিসাবে উপস্থাপিত হয় (উদাহরণ: 09fe49b3-4d2b-471c-ac04-36c9e706b85f) এখানে অনেক আলোচনা ডাটাবেসে UUID-এর সুবিধা এবং অসুবিধা সম্পর্কে - এগুলি বিতরণ সিস্টেমে অপরিহার্য।
মাইক্রোসার্ভিসেস এবং মাল্টি-টেনেন্সি অ্যাপ্লিকেশনগুলিতে, তাই UUID প্রবর্তন বিবেচনা করা মূল্যবান। পিএইচপি ফ্রেমওয়ার্ক লারাভেলে ডাটা টাইপ BigInteger থেকে UUID ( RFC 4122 স্পেসিফিকেশন থেকে UUID সংস্করণ 4-এর একটি সাজানো বৈকল্পিক) তে স্যুইচ করা দ্রুত সম্পন্ন হয়: প্রথমে, আমরা একটি নতুন বৈশিষ্ট্য তৈরি করি:
2aa7136d977617159be1834eaf40e871
তারপর আমরা আমাদের সব মডেল যোগ:
2aa7136d977617159be1834eaf40e871
Laravel 9⁺-এ এটি আরও সহজ: এখানে আমরা ইতিমধ্যেই HasUuids বৈশিষ্ট্য ব্যবহার করার জন্য প্রস্তুত। বিকল্পভাবে, ফ্রেমওয়ার্কটি সম্পর্কিত, কিন্তু এখনও অজানা ডেটা টাইপ ULID- এর জন্য সমর্থনও প্রদান করে, যা আরও ভাল পঠনযোগ্যতা এবং সাজানোর কারণে আকর্ষণীয় হতে পারে।
কঠিন অংশটি বিদ্যমান ডেটা স্থানান্তর। মোটামুটি একটি নিম্নলিখিত হিসাবে এগিয়ে যেতে পারে:
- সমস্ত টেবিলে খালি মান সহ নতুন UUID কলাম যোগ করুন
(প্রতিটি সমস্ত প্রাথমিক এবং বিদেশী কী কলামের উপর ভিত্তি করে) - নতুন কলামগুলিতে UUID মানগুলি লিখুন
(আরোহী প্রাইমারি কী এবং হালনাগাদকৃত ফরেন কী সহ) - মূল কলাম মুছুন
- নতুন কলামগুলির নাম পরিবর্তন করুন
এখানে বেশ কয়েকটি চ্যালেঞ্জ রয়েছে: স্থানান্তর প্রক্রিয়াটি দীর্ঘ সময় নেয় এবং টেবিলের শেষে নতুন কলাম যুক্ত করা হয় (সম্ভাব্য সমাধান: অবলম্বন কলাম )। আরও অনেক সরাসরি উপায় হল কলামগুলিকে সরাসরি রূপান্তর করা।
যদি আপনি রাখেন পোস্টগ্রেএসকিউএল এটি করার জন্য, আপনি (অবশ্যই আগে থেকে ব্যাকআপ নেওয়ার পর) উদাহরণস্বরূপ নিম্নলিখিত কোয়েরিটি চালাতে পারেন (এর আগে আপনি Z থেকে বাদ দিতে চান এমন সমস্ত টেবিলের একটি তালিকা তৈরি করে নিতে পারেন)। 19/31 Z-এ আপনার নিজস্ব বিশেষ নিয়মের পাশাপাশি প্রতিস্থাপন করুন। 37/39 যোগ করুন) এবং এটি থেকে উত্পন্ন সমস্ত প্রশ্নের অনুলিপি করে:
2aa7136d977617159be1834eaf40e871
আপনি যদি এখন সম্মিলিতভাবে জেনারেট করা প্রশ্নগুলি চালান, তাহলে আপনি অল্প সময়ের মধ্যে ডাটাবেস স্থানান্তর করতে পারবেন। এইভাবে তৈরি করা UUIDগুলি v4 স্পেসিফিকেশন মেনে চলে না, কিন্তু এগুলি অভিধানগতভাবে আগের এন্ট্রিগুলির মতো একই ক্রমে, নতুন UUID-এর সাথে সংঘর্ষ হয় না (v4 তে 3য় গ্রুপে সর্বদা একটি থাকে 4, সর্বদা স্থানান্তরিত ভেরিয়েন্টে একটি 0), যার মানে নতুন UUID সর্বদা স্থানান্তরিত UUID-এর চেয়ে বড়।
এরপরে, সমস্ত লারাভেল ক্যাশে খুঁজে বের করার পরামর্শ দেওয়া হয় (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*) এবং চলমান সেশন (rm -f storage/framework/sessions/*) খালি. অবশ্যই, পুরো জিনিসটি লারাভেল মাইগ্রেশনের মধ্যেও প্রয়োগ করা যেতে পারে:
2aa7136d977617159be1834eaf40e871
রূপান্তরের পরে কেউ এর পরিবর্তে ভবিষ্যতের মাইগ্রেশনে ব্যবহার করে bigIncrements বা bigInteger তারপর uuid:
2aa7136d977617159be1834eaf40e871