簡體   English   中英

如何使用 Sequelize 和 MySQL 加速更改列遷移

[英]How to speed up a change column migration using Sequelize and MySQL

我有幾個帶有字段的模型: createdAtupdatedAtdeletedAt 這些設置為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。 對於這種情況,有兩種工具可用(據我所知):

  1. pt-online-schema-改變

這些工具還會創建表的副本,但不會鎖定表,因此我們可以在操作運行時繼續更新它。 它們還記錄操作期間對原始表的任何更新,並相應地更新新表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM