如何优化 knex 迁移?

How to optimize knex migration?

我正在从事一个项目,该项目从一开始(1 年半)就一直在使用 bookshelfjs(带有 knexjs 迁移系统)。 我们现在的迁移次数略少于 80 次,并且 运行 所有迁移开始需要很多时间(超过 2 分钟)。我们正在使用持续集成进行部署,因此迁移必须在测试过程和部署过程中 运行。

我想知道如何优化它。是否可以从干净的状态开始?我不在乎失去回滚的可能性。项目现在成熟多了,我们不需要再在数据结构部分进行太多的迭代了。

有什么最佳做法吗?我来自 Doctrine (PHP) 世界,它真的很不一样。

感谢您的建议!

  1. 从当前数据库状态创建数据库转储。
  2. 始终使用该转储为测试初始化​​新数据库
  3. 运行 在已初始化的数据库之上迁移

这样,迁移系统只会将新添加的迁移应用到现有初始转储的顶部。

当使用 knex.schema.createTable 使用来自另一个 table 的外键创建 table 时,稍后当您 运行 knex migrate:latest 时, table 带有外键的应该在使用外键之前处理。例如,table1 有来自 talbe2 的外键 key1,要确保先处理 table2,可以在 table 的名称前添加数字。然后在你的migrations文件夹中,会有1table2.js2table1.js。这看起来很老套而且不漂亮,但它确实有效!