தரவுத்தளங்களில் UUIDகள்

UUIDகள் (உலகளாவிய தனித்துவமான ஐடி என்டிஃபையர்கள்) 128-பிட் மதிப்புகள் தரவுத்தளங்களில், மற்றவற்றுடன், அட்டவணை உள்ளீடுகளை தனித்துவமாக அடையாளம் காணப் பயன்படுத்தப்படுகின்றன. அவை ஹைபன்களால் பிரிக்கப்பட்ட ஐந்து குழுக்களாக பிரிக்கப்பட்ட ஹெக்ஸாடெசிமல் சரமாக குறிப்பிடப்படுகின்றன (எடுத்துக்காட்டு: 09fe49b3-4d2b-471c-ac04-36c9e706b85f) அங்கு உள்ளது ஏராளமான விவாதங்கள் தரவுத்தளங்களில் UUIDகளின் நன்மைகள் மற்றும் தீமைகள் பற்றி - விநியோகிக்கப்பட்ட அமைப்புகளில் அவை இன்றியமையாதவை.


மைக்ரோ சர்வீஸ்கள் மற்றும் பல குத்தகை பயன்பாடுகளில், UUIDகளை அறிமுகப்படுத்துவது மதிப்புக்குரியது. PHP கட்டமைப்பில் Laravel தரவு வகை BigInteger இலிருந்து UUID க்கு மாறுவது ( RFC 4122 விவரக்குறிப்பிலிருந்து UUID பதிப்பு 4 இன் வரிசைப்படுத்தக்கூடிய மாறுபாடு) விரைவாக செய்யப்படுகிறது: முதலில், நாங்கள் ஒரு புதிய பண்பை உருவாக்குகிறோம்:

2aa7136d977617159be1834eaf40e871

பின்னர் நாங்கள் எங்கள் மாதிரிகள் அனைத்தையும் சேர்க்கிறோம்:

2aa7136d977617159be1834eaf40e871

Laravel 9⁺ இல் இது இன்னும் எளிதானது: இங்கே நாம் ஏற்கனவே HasUuids பண்பைப் பயன்படுத்தத் தயாராக உள்ளோம். மாற்றாக, கட்டமைப்பானது தொடர்புடைய, ஆனால் இன்னும் அறியப்படாத தரவு வகை ULID க்கான ஆதரவையும் வழங்குகிறது, இது சிறந்த வாசிப்புத்திறன் மற்றும் வரிசைப்படுத்துதலின் காரணமாக சுவாரஸ்யமாக இருக்கும்.

கடினமான பகுதியாக இருக்கும் தரவு இடம்பெயர்வு ஆகும். தோராயமாக ஒருவர் பின்வருமாறு தொடரலாம்:

  1. அனைத்து அட்டவணைகளிலும் வெற்று மதிப்புகளுடன் புதிய UUID நெடுவரிசைகளைச் சேர்க்கவும்
    (ஒவ்வொன்றும் அனைத்து முதன்மை மற்றும் வெளிநாட்டு விசை நெடுவரிசைகளின் அடிப்படையில்)
  2. புதிய நெடுவரிசைகளுக்கு UUID மதிப்புகளை எழுதவும்
    (ஏறும் முதன்மை விசைகள் மற்றும் புதுப்பிக்கப்பட்ட வெளிநாட்டு விசைகளுடன்)
  3. அசல் நெடுவரிசைகளை நீக்கவும்
  4. புதிய நெடுவரிசைகளை மறுபெயரிடவும்

இங்கு பல சவால்கள் உள்ளன: இடம்பெயர்தல் செயல்முறை நீண்ட நேரம் எடுக்கும் மற்றும் புதிய நெடுவரிசைகள் அட்டவணையின் முடிவில் இணைக்கப்படும் (சாத்தியமான தீர்வு: ரிசார்ட் நெடுவரிசைகள் ). நெடுவரிசைகளை நேரடியாக மாற்றுவது மிகவும் நேரடியான வழியாகும்.

என்று போட்டால் PostgreSQL ஒன்று, நீங்கள் (முந்தைய காப்புப்பிரதிக்குப் பிறகு, நிச்சயமாக) பின்வரும் வினவலை இயக்கலாம், எடுத்துக்காட்டாக (அதற்கு முன் Z இல் நீங்கள் விலக்கிய அனைத்து அட்டவணைகளையும் நீக்கலாம். 19/31 மாற்று, அத்துடன் Z இல் சொந்த சிறப்பு விதிகள். 37/39 சேர்) மற்றும் அதிலிருந்து உருவாக்கப்பட்ட அனைத்து வினவல்களையும் நகலெடுக்கிறது:

2aa7136d977617159be1834eaf40e871

நீங்கள் இப்போது உருவாக்கப்பட்ட வினவல்களை ஒன்றாக இயக்கினால், சிறிது நேரத்திற்குள் தரவுத்தளத்தை நகர்த்திவிட்டீர்கள். இவ்வாறு உருவாக்கப்பட்ட UUIDகள் v4 விவரக்குறிப்புக்கு இணங்கவில்லை என்றாலும், அவை முந்தைய உள்ளீடுகளின் அதே வரிசையில் லெக்சிகிராஃபிகலாக இருக்கும், புதிய UUIDகளுடன் மோத வேண்டாம் (v4 இல் 3வது குழுவில் எப்போதும் ஒரு 4, எப்போதும் இடம்பெயர்ந்த மாறுபாட்டில் ஒன்று 0), அதாவது புதிய UUIDகள் எப்போதும் இடம்பெயர்ந்த UUIDகளை விட பெரியதாக இருக்கும்.

அதன் பிறகு அனைத்து Laravel கேச்களையும் நீக்க பரிந்துரைக்கப்படுகிறது (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

மீண்டும்