@ClaraOswald

Как лучше хранить данные об обновлении статуса пользователя JSON или MSQL таблица?

У меня есть потребность хранить статус обновления пользователя, вернее и историю его изменений. Как мне лучше это реализовать.
Первый вариант хранить эти данные в поле text MSQL таблицы в виде json, но есть проблема записей может быть несколько тысяч, а то и сотни тысяч.
сейчас как раз такая система и реализована.
MRy28nlgR9s.jpg
И поскольку это нарушает нормальность таблицы есть от части более правильный вариант, и на первое время точно более оптимизированный. Создать таблицу где будут хранится данные о каждом обновлении статуса пользователя, последняя запись будет являться актуальным статусом и иметь примерно такую структуру.
rsBb_7qrBTs.jpg
вопрос будет ли это более оптимизировано в конечном итоге? ведь если у нас будет 100к пользователей и на каждого будет приходиться по 10к записей, не загнется ли MYSQL от этого добра?
  • Вопрос задан
  • 1221 просмотр
Пригласить эксперта
Ответы на вопрос 1
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
вопрос будет ли это более оптимизировано в конечном итоге? ведь если у нас будет 100к пользователей и на каждого будет приходиться по 10к записей, не загнется ли MYSQL от этого добра?

Это уже вопрос не столько про то, как правильно хранить данные, сколько про возможности MySQL.

100к*10к = 1млрд., при таком объёме данных всё зависит от уровня (скилла) администратора MySQL. Чисто гипотетически - должно работать, на практике, когда MySQL разрастается до очень больших масштабов - может случиться что угодно, в т.ч. могут посыпаться ключи/связи, индексы и т.д., и даже лучшие специалисты из профильных компаний помочь в этом случае смогут не всегда.

Но, можно сказать, однозначно, что:
а) При таких объёмах данных и кол-ве пользователей, это будет как минимум очень неплохая соц. сеть (подающая надежды) или проект подобного масштаба и бюджет позволит нанять хороших спецов для обслуживания БД такого рода
б) JSON с такими объёмами "загнётся" куда быстрее чем база. Особенно это касается JSON'а в MySQL, который представляет из себя исключительно текстовое поле (в отличии PostgreSQL например), которое НЕ индексируется как JSON.

P.S. Вообще, MySQL не очень любит большой объём данных в одной колонке. К сожалению, не могу сказать с чем именно это связано, т.к. детально вопрос не изучал, но личные тесты (тесты проводимые лично, для самого себя, без какого либо намёка на их объективность или истину в последней инстанции) говорят именно об этом.

P.P.S. Попробуйте так же посмотреть в сторону таких движков, как например ARCHIVE. Я лично пробовал такой движок всего однажды и подробностей озвучить не могу, но чисто логически, он как раз предназначен для подобных задач, хранения "архивной" информации.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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