【问题标题】:Most MySQL-like hibernate-compatible in-memory database?大多数类似 MySQL 的休眠兼容内存数据库?
【发布时间】:2013-07-11 22:03:07
【问题描述】:

对于我正在处理的一个项目(Spring/struts 2/hibernate),我们决定使用 h2 进行单元测试,使用 MySQL 进行生产存储,并在 liquibase 中管理该方案,非常标准,但我们继续关注的问题遇到的是 h2 和 MySQL 在很多方面都不同,例如它们如何处理时间戳和触发器。已经到了让我开始后悔使用 h2 的地步,因为不匹配导致的额外头痛开始超过它的好处。我的问题是,是否还有其他内存/本地文件数据库的行为更像 MySQL?显然,对于集成测试,我们仍将使用 MySQL,但能够进行单元测试而无需将 liquibase 文件变成巨大的 hack,也不必确保本地 MySQL 数据库正在运行。

【问题讨论】:

  • 所以你准备好再次犯同样的错误,却发现其他不兼容?我会使用 MySQL。它够轻够快。

标签: java mysql hibernate unit-testing h2


【解决方案1】:

我认为没有其他内存 Java 数据库比 H2 更兼容 MySQL。如果你有很多只适用于 MySQL 的代码,那么你可能也应该使用 MySQL 进行测试。

请注意,将来切换到另一个数据库会很困难。过度依赖一种产品的功能会导致"vendor lock in"。在 MySQL 的情况下,至少您可以选择切换到MariaDB,所以这并不是那么糟糕。

【讨论】:

    【解决方案2】:

    您可以使用 ram 驱动器,将测试表和数据复制到该驱动器,然后启动配置为从该驱动器加载的 mysql,所有这些都在启动时在脚本中完成。

    然后你的单元测试会跑得更快。我们将它用于开发人员工作站,挫败感下降了三个步骤。

    【讨论】:

      【解决方案3】:

      我认为目前正确的方法是使用 MySQL 作为 Docker 映像。

      创建映像后,您可以轻松地从测试中启动它,而且只需几秒钟。您的休眠将动态初始化数据库架构,然后就可以了!

      唯一的问题是 CI 服务器需要安装 Docker。

      【讨论】:

        猜你喜欢
        • 2016-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        • 1970-01-01
        • 2011-08-16
        • 2015-06-08
        相关资源
        最近更新 更多