3

Hibernate 对数据库(在这种情况下为 MySQL)有哪些变化(数据、模式、...)?

我问这个是因为 Hibernate 的停机时间为零。

更改数据库,将应用服务器拆分为两个集群,在其中一个集群上重新部署应用程序并切换应用程序。

谢谢斯蒂芬

4

1 回答 1

1

我将根据个人经验而不是对休眠的任何特殊见解来回答这个问题。所以把这个和一粒盐一起吃。似乎还有一个模糊的问题,请在适当的地方添加评论。:)

首先,更改/添加/删除未在 hibernate 中映射的模式的内容永远不会导致任何问题。hibernate 真正做的就是生成查询,因为它将很多东西转换为 SQL,只要这些查询继续工作,你的应用程序就会继续工作。这意味着向表中添加列或添加表不是问题,删除未映射的列也不是问题等等。

更成问题的是对映射内容的更改。假设您将数字(10,0)更改为数字(11,0),这通常会起作用。如果您开始做一些事情,比如将 CHAR(1) 字段更改为 BIT 字段或类似的东西,您将需要在您的休眠映射中进行某些更改,这将使现有部署失败。这是常识。如果您确实必须进行这样的更改,那么在常规数据库服务器上执行 ALTER TABLE 可能无论如何都会锁定表,因此重新启动应用程序不是您最大的问题。

在高可用性下处理主要的模式变化并不是 hibernate 直接处理的事情。Hibernate 假设一个传统的关系数据库,其中模式更改通常非常昂贵。

您提到的其他三个问题:

  • 更改数据源:可能需要重新启动应用程序
  • 拆分应用服务器:如果您的意思是我认为的意思,您可以简单地部署在不同的应用服务器上。如果需要切换,请在您的 Web 应用程序和客户之间使用一些东西来处理它们,即 IP 级负载平衡器或类似的东西。
  • 更改数据:事务数据库和多个写入器的正常问题适用。Hibernate 可能以不一致的数据库视图结束。它可能会覆盖其他用户的更改,并且在某些情况下,这可能会产生一些异常,但您应该可以预测和处理这些 AFAICT 之类的情况。
于 2009-03-12T10:45:33.613 回答