ডাটাবেসে UUID

UUIDs (সর্বজনীনভাবে অনন্য আইডি এনটিফায়ার) হল 128-বিট মান যা ডাটাবেসে ব্যবহৃত হয়, অন্যান্য জিনিসগুলির মধ্যে, টেবিল এন্ট্রিগুলিকে অনন্যভাবে সনাক্ত করতে। তারা হাইফেন দ্বারা পৃথক পাঁচটি গ্রুপে বিভক্ত একটি হেক্সাডেসিমেল স্ট্রিং হিসাবে উপস্থাপিত হয় (উদাহরণ: 09fe49b3-4d2b-471c-ac04-36c9e706b85f) এখানে অনেক আলোচনা ডাটাবেসে UUID-এর সুবিধা এবং অসুবিধা সম্পর্কে - এগুলি বিতরণ সিস্টেমে অপরিহার্য।


মাইক্রোসার্ভিসেস এবং মাল্টি-টেনেন্সি অ্যাপ্লিকেশনগুলিতে, তাই UUID প্রবর্তন বিবেচনা করা মূল্যবান। পিএইচপি ফ্রেমওয়ার্ক লারাভেলে ডাটা টাইপ BigInteger থেকে UUID ( RFC 4122 স্পেসিফিকেশন থেকে UUID সংস্করণ 4-এর একটি সাজানো বৈকল্পিক) তে স্যুইচ করা দ্রুত সম্পন্ন হয়: প্রথমে, আমরা একটি নতুন বৈশিষ্ট্য তৈরি করি:

2aa7136d977617159be1834eaf40e871

তারপর আমরা আমাদের সব মডেল যোগ:

2aa7136d977617159be1834eaf40e871

Laravel 9⁺-এ এটি আরও সহজ: এখানে আমরা ইতিমধ্যেই HasUuids বৈশিষ্ট্য ব্যবহার করার জন্য প্রস্তুত। বিকল্পভাবে, ফ্রেমওয়ার্কটি সম্পর্কিত, কিন্তু এখনও অজানা ডেটা টাইপ ULID- এর জন্য সমর্থনও প্রদান করে, যা আরও ভাল পঠনযোগ্যতা এবং সাজানোর কারণে আকর্ষণীয় হতে পারে।

কঠিন অংশটি বিদ্যমান ডেটা স্থানান্তর। মোটামুটি একটি নিম্নলিখিত হিসাবে এগিয়ে যেতে পারে:

  1. সমস্ত টেবিলে খালি মান সহ নতুন UUID কলাম যোগ করুন
    (প্রতিটি সমস্ত প্রাথমিক এবং বিদেশী কী কলামের উপর ভিত্তি করে)
  2. নতুন কলামে UUID মান লিখুন
    (আরোহী প্রাথমিক কী এবং আপডেট করা বিদেশী কী সহ)
  3. মূল কলাম মুছুন
  4. নতুন কলামের নাম পরিবর্তন করুন

এখানে বেশ কয়েকটি চ্যালেঞ্জ রয়েছে: স্থানান্তর প্রক্রিয়াটি দীর্ঘ সময় নেয় এবং টেবিলের শেষে নতুন কলাম যুক্ত করা হয় (সম্ভাব্য সমাধান: অবলম্বন কলাম )। আরও অনেক সরাসরি উপায় হল কলামগুলিকে সরাসরি রূপান্তর করা।

যদি আপনি যে লাগান পোস্টগ্রেএসকিউএল এক, আপনি (অবশ্যই পূর্ববর্তী ব্যাকআপের পরে) নিম্নলিখিত ক্যোয়ারী চালাতে পারেন, উদাহরণস্বরূপ (এর আগে আপনি 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

পেছনে