@ClaraOswald

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы