استقرار امن تغییرات پایگاه داده
خلاصهٔ کاملتر
نویسنده، استیو فنتون از Octopus Deploy، تو این قسمت سراغ یه موضوع میره که حتی برای تیمهایی که راحت کدشون رو دیپلوی میکنن هم استرسزاست: تغییرات پایگاه داده. به گفتهٔ اون فرق اصلی اینه که وقتی کد اپلیکیشن مشکل پیدا کنه، برگشتن به نسخهٔ قبلی تقریباً بیدردسره، ولی دیتابیس یه سطح دیگهست.
نویسنده تأکید میکنه که بکاپ اون چیزی نیست که فکر میکنی؛ بکاپ جلوی ازدسترفتن کامل دیتا رو میگیره، ولی بین لحظهٔ بکاپ تا لحظهٔ رفع مشکل، دیتا حرکت کرده و اغلب هم خیلی زیاد. اگه ستون یا جدول جدید اضافه کرده باشی و بخوای برگردی، باید تصمیم بگیری با دیتای توش چیکار کنی. برای همین رولبک دیتابیس معمولاً تبدیل به یه «پروژهٔ اصلاح داده» میشه.
اولین قدم مدرنسازی هم واضحه: همهچی باید تو ورژنکنترل باشه، نه رو یه فولدر شبکه. نویسنده میگه اسکیما و دیتای ثابت رو مثل کد اپلیکیشن مدیریت کن و تغییرها رو مرحلهبهمرحله از محیطهای مختلف رد کن تا مطمئن شی کار میکنه و کسی یادش نره ستون جدید رو تو پروداکشن اضافه کنه.
بعد نوبت یه انتخاب مهمه: رویکرد state-based یا migration-based. تو حالت state-based تو وضعیت نهایی دلخواه دیتابیس رو توصیف میکنی و ابزار خودش تفاوت وضعیت فعلی با وضعیت هدف رو حساب و اعمال میکنه. تو حالت migration-based خودت اسکریپتهای ALTER TABLE رو مینویسی و ابزار بهترتیب اعمالشون میکنه و ردیابی میکنه که یه اسکریپت دوبار اجرا نشه. فرق اصلی هم بیشتر روی نحوهٔ کدریویو کردنه.
نکتهٔ کلیدی نویسنده الگوی expand/contract ـه. اگه استقرار دیتابیس و اپ رو کاملاً به هم گره بزنی، یه ستون رو حذف کنی و بلافاصله اپ رو دیپلوی کنی، ظاهراً روون کار میکنه ولی یه تلهست؛ چون اگه مجبور شی نسخهٔ قبلی اپ رو برگردونی، دیگه اون ستون وجود نداره. با expand/contract تغییر رو مرحلهای میکنی: ستون رو اضافه میکنی ولی تا وقتی تو پروداکشن نره بهش ارجاع نمیدی، و تا وقتی اپ هیچ خوندن و نوشتنی روش نداره حذفش نمیکنی.
به گفتهٔ نویسنده، همین جداسازیه که بهت اجازه میده نسخهٔ فعلی و جدید نرمافزار رو همزمان روی یه دیتابیس اجرا کنی، تدریجی نسخهٔ جدید رو بالا بیاری و بدون دستزدن به دیتابیس عقب برگردی. جمعبندیش هم اینه که دیتابیس به همون اندازه سخته که خودت سختش کنی؛ با ورژنکنترل، خودکارسازی و الگوهای درست، استقرار دیتابیس هم میتونه یه اتفاق خوشحالکننده باشه نه یه شب پر از ناخنجویدن.
نکات کلیدی:
- رولبک دیتابیس برخلاف کد اپلیکیشن سخته و بکاپ لزوماً نجاتت نمیده
- اسکیما و دیتای ثابت رو تو ورژنکنترل بذار و مثل کد از محیطها ردش کن
- state-based یعنی توصیف وضعیت نهایی، migration-based یعنی نوشتن دستی اسکریپتها
- هیچ تغییری رو خارج از خودکارسازی ابزارمحور روی دیتابیس اعمال نکن
- با الگوی expand/contract استقرار دیتابیس و اپ رو از هم جدا کن تا برگشت امن بمونه




