我正在开发一个大型的webapp,其中包括一个基于现有数据在线构建的表格。此数据集可能会更改(尽管可能不常见),因此我们的总体计划是每1-2个月更新/重建一次。这将通过Python与SQLAlchemy
发生在处理Web应用程序和大型数据库方面经验不足,最好的方法是什么?从头开始构建数据库需要5-6个小时,老实说,这是可接受的停机时间(它是一个科学的分析服务器)。当然,另一种选择是并行创建第二个表,然后删除原始表并重命名新表,但这是否存在一致性问题?有没有办法“实时更新”一个表,或者这里发生崩溃的风险是不值得的(即如果你崩溃让桌子处于与真实数据不一致的状态)?
显然,在简单性,安全性和缺乏停机时间之间存在折衷,但我只是对我的选择感兴趣(为了解决这些问题,“未知的未知数”)。
答案 0 :(得分:1)
以下是我的建议:
使用mysqldump备份原始表
以不同的名称构建新表
使用mysqldump备份新表
关闭您的申请
删除旧表
将新表重命名为原始表名
重新启动您的应用
这应该产生最小的停机时间,只需要删除旧表并重命名旧表所需的时间。备份可以让您在安全的情况下获得安全保障。
答案 1 :(得分:0)
这个怎么样
RENAME TABLE old_table TO tmp_table, new_table TO old_table;
之前创建的new_table。 RENAME是原子的