[英]How to update migration files when change column or add new column using Sequelize
[英]How to speed up a change column migration using Sequelize and MySQL
我有幾個帶有字段的模型: createdAt
、 updatedAt
和deletedAt
。 這些設置為DATE
類型,這會導致時間戳精確到一秒。 我希望這些字段精確到毫秒,方法是使用 Sequelize 將它們的類型設置為DATE(6)
。 這是我正在使用的遷移:
module.exports = {
up: (queryInterface, Sequelize) => {
return Promise.all([
queryInterface.changeColumn('transactions', 'createdAt', {
type: Sequelize.DATE(6),
allowNull: true,
}),
queryInterface.changeColumn('transactions', 'updatedAt', {
type: Sequelize.DATE(6),
allowNull: true,
}),
queryInterface.changeColumn('transactions', 'deletedAt', {
type: Sequelize.DATE(6),
allowNull: true,
}),
])
},
down: (queryInterface, Sequelize) => {
return Promise.all([
queryInterface.changeColumn('transactions', 'createdAt', {
type: Sequelize.DATE,
allowNull: true,
}),
queryInterface.changeColumn('transactions', 'updatedAt', {
type: Sequelize.DATE,
allowNull: true,
}),
queryInterface.changeColumn('transactions', 'deletedAt', {
type: Sequelize.DATE,
allowNull: true,
}),
])
}
};
事務表有 9300 萬行,此遷移運行了 10 個小時,然后因 Internet 問題導致它超時。 因此,有什么辦法可以加快速度嗎? 這是一個MySQL的數據庫,Sequelize版本是5.8.6,sequelize-cli版本是4.0。
此遷移在給定的數據庫表上運行ALTER TABLE
命令。 在幕后, ALTER TABLE
創建原始表的副本,進行給定的更改並復制原始數據。 對於大型數據庫,這需要時間。 問題是表在該操作運行時被鎖定,因此對它的任何更新都不會通過 go。 對於這種情況,有兩種工具可用(據我所知):
這些工具還會創建表的副本,但不會鎖定表,因此我們可以在操作運行時繼續更新它。 它們還記錄操作期間對原始表的任何更新,並相應地更新新表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.