UUID-ները տվյալների բազաներում

UUID-ներ (Համընդհանուր եզակի նույնացուցիչներ) 128-բիթանոց արժեքներ են, որոնք օգտագործվում են տվյալների բազաներում, ի թիվս այլ բաների, աղյուսակի մուտքերը եզակիորեն նույնականացնելու համար: Դրանք ներկայացված են որպես տասնվեցական տող, որը բաժանված է հինգ խմբի՝ բաժանված գծիկներով (Օրինակ: 09fe49b3-4d2b-471c-ac04-36c9e706b85f) Կա բազմաթիվ Քննարկումներ տվյալների բազաներում UUID-ների առավելությունների և թերությունների մասին. դրանք անփոխարինելի են բաշխված համակարգերում:


Միկրոծառայությունների և բազմավարձակալության հավելվածներում, հետևաբար, արժե մտածել UUID-ների ներդրման մասին: Տվյալների BigInteger տիպից անցնելը UUID-ի ( RFC 4122 ճշգրտման UUID տարբերակի 4-ի տեսակավորվող տարբերակ) PHP շրջանակում Laravel- ում կատարվում է արագ. Նախ՝ մենք ստեղծում ենք նոր հատկանիշ ։:

2aa7136d977617159be1834eaf40e871

Հետո ավելացնում ենք մեր բոլոր մոդելները:

2aa7136d977617159be1834eaf40e871

Laravel 9⁺-ում դա նույնիսկ ավելի հեշտ է. այստեղ մենք արդեն պատրաստ ենք օգտագործելու HasUuids հատկանիշը: Որպես այլընտրանք, շրջանակն առաջարկում է նաև համապատասխան, բայց դեռևս բավականին անհայտ տվյալների տիպի ULID , որը կարող է հետաքրքիր լինել ավելի լավ ընթեռնելիության և տեսակավորելու շնորհիվ:

Դժվարը գոյություն ունեցող տվյալների միգրացիան է: Մոտավորապես կարելի էր այսպես վարվել:

  1. Բոլոր աղյուսակներին ավելացրեք նոր UUID սյունակներ՝ դատարկ արժեքներով
    (յուրաքանչյուրը հիմնված է բոլոր հիմնական և արտաքին բանալիների սյունակների վրա)
  2. Գրեք UUID արժեքները նոր սյուներին
    (աճող առաջնային բանալիներով և թարմացված արտաքին բանալիներով)
  3. Ջնջել բնօրինակ սյունակները
  4. Վերանվանել նոր սյուները

Այստեղ կան մի քանի մարտահրավերներ. միգրացիայի գործընթացը երկար ժամանակ է տևում, և աղյուսակի վերջում կցվում են նոր սյունակներ (հնարավոր լուծում. առողջարանային սյունակներ ): Շատ ավելի անմիջական միջոց է սյունակները ուղղակիորեն փոխակերպել:

Եթե դնեք PostgreSQL Դրա համար կարող եք (իհարկե, նախնական պահուստավորումից հետո) կատարել հետևյալ հարցումը, օրինակ (նախապես կարող եք թվարկել Z-ում բոլոր այն աղյուսակները, որոնք ցանկանում եք բացառել): 19/31 փոխարինել, ինչպես նաև սեփական հատուկ կանոններ Զ. 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/*) դատարկել։ Իհարկե, ամբողջը կարող է իրականացվել նաև Laravel միգրացիայի շրջանակներում:

2aa7136d977617159be1834eaf40e871

Փոխակերպումից հետո փոխարենը օգտագործվում է ապագա միգրացիաներում bigIncrements կամ. bigInteger ապա uuid:

2aa7136d977617159be1834eaf40e871

Վերադառնալ