שרת, ממשקים ונתונים · מתקדם
מיגרציות סכמה בלי השבתה
בשורה אחת: שנו את הסכמה בשלבים תואמים לאחור: הוסיפו, מלאו, החליפו, ורק בסוף מחקו.
הבעיה
בזמן שחרור רצות שתי גרסאות קוד יחד. מיגרציה שמשנה עמודה בבת אחת שוברת את אחת מהן. לכן כל שינוי מבני מתפרק לרצף צעדים שכל אחד מהם בטוח בפני עצמו.
הרצף הבטוח
הוספה. עמודה חדשה, מותרת ריקה, בלי לגעת בקיים.
כתיבה כפולה. הקוד כותב לשתי העמודות ומעדיף לקרוא מהישנה.
מילוי לאחור. באצוות קטנות, מחוץ לשעות העומס, עם יכולת עצירה.
החלפת קריאה. אחרי אימות שהנתונים זהים.
מחיקה. בשחרור נפרד, אחרי שהוודאתם שאיש אינו קורא.
כללי זהירות
מיגרציה על טבלה גדולה עלולה לנעול. בדקו את התנהגות הנעילה במנוע שלכם, והריצו על עותק בגודל דומה לפרודקשן. גיבוי לפני, ותסריט חזרה כתוב מראש — לא מאולתר בלחץ.
לעומק
נהלו מיגרציות כקוד בגרסאות, עם הרצה אוטומטית ובקרה על סדר. ואל תערבבו שינוי סכמה עם שינוי לוגיקה באותו שחרור: כשמשהו נשבר, אתם רוצים לדעת מי מהשניים אשם.