ಪ್ರೊಡಕ್ಷನ್ ಅನ್ನು ಹಾಳು ಮಾಡದ ಮೈಗ್ರೇಷನ್ಗಳು
ಒಂದು ಮೈಗ್ರೇಷನ್ ನಿಮ್ಮ ಯಂತ್ರದಲ್ಲಿ ಪರಿಪೂರ್ಣವಾಗಿ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಅದು ಚಿಕ್ಕದಾಗಿ ಕಾಣಿಸುವುದರಿಂದ ನೀವು ಶುಕ್ರವಾರ ಸಂಜೆ 6 ಗಂಟೆಗೆ ಅದನ್ನು ಡಿಪ್ಲಾಯ್ ಮಾಡಿದ್ದೀರಿ ಎಂದು ಭಾವಿಸೋಣ. ನಂತರ ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ ಸ್ಥಗಿತಗೊಳ್ಳುತ್ತದೆ. ಅಥವಾ ಅದಕ್ಕಿಂತ ಕೆಟ್ಟದಾಗಿ, 8 ಮಿಲಿಯನ್ ಸಾಲುಗಳನ್ನು (rows) ಹೊಂದಿರುವ ಒಂದು ಟೇಬಲ್ 40 ಸೆಕೆಂಡುಗಳ ಕಾಲ ಲಾಕ್ ಆಗುತ್ತದೆ ಮತ್ತು ನಿಮ್ಮ ಸೈಟ್ ಕ್ರ್ಯಾಶ್ ಆಗುತ್ತದೆ.
ಪ್ರೊಡಕ್ಷನ್ನಲ್ಲಿ ಮೈಗ್ರೇಷನ್ಗಳು ವಿಭಿನ್ನವಾಗಿ ವರ್ತಿಸುತ್ತವೆ. ಲೋಕಲ್ ಡೇಟಾಬೇಸ್ಗಳು ಖಾಲಿ ಮತ್ತು ವೇಗವಾಗಿರುತ್ತವೆ. ಪ್ರೊಡಕ್ಷನ್ ಡೇಟಾಬೇಸ್ಗಳು ನೈಜ ಡೇಟಾ ಮತ್ತು ಸಕ್ರಿಯ ಬಳಕೆದಾರರನ್ನು ಹೊಂದಿರುತ್ತವೆ.
ಪ್ರೊಡಕ್ಷನ್ ವಿಪತ್ತುಗಳನ್ನು ತಪ್ಪಿಸಲು ಈ ನಿಯಮಗಳನ್ನು ಅನುಸರಿಸಿ.
ಯಾವಾಗಲೂ ಕೆಲಸ ಮಾಡುವ down ಮೆಥಡ್ ಅನ್ನು ಬರೆಯಿರಿ ಪ್ರತಿಯೊಂದು ಮೈಗ್ರೇಷನ್ಗೆ ಒಂದು
upಮತ್ತು ಒಂದುdownಫಂಕ್ಷನ್ ಅಗತ್ಯವಿರುತ್ತದೆ.downಫಂಕ್ಷನ್upಫಂಕ್ಷನ್ ಅನ್ನು ನಿಖರವಾಗಿ ರಿವರ್ಸ್ ಮಾಡಬೇಕು. ನೀವು ರೋಲ್ಬ್ಯಾಕ್ (rollback) ಮಾಡಲು ಸಾಧ್ಯವಾಗದಿದ್ದರೆ, ನಿಮ್ಮ ಮೈಗ್ರೇಷನ್ ತುಂಬಾ ಸಂಕೀರ್ಣವಾಗಿದೆ ಎಂದರ್ಥ. ನೀವು ಪಷ್ ಮಾಡುವ ಮೊದಲು ನಿಮ್ಮ ಯಂತ್ರದಲ್ಲಿmigrateನಂತರmigrate:rollbackಬಳಸಿ ಪರೀಕ್ಷಿಸಿ.ಹಳೆಯ ಮೈಗ್ರೇಷನ್ಗಳನ್ನು ಎಂದಿಗೂ ಎಡಿಟ್ ಮಾಡಬೇಡಿ ಹಳೆಯ ಮೈಗ್ರೇಷನ್ ಫೈಲ್ನಲ್ಲಿ ನೀವು ಕಾಲಮ್ ಗಾತ್ರವನ್ನು ಸರಿಪಡಿಸಲು ಬಯಸಬಹುದು. ಹಾಗೆ ಮಾಡಬೇಡಿ. Laravel ನಿಮ್ಮ ಸರ್ವರ್ನಲ್ಲಿ ಆ ಫೈಲ್ ಅನ್ನು ಮತ್ತೆ ರನ್ ಮಾಡುವುದಿಲ್ಲ. ಬದಲಾಗಿ, ರಚನೆಯನ್ನು ಬದಲಾಯಿಸಲು ಹೊಸ ಮೈಗ್ರೇಷನ್ ಅನ್ನು ರಚಿಸಿ. ಮೈಗ್ರೇಷನ್ ಎಂಬುದು ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸವಾಗಿದೆ. ಹಳೆಯದನ್ನು ಮತ್ತೆ ಬರೆಯುವ ಬದಲು ನೀವು ಹೊಸ ಅಧ್ಯಾಯಗಳನ್ನು ಸೇರಿಸುತ್ತೀರಿ.
nullable ಅಥವಾ default ಮೌಲ್ಯಗಳನ್ನು ಬಳಸಿ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಡೇಟಾವನ್ನು ಹೊಂದಿರುವ ಟೇಬಲ್ಗೆ
NOT NULLಕಾಲಮ್ ಅನ್ನು ಸೇರಿಸುವುದು ದೋಷಗಳಿಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಹಳೆಯ ಸಾಲುಗಳಲ್ಲಿ ಏನನ್ನು ಹಾಕಬೇಕೆಂದು ಡೇಟಾಬೇಸ್ಗೆ ತಿಳಿಯುವುದಿಲ್ಲ.
ಬದಲಾಗಿ ಈ ವಿಧಾನಗಳನ್ನು ಬಳಸಿ:
• ಹೊಸ ಕಾಲಮ್ ಅನ್ನು nullable ಆಗಿ ಮಾಡಿ.
• ಒಂದು default ಮೌಲ್ಯವನ್ನು ಹೊಂದಿಸಿ.
• ಕಾಲಮ್ ಕಡ್ಡಾಯವಾಗಿದ್ದರೆ, ಇದನ್ನು ಮೂರು ಹಂತಗಳಲ್ಲಿ ಮಾಡಿ: ಅದನ್ನು nullable ಆಗಿ ರಚಿಸಿ, ಡೇಟಾವನ್ನು ತುಂಬಿಸಿ, ನಂತರ ಅದನ್ನು NOT NULL ಗೆ ಬದಲಾಯಿಸಿ.
ಡೇಟಾ ನಷ್ಟವು ಶಾಶ್ವತವಾಗಿದೆ
dropColumnಕಮಾಂಡ್ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಿಹಾಕುತ್ತದೆ. ರೋಲ್ಬ್ಯಾಕ್ ಒಂದು ಕಾಲಮ್ ಅನ್ನು ಮರುಸೃಷ್ಟಿಸಬಹುದು, ಆದರೆ ಅದರೊಳಗಿನ ಡೇಟಾ ಹೋಗಿರುತ್ತದೆ. ನೀವು ಕಾಲಮ್ ಅನ್ನು ಡ್ರಾಪ್ ಮಾಡುವ ಮೊದಲು, ನಿಮ್ಮ ಬ್ಯಾಕಪ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ. ಸುರಕ್ಷಿತವಾದ ಮಾರ್ಗವೆಂದರೆ ಮೊದಲು ನಿಮ್ಮ ಕೋಡ್ನಲ್ಲಿ ಕಾಲಮ್ ಬಳಕೆಯನ್ನು ನಿಲ್ಲಿಸುವುದು, ಕೆಲವು ವಾರಗಳ ಕಾಲ ಕಾಯುವುದು ಮತ್ತು ನಂತರ ಡೇಟಾಬೇಸ್ನಿಂದ ಅದನ್ನು ತೆಗೆದುಹಾಕುವುದು.ಸ್ಕೀಮಾ ಬದಲಾವಣೆಗಳನ್ನು ಡೇಟಾ ಅಪ್ಡೇಟ್ಗಳಿಂದ ಪ್ರತ್ಯೇಕಿಸಿ ಮೈಗ್ರೇಷನ್ ಒಳಗಡೆ
User::all()ಅನ್ನು ರನ್ ಮಾಡುವುದು ಲಕ್ಷಾಂತರ ಸಾಲುಗಳನ್ನು ಮೆಮೊರಿಗೆ ಲೋಡ್ ಮಾಡಬಹುದು ಮತ್ತು ನಿಮ್ಮ ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ ಅನ್ನು ಕ್ರ್ಯಾಶ್ ಮಾಡಬಹುದು. ಮೈಗ್ರೇಷನ್ ಸಮಯದಲ್ಲಿ ನೀವು ಡೇಟಾವನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲೇಬೇಕೆಂದಿದ್ದರೆ, ರೆಕಾರ್ಡ್ಗಳನ್ನು ಸಣ್ಣ ಬ್ಯಾಚ್ಗಳಲ್ಲಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲುchunkByIdಬಳಸಿ.ಪೈಪ್ಲೈನ್ಗಳಲ್ಲಿ force ಫ್ಲಾಗ್ ಬಳಸಿ Laravel ದೃಢೀಕರಣವನ್ನು (confirmation) ಕೇಳಿದರೆ ಆಟೋಮೇಟೆಡ್ ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ ಪೈಪ್ಲೈನ್ಗಳು ಸ್ಥಗಿತಗೊಳ್ಳುತ್ತವೆ. ನಿಮ್ಮ ಡಿಪ್ಲಾಯ್ಮೆಂಟ್ ಸ್ಕ್ರಿಪ್ಟ್ಗಳಲ್ಲಿ ಈ ಕಮಾಂಡ್ ಬಳಸಿ:
php artisan migrate --forceಟೇಬಲ್ ಲಾಕ್ಗಳ ಬಗ್ಗೆ ಎಚ್ಚರವಿರಲಿ ಬೃಹತ್ ಟೇಬಲ್ನಲ್ಲಿ ಕಾಲಮ್ ಬದಲಾಯಿಸುವುದು ಅಥವಾ ಇಂಡೆಕ್ಸ್ ಸೇರಿಸುವುದು ಆ ಟೇಬಲ್ ಅನ್ನು ಲಾಕ್ ಮಾಡುತ್ತದೆ. ಇದು ಡೌನ್ಟೈಮ್ಗೆ ಕಾರಣವಾಗುತ್ತದೆ. ಅತೀ ದೊಡ್ಡ ಟೇಬಲ್ಗಳಿಗಾಗಿ, online schema change ಪರಿಕರಗಳನ್ನು ಬಳಸಿ ಅಥವಾ ಕಡಿಮೆ ಟ್ರಾಫಿಕ್ ಇರುವ ಸಮಯದಲ್ಲಿ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಿ.
ಪಷ್ ಮಾಡುವ ಮೊದಲು ಪರಿಶೀಲಿಸಬೇಕಾದ ಪಟ್ಟಿ:
• down ಮೆಥಡ್ ಕೆಲಸ ಮಾಡುತ್ತಿದೆಯೇ?
• ನಾನು ಲೋಕಲ್ನಲ್ಲಿ ರೋಲ್ಬ್ಯಾಕ್ ಅನ್ನು ಪರೀಕ್ಷಿಸಿದ್ದೇನಾ?
• ನಾನು ಹಳೆಯದನ್ನು ಎಡಿಟ್ ಮಾಡುವ ಬದಲು ಹೊಸ ಮೈಗ್ರೇಷನ್ ಅನ್ನು ರಚಿಸುತ್ತಿದ್ದೇನಾ?
• ಹೊಸ ಕಾಲಮ್ nullable ಆಗಿದೆಯೇ ಅಥವಾ ಅದಕ್ಕೆ default ಮೌಲ್ಯವಿದೆಯೇ?
• ಕಾಲಮ್ಗಳನ್ನು ಡ್ರಾಪ್ ಮಾಡುವ ಮೊದಲು ನನ್ನ ಬಳಿ ಬ್ಯಾಕಪ್ ಇದೆಯೇ?
Source: https://dev.to/denisgusto1/migrations-que-nao-quebram-em-producao-o-guia-que-ninguem-te-deu-363o
