适用于Android的Flyway需要约500毫秒才能完全没有迁移

时间:2016-08-12 13:32:54

标签: android sqlite flyway

我为我的Android应用实施了Flyway。它相对顺利,但我注意到应用启动时间大幅增加。我预计小幅增加,但不是500毫秒 - 1秒。

我使用的是flyway 4.0.3

这里有什么可疑的吗?

 SQLiteDatabase db = context.openOrCreateDatabase(DatabaseManager.DATABASE_NAME, 0, null);
    ContextHolder.setContext(context);

    flyway.setDataSource("jdbc:sqlite:" + db.getPath(), "", "");
    flyway.setBaselineOnMigrate(true);
    flyway.setCallbacks(new MigrationFlywayCallback());
    try {
        flyway.migrate();
    } catch (Exception e) {
        sendMigrationFailedEvent(e);
    }

相对日志输出:

https://gist.github.com/jonschmidt/1fc61b45b1c0bf95baaa5d44f3c204c0

修改

问题似乎是FlyWay检查是否应该迁移的方式。它检查元数据表是否具有列version_rank

https://github.com/flyway/flyway/blob/master/flyway-core/src/main/java/org/flywaydb/core/internal/metadatatable/MetaDataTableImpl.java#L68

在内部,这使用SQLDroid来检查列的存在,方法是将列名称传递给columnNamePattern

https://github.com/SQLDroid/SQLDroid/blob/master/src/main/java/org/sqldroid/SQLDroidDatabaseMetaData.java

在该函数中从未使用过,因此它将始终返回true,FlyWay会认为每次启动应用程序时都需要迁移,为操作添加几百毫秒。

1 个答案:

答案 0 :(得分:0)

正如日志所说

  

升级元数据表" main"。" schema_version"到Flyway 4.0格式......

Flyway执行了从Flyway 3.x到Flyway 4.x元数据表格式的一次性迁移。