Нулевое время простоя с Hibernate - PullRequest
3 голосов
/ 09 марта 2009

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

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

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

Спасибо Stephan

1 Ответ

1 голос
/ 12 марта 2009

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

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

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

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

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

  • изменение источников данных: вероятно, требуется перезапуск приложения
  • разделение сервера приложений: если вы имеете в виду то, что я думаю, вы можете просто развернуть на разных серверах приложений. Если требуется переключение, используйте что-то между вашим веб-приложением и клиентом для их обработки, например, балансировщик нагрузки на уровне IP или аналогичный.
  • изменение данных: применяются обычные проблемы с транзакционными базами данных и несколькими авторами. Hibernate может привести к несовместимому представлению базы данных. Это может перезаписать изменения другими пользователями, а в некоторых случаях это может привести к возникновению некоторых исключений, но вы должны быть в состоянии предвидеть и действовать в ситуациях, подобных этим AFAICT.
...