如何优化 knex 迁移?
How to optimize knex migration?
我正在从事一个项目,该项目从一开始(1 年半)就一直在使用 bookshelfjs(带有 knexjs 迁移系统)。
我们现在的迁移次数略少于 80 次,并且 运行 所有迁移开始需要很多时间(超过 2 分钟)。我们正在使用持续集成进行部署,因此迁移必须在测试过程和部署过程中 运行。
我想知道如何优化它。是否可以从干净的状态开始?我不在乎失去回滚的可能性。项目现在成熟多了,我们不需要再在数据结构部分进行太多的迭代了。
有什么最佳做法吗?我来自 Doctrine (PHP) 世界,它真的很不一样。
感谢您的建议!
- 从当前数据库状态创建数据库转储。
- 始终使用该转储为测试初始化新数据库
- 运行 在已初始化的数据库之上迁移
这样,迁移系统只会将新添加的迁移应用到现有初始转储的顶部。
当使用 knex.schema.createTable
使用来自另一个 table 的外键创建 table 时,稍后当您 运行 knex migrate:latest
时, table 带有外键的应该在使用外键之前处理。例如,table1 有来自 talbe2 的外键 key1
,要确保先处理 table2,可以在 table 的名称前添加数字。然后在你的migrations文件夹中,会有1table2.js
、2table1.js
。这看起来很老套而且不漂亮,但它确实有效!
我正在从事一个项目,该项目从一开始(1 年半)就一直在使用 bookshelfjs(带有 knexjs 迁移系统)。 我们现在的迁移次数略少于 80 次,并且 运行 所有迁移开始需要很多时间(超过 2 分钟)。我们正在使用持续集成进行部署,因此迁移必须在测试过程和部署过程中 运行。
我想知道如何优化它。是否可以从干净的状态开始?我不在乎失去回滚的可能性。项目现在成熟多了,我们不需要再在数据结构部分进行太多的迭代了。
有什么最佳做法吗?我来自 Doctrine (PHP) 世界,它真的很不一样。
感谢您的建议!
- 从当前数据库状态创建数据库转储。
- 始终使用该转储为测试初始化新数据库
- 运行 在已初始化的数据库之上迁移
这样,迁移系统只会将新添加的迁移应用到现有初始转储的顶部。
当使用 knex.schema.createTable
使用来自另一个 table 的外键创建 table 时,稍后当您 运行 knex migrate:latest
时, table 带有外键的应该在使用外键之前处理。例如,table1 有来自 talbe2 的外键 key1
,要确保先处理 table2,可以在 table 的名称前添加数字。然后在你的migrations文件夹中,会有1table2.js
、2table1.js
。这看起来很老套而且不漂亮,但它确实有效!