изменения в схеме во время работы Hibernate - PullRequest
0 голосов
/ 25 октября 2010

Я работаю над системой с высоким уровнем использования, которая отображает несколько таблиц и представлений "только для чтения". В разные моменты времени мне нужно заменить данные в этих таблицах более новой версией, подключившись к базе данных извне.

Мы используем postgres 8.3+ и hibernate 3.2.6. Внешний процесс «обновления» будет подключаться к БД через PSQL.

Для некоторых небольших таблиц усечение и вставка в транзакции должны быть удовлетворительными.

Однако некоторые таблицы достаточно велики, и метод усечения / вставки, вероятно, заблокирует таблицу слишком долго.

В этом случае я рассматриваю либо:

1) переименование таблицы - т.е. загрузка новых данных в table_b, в то время как hibernate отображается на table_a, а затем выполнение переименования таблицы из table_b-> table_a через PSQL

-или-

2) всегда отображать спящий режим на представление, и при заполнении table_b переопределите представление для маршрутизации к table_b вместо избыточной теперь table_a.

-или-

3) создать и заполнить новую схему и изменить путь поиска пользователя гибернации, как только новая схема будет готова

Я не уверен на 100% в последствиях этих подходов в спящем режиме, и хотя я собираюсь протестировать как можно лучше, будет сложно протестировать коллизии (то есть запрос гибернации к таблице в том месте, где она есть). переименовывается), поэтому некоторые теоретические мнения будут высоко оценены.

, если бы кто-то пытался подобными подходами или знал о потенциальных ловушках, я был бы очень признателен.

р.

1 Ответ

1 голос
/ 25 октября 2010

Вы можете воспользоваться преимуществами PostgreSQL MVCC , переименовав таблицы внутри транзакции. Это обеспечит атомарность с точки зрения любых других текущих и будущих транзакций.

С точки зрения Hybernate, аннулирование кэша должно быть достаточным для обеспечения свежести полученных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...