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

Վերադառնալ