Обновить записи базы данных

Давно хотел поднять этот вопрос. Можно ли обновлять записи базы данных во время работы сервера? На самом деле вопрос в другом, целесообразно ли делать эти обновления при работающем сервере или предпочтительнее выключить сервер, внести изменения и снова включить его? Спасибо. Некоторым это может показаться самым глупым вопросом в мире, но они даже не могут себе представить, сколько раз я видел, как люди обновляют журналы при работающем сервере.


person Walter Pagani    schedule 02.12.2020    source источник


Ответы (4)


Всегда предпочтительнее вносить изменения в БД, когда сервер отключен.

Однако существует набор таблиц, поддерживающих перезагрузку в реальном времени. Это означает, что вы можете изменить их, а затем перезагрузить их содержимое с помощью .reload * команд GM. В этом файле реализованы такие команды:

Обратите внимание, что хотя большинство команд .reload * перезагружают всю таблицу, в некоторых случаях, таких как reload creature_template XXX, вы можете перезагрузить только определенный объект XXX в данный момент (поэтому вы не можете перезагрузить всю таблицу сразу).

Обычно редактирование содержимого таблиц, поддерживаемых командами .reload *, считается достаточно безопасным.

Есть и другие случаи, когда редактировать содержимое таблицы еще безопасно, но они не сразу отражаются в ядре. Например, если вы меняете учетную запись персонажа (путем изменения поля учетной записи в characters таблицы базы данных acore_characters), изменения отражаются при следующем входе в учетную запись.

Наконец, могут быть случаи, когда редактирование значения БД может привести к непоследовательному поведению. Например, сервер может не загрузить вовремя новое изменение, внесенное в базу данных вручную, а затем перезаписать его. Таким образом, ручное изменение будет потеряно. Если вы сомневаетесь, всегда лучше сначала поэкспериментировать в тестовой среде, прежде чем применять изменения в производственной среде.

person Francesco Borzi    schedule 02.12.2020
comment
Благодарю за ваш ответ. - person Walter Pagani; 02.12.2020

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

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

person naravena    schedule 02.12.2020
comment
Благодарю за ваш ответ. - person Walter Pagani; 02.12.2020

Я попытался обновить базу данных с некоторыми изменениями текста npc, пока сервер все еще работал, но обновления вообще не отражались, поэтому мне пришлось снова запускать docker-compose.

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

Было бы здорово иметь эту функцию, так как она увеличит время отладки.

person Hacaw    schedule 02.12.2020
comment
Благодарю за ваш ответ. - person Walter Pagani; 02.12.2020

Выключите сервер, чтобы делать большие обновления, иначе у вас могут возникнуть нежелательные проблемы (когда запрос выполняется ядром одновременно)

person Barbz_YHOOL    schedule 02.12.2020
comment
Благодарю за ваш ответ. - person Walter Pagani; 02.12.2020