我有一個正在被數百萬人公開訪問的SQLAlchemy/Flask應用程序。如何壓縮/拆分SQLAlchemy遷移文件以減少服務停機時間?
每兩週我發佈一個新版本的應用程序,並使用python manage.py db upgrade
運行數據庫遷移。這將運行自上次遷移文件運行後創建的所有新遷移文件。
這種方法的問題在於,由於我的數據庫表非常大,因此簡單的遷移操作(如添加列)每次可能需要15-20分鐘。因此,停止應用程序,運行遷移,更新應用程序代碼,然後重新啓動應用程序可能會導致漫長的停機時間。我正在儘量減少這種停機時間。
我最小化停機時間的策略是在部署之前運行儘可能多的遷移文件(或遷移文件的小數部分),而不停止服務。顯然有一些操作可以這樣完成。
例如op.create_table()和op.add_column()可以在更新代碼之前安全地運行而不會干擾應用程序的運行。 op.delete_column不能。
有沒有分離出可以在不影響應用程序的操作VS那些不影響應用程序的操作運行遷移命令的任何自動化的方式?目前我必須親自手動完成這些移植並對其進行腦部手術。這是痛苦的。但我不能成爲唯一一個經歷過這個問題的人。那麼其他人使用的解決方案是什麼?
這並不工作,因爲當我們切換到第二DB發生在複製和重新路由之間的第一DB的更改將丟失。 –