Bosh sahifa Wiki Schema migration

Schema migration

Schema migrationdatabase yoki boshqa strukturali storage sxemasini bir versiyadan boshqasiga boshqariladigan tarzda o‘tkazish jarayonidir. U table, column, index, constraint va data formatini o‘zgartiradi. Migration kodi application release bilan birga versionlanib, qaysi o‘zgarish qachon bajarilganini qayd etadi.

DDL va data migration

DDL migration yangi column qo‘shish, index yaratish yoki constraintni o‘zgartirish kabi strukturaviy amalni bajaradi. Data migration mavjud satrlarni yangi formatga aylantiradi. Ikkalasini ajratish lock, vaqt va rollbackni boshqarishni osonlashtiradi.

Kichik table’da bitta statement tez tugashi mumkin. Katta table’da type o‘zgartirish barcha satrni qayta yozib, uzoq lock va katta transaction log yaratadi. Database engine versiyasining online DDL xususiyati oldindan tekshiriladi.

Expand va contract

Zero-downtime o‘zgarish odatda expand-contract usuliga tayanadi:

  1. eski kodga mos holda yangi nullable column yoki table qo‘shiladi;
  2. application bir muddat eski va yangi formatni yozadi yoki yangi formatga yozib eskisini o‘qiy oladi;
  3. tarixiy data batchlarda backfill qilinadi;
  4. read path yangi fieldga o‘tkaziladi;
  5. eski field va compatibility kodi keyingi release’da olib tashlanadi.

Columnni avval rename qilish eski application instance’larini darhol buzishi mumkin. Yangi column qo‘shib, bosqichma-bosqich o‘tish rolling deployment bilan mos keladi.

Backfill

Backfill katta data to‘plamini kichik, qayta davom ettiriladigan batchlarda yangilaydi. Har batch primary key range yoki cursor bilan belgilanadi. Progress checkpoint saqlansa process uzilganda boshidan boshlamaydi. Idempotent update bir batchni takrorlashga imkon beradi.

Backfill production querylar bilan resurs talashadi. Rate limit, sleep va replica lag monitoring yukni boshqaradi. Completion faqat processed count bilan emas, null qolgan satrlar va invariant querylar bilan tekshiriladi.

Constraint va index

Yangi NOT NULL constraint qo‘yishdan oldin mavjud null qiymatlar tozalanadi va application yangi null yozishni to‘xtatadi. Ayrim databaselar constraintni avval NOT VALID holatda qo‘shib, keyin mavjud data’ni alohida validate qilishga imkon beradi.

Index yaratish write lockni yoki I/Oni oshirishi mumkin. Concurrent index build service availabilityni saqlaydi, lekin uzoqroq davom etadi va muvaffaqiyatsiz artifact qoldirishi mumkin. Query plan yangi indexdan foydalanayotgani statistikalar yangilangach tekshiriladi.

Transaction va rollback

Ba’zi DDL transaction ichida rollback qilinadi, ayrim engine va amallar esa auto-commit yoki qaytarib bo‘lmas xususiyatga ega. “Down migrationdata o‘chirilgan yoki qisqartirilgan bo‘lsa oldingi qiymatni tiklay olmaydi. Backup va forward-fix ko‘pincha real rollback strategiyasidir.

Migration oldidan snapshot olishning o‘zi yetarli emas; restore vaqti ham RTOga mos sinovdan o‘tadi. Application rollback qilinsa eski binary yangi schema bilan ishlay olishi expand davrining muhim shartidir.

Koordinatsiya va audit

Migration jadvali bajarilgan versiya va checksumni saqlaydi. Bir nechta instance bir vaqtda ishga tushsa advisory lock yoki deployment job migrationni aynan bir marta boshlaydi. O‘zgartirilgan eski migration fayli checksum mismatch berishi kerak; yangi tuzatish alohida migration sifatida qo‘shiladi.

Staging data hajmi productionga o‘xshamasa vaqt va lock muammosi ko‘rinmaydi. Dry run, query plan va taxminiy row count release rejasiga kiritiladi. Monitoring lock wait, replication lag, error rate va disk sarfini migration bosqichi bilan bog‘laydi.

Bog‘liq tushunchalar

Database schema, DDL, Backfill, Expand-contract, Rolling deployment, Database index, Rollback