Hibernate 能够对数据库(本例中为 MySQL)进行哪些更改(数据、模式……)?

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

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

感谢斯蒂芬

有帮助吗?

解决方案

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

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

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

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

您提到的另外三个问题:

  • 更改数据源:可能需要重新启动应用程序
  • 拆分应用程序服务器:如果您的意思是我认为您的意思,您可以简单地部署在不同的应用程序服务器上。如果需要切换,请在您的网络应用程序和客户之间使用某些东西来处理它们,即IP 级负载均衡器或类似的。
  • 改变数据:事务数据库和多个编写器的常见问题也适用。Hibernate 可能会导致数据库视图不一致。它可能会覆盖其他用户的更改,并且在某些情况下可能会生成一些异常,但您应该能够预测此类 AFAICT 等情况并采取行动。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top