【问题标题】:changes to the schema while hibernate is running在休眠运行时更改架构
【发布时间】:2010-10-25 05:01:05
【问题描述】:

我正在开发一个高使用率系统,该系统映射一些“只读”表和视图。在不同的时间点,我需要通过外部连接到数据库来将这些表中的数据替换为更新的版本。

我们使用的是 postgres 8.3+ 和 hibernate 3.2.6。外部“更新”进程将通过 PSQL 连接到数据库。

对于一些较小的表,事务中的截断和插入应该是令人满意的。

但是有些表非常大,truncate/insert 方法可能会锁定表太久。

在这种情况下,我正在考虑:

1) table rename - 即在hibernate映射到table_a时将新数据加载到table_b中,然后通过PSQL从table_b->table_a执行表重命名

-或-

2) 始终将 hibernate 映射到视图,并且当 table_b 被填充时重新定义视图以路由到 table_b 而不是现在冗余的 table_a。

-或-

3) 创建并填充新架构,并在新架构准备好后更改休眠用户的搜索路径

我不能 100% 确定这些方法在休眠中的影响,尽管我将尽我所能进行测试,但很难测试冲突(即在此时对表进行休眠查询)被重命名),所以一些理论意见将不胜感激。

如果有人尝试过类似的方法或知道潜在的陷阱,我将非常感激..

p.

【问题讨论】:

  • 对可能没有一个正确答案的问题表示歉意...

标签: hibernate postgresql


【解决方案1】:

您可以通过重命名事务中的表来利用 PostgreSQL 的 MVCC。从任何其他正在运行和未来的事务的角度来看,这将确保原子性。

从Hybernate的角度来看,使缓存失效应该足以保证检索到的数据的新鲜度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多