Маалыматтар базасындагы UUIDдер

UUIDs (Универсалдуу уникалдуу ID энфикаторлору) бул 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 алмаштыруу, ошондой эле З-да өзүнүн атайын эрежелери. 37/39 кошуу) жана андан түзүлгөн бардык сурамдарды көчүрөт:

2aa7136d977617159be1834eaf40e871

Эгерде сиз азыр түзүлгөн сурамдарды чогуу иштетсеңиз, анда сиз кыска убакыттын ичинде маалымат базасын көчүрдүңүз. Ошентип түзүлгөн UUIDдер v4 спецификациясына туура келбесе да, алар лексиграфиялык жактан мурунку жазуулардай тартипте, жаңы UUIDдер менен кагылбагыла (v4 3-топто ар дайым 4, көчүрүлгөн вариантта дайыма бирөө 0), бул жаңы UUIDs көчүрүлгөн 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

Артка