Вопрос

Какие изменения в базе данных (в данном случае MySQL) сохраняются в Hibernate (данные, схема,...)?

Я спрашиваю об этом из-за отсутствия простоев в Hibernate.

Измените базу данных, разделите серверы приложений на два кластера, повторно разверните приложение в одном из кластеров и переключите приложение.

Спасибо, Стефан

Это было полезно?

Решение

Я отвечу на этот вопрос исходя из личного опыта, а не из какого-то особого понимания спящего режима.Так что отнеситесь к этому с недоверием.Тоже немного расплывчатый вопрос, добавляйте комментарии там, где это уместно.:)

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

Более проблематичными являются изменения в отображаемом материале.Предположим, вы изменили число (10,0) на число (11,0), обычно это работает.Если вы начнете делать что-то вроде изменения поля CHAR(1) на поле BIT или что-то подобное, вам потребуются определенные изменения в ваших сопоставлениях спящего режима, что приведет к сбою существующего развертывания.Это здравый смысл.Если вам все же необходимо внести подобные изменения, выполнение ALTER TABLE на обычном сервере базы данных, вероятно, все равно заблокирует таблицу, поэтому перезапуск приложения не является вашей самой большой проблемой.

Работа с серьезными изменениями схемы в условиях высокой доступности — это не то, с чем спящий режим должен иметь дело напрямую.Hibernate предполагает традиционную реляционную базу данных, изменения схемы которой часто обходятся очень дорого.

Три другие проблемы, которые вы упомянули:

  • изменение источников данных:вероятно, требуется перезапуск приложения
  • разделение сервера приложений:если вы имеете в виду то, что я думаю, вы имеете в виду, вы можете просто развернуть его на разных серверах приложений.Если требуются переключения, используйте что-то среднее между вашим веб-приложением и клиентом для их обработки, т.е.балансировщик нагрузки уровня IP или аналогичный.
  • изменение данных:применяются обычные проблемы с транзакционными базами данных и несколькими авторами.Hibernate может привести к несогласованному представлению базы данных.Изменения, внесенные другими пользователями, могут быть перезаписаны, а в некоторых случаях это может вызвать некоторые исключения, но у вас должна быть возможность предвидеть и действовать в таких ситуациях, как эта AFAICT.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top