【问题标题】:What are best practices for maintaining a Mysql database schema in a cross platform way?以跨平台方式维护 Mysql 数据库模式的最佳实践是什么?
【发布时间】:2012-12-06 19:46:38
【问题描述】:

我们有两个软件堆栈,Ruby on Rails 和 Java,它们共享一个 Mysql 数据库。我们正在使用 Jooq Java 数据库抽象层,它通过读取现有数据库模式并生成代码来工作。

我们一直依靠 Rails 迁移来跟踪架构更改,但我们的 Java 开发人员对此并不熟悉,我们的 Rails 开发人员不得不不止一次地为我们解决问题。这也是一个相当繁琐的过程,修改架构可能需要 5-10 分钟,而直接通过 MySql Workbench 等工具修改架构则需要几秒钟。

最好有一个解决方案来修改与 Rails 无关的数据库架构,有人可以推荐合适的方法吗?

【问题讨论】:

  • 查看 Liquibase 或 Flyway。而且从不直接通过 SQL 工具进行更改。从长远来看太麻烦了。
  • dbv (database version control) 可能很合适。
  • 您是否考虑过通过为所有数据库操作创建存储过程来在数据库上构建一个抽象层,并让 java 和 RoR 代码仅通过这些过程与数据库交互?这样,您就可以在不破坏任何代码的情况下更改数据库架构,无论是 RoR 还是 Java。
  • RedGate SQL Source Control 效果很好。我写了一份工作来每小时运行他们的 SQL 比较。检测源代码控制和数据库之间的差异。这样他们就不会失去同步。
  • 请注意:迁移与 Rails 无关,Rails 在后台使用了一个名为 ActiveRecord 的库。我不建议这样做,但您可以实际提取数据库迁移到一个单独的项目。

标签: java mysql sql ruby-on-rails jooq


【解决方案1】:

我想你可以看看Liquibase。这是一个基于 Java 的工具,但据我所知,它会满足您的某些要求。使用该工具,您可以表达数据库内容(结构和数据),然后针对正在运行的数据库运行此类工具,该工具会告诉您缺少哪些更改并应用它们。

【讨论】:

  • 感谢您的建议,但是迁移必须用 XML 表示这一事实对我来说可能是一个交易破坏者,我真的很讨厌人们使用 XML 而其他表示更有意义(在这种情况下SQL 不是表示迁移的明显语言吗?)。再说一次,不是批评你——只是发泄:-)
  • @sanity:然后检查 Flyway。它或多或少与 Liquibase 相同,但不使用 XML。虽然我认为 XML 在这里是一个不错的选择,但您可以在运行迁移之前验证迁移的正确性,并且 Liquibase 可以更好地处理多个目标 DBMS。
  • 谢谢,Flyway 看起来确实很有趣。我们需要就 XML 达成一致意见。我认为它不应该用于文本标记以外的任何东西,这是它实际设计的一件事。我不喜欢任何决定它将成为一种好的通用数据表示语言的人:-)
  • XML:我明白了。 Liquibase 可用于两种不同的方法。两者都需要 XML,而第一种方式让您以类似 XML 的方式表达所有内容,而另一种方式让您只需使用简单的条目(如 <sqlFile path=...>),然后输入您的 SQL 语句。所以似乎有机会避免使用繁重的 XML。
  • 我们的一个项目中有 Liquidbase。我接触的不多,但那时我已经体验过 RoR,而且我感觉 LB 远远落后于 RoR Migrations。它是在 XML 中定义的,它不能确定 DB 的当前版本(至少它不在我们的设置中)。我的感觉是,对于非 Ruby 的人来说,RoR 迁移 DSL 很容易理解;并且只需很少的练习,它也很容易编写。在我当前的项目中,我正在使用 RoR,我很高兴 :) 所以我建议主题启动器为 Java 人员创建一些指南并继续使用 RoR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多