加速Django在大型数据库上的迁移



我有一个MySQL数据库,其中有多个表,每个表都有近2M条记录。当我运行更新这些表的迁移时,速度非常慢。我试着将服务器增加到64 CPU和240GB RAM(可能真的没有必要(,但这仍然需要很长时间。

有什么方法可以加快迁移速度吗?

编辑:正如@iklinac所指出的,我看到了这篇关于创建一个新的临时表,然后将数据从旧表迁移到这个新表的文章。有没有"Django方式"可以做到这一点?

您可以在Django迁移中运行SQL查询,方法是使用RunSQL操作编写迁移或自己编辑迁移文件

类RunSQL(sql,reverse_sql=无,state_operations=无,hints=无,可忽略=错误(

允许在数据库上运行任意SQL-对于Django的数据库后端的更高级功能非常有用不直接支持。

带state_operations参数

state_operations参数允许您提供在项目状态方面相当于SQL。例如,如果手动创建列时,应传入一个包含此处的AddField操作,以便自动检测器仍然具有模型的最新状态。如果没有,下次跑步时makemigrations,它不会看到任何添加该字段的操作,因此将尝试再次运行它。例如:

migrations.RunSQL(
"ALTER TABLE musician ADD COLUMN name varchar(255) NOT NULL;",
state_operations=[
migrations.AddField(
'musician',
'name',
models.CharField(max_length=255),
),
],
)

最新更新