שינויים במסד הנתונים לאחר העלאה של האתר לאוויר

נניח ואני מעוניין מדי פעם לעשות שינויי בdb

  • מה הדרך הטובה ביותר לעשות זאת בסביבה שהיא פיתוח (כלומר בלי השפעה על האתר עצמו)
  • והוצאה של זה לפרודקשין - רצוי לעשות כמו בוידאו של ים להתחבר למסד נגיד דרך יופיטר \ סביבה מקומית ולהריץ פונקציות שמעדכנות את המסד ?

אתה יכול להוסיף עמודות בסוף הטבלה. אם אתה מביא שדות לפי שם - שאילתות קיימות לא יתייחסו לשדות החדשים בשליפה מהטבלה.

למען האמת זה נושא מורכב למדי, מה שנקרא – שאל את ארכיטקט המערכות הקרוב לביתך.
אנסה לתת פה אמ;לק לא מחייב.

המטרה שלנו היא לשנות את הצורה של מסד נתונים עם 0 “זמן מת” שבו האפליקציה לא עובדת.
מהמטרה הזו נגזרות כמה שאלות:

  1. כנראה שיהיה data שצריך להשתנות. איך משנים אותו, טכנית, בלי לכבות את מסד הנתונים?
  2. בזמן הזה כנראה ממשיך לזרום מידע לאפליקציה. איך מתייחסים אליו ואיך מכניסים אותו למסד הנתונים? בצורה של המידע הישן? בצורה של המידע החדש? מה אנחנו בדיוק באמצע של שינוי constrains לסט מסוים של עמודות? איך מוודאים שאין race conditions?

הנה שיטה אחת:

  1. להוסיף database נוסף ל־production, שהוא איך שהיית רוצה שה־database החדש יראה.
  2. לשנות את הפונקציות שאחראיות על הכנסת הנתונים ל־database. עבור כל נתון חדש שמתקבל לכתיבה: לנסות להכניס את הנתונים ל־database הישן. אם זה הצליח, להכניס אותו גם ל־database החדש. לפעמים ה־database עצמו יודע לעשות את זה בלי לשנות את התנהגות האפליקציה עצמה, זה נקרא CDC (או change data capture).
  3. לבנות סקריפט מיגרציה שלוקח את כל הנתונים מה־database הישן ומזרים אותם ל־database החדש. חשוב לזכור להשתמש ב־ON CONFLICT IGNORE בשלב הזה.
  4. כשריצת הסקריפט תסתיים, לשנות את הפונקציות שאחראיות על הכנסת הנתונים ל־database שוב כך שעבור כל נתון שמתקבל לכתיבה, יכתבו אותו רק ל־database החדש.

שיטה אחרת היא ליצור את ה־database החדש, להפנות את הכתיבה אליו וכל פעם לקרוא מ־2 מסדי הנתונים, עד שירוץ סקריפט מיגרציה שיעביר את הנתונים מה־db הישן לחדש.

תוכל לקרוא עוד על העניין בעצמך אם תגגל “database migration zero downtime”.

בהצלחה!

4 לייקים

תודה ! אמשיך בקריאה על זה השמע לי סופר משמעותי :muscle:t2:

כמה זה בריא התהליך הזה? לי לפחות זה מוכר שבוחרים שעה הכי פחות פעילה ושמים הודעה שהשרת ירד לתחזוקה

תשאל את אמיר שעבר מהכללית ל-GOOGLE
:zipper_mouth_face:

לייק 1