@Urukhayy

Является ли нормой вести историю изменения всех свойств сущности приложения в mysql таблицу?

Является ли нормой вести историю изменения всех свойств сущности приложения в mysql таблицу?

Для примера:

Есть браузерное приложение (игра). В этой игре есть уровни персонажей, к примеру. Когда уровень персонажа повышается, вместо изменения строки этого персонажа в таблице уровней, создаётся новая строка, с новым уровнем. Старая строка со старым уровнем остаётся. Если к каждой такой строке добавить datetime, то получится история, когда персонажем был получен какой уровень.
Когда нужно узнать текущий уровень персонажа, делается запрос по последнему datetime этого персонажа.

И так ко всем свойствам этого персонажа. К примеру: оружие, опыт, и т.д.

В каком случае, по вашему мнению, свойства вообще стоит вносить в такую "историю"?
  • Вопрос задан
  • 303 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Riccky
Тебе виднее зачем она нужна. По мне так разве что для всяческих разборок с читерами, накрутчиками и при проблемах с оплатами.
Но в именно таком виде не хранил бы. Хранил бы историю отдельно, а последнее значение отдельно, чтобы выборку для текущего значения можно было бы делать без указания "последнего datetime". Поскольку для повседневной работы история не нужна, то и незачем нагружать сервер ненужной работой. Потом, по мере роста сложности игры и количества игроков у тебя будут проблемы с производительностью, если сделаешь как ты написал.
И было бы из-за чего. Не из-за чего - просмотр истории не самая частая и не самая нужная операция.
Ответ написан
PavelK
@PavelK
Если на любой чих мучать серверную БД она ляжет очень быстро от количества пользователей, как и написали в верхнем посте.

Я бы предложил хранить историю (и всё, что не важно для процесса) на клиенте,
а время от времени всё разом синхронизировать/заливать в основную БД.

Точнее да же не в основную, а в отдельную.
Ответ написан
@Visphord
У меня в одной фин. системе был подобный паттерн - висел триггер на UPDATE + INSERT, который складывал все поля + DateTime в имя_таблицы_log. Работало, но есть один нюанс. Если вдруг кто придёт и сделает update table set amount=amount+1, то базе будет ооочень плохо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы