2009-03-09 2 views
3

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

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

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

Благодаря Stephan

ответ

1

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

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

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

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

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

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