Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Как вы думаете это номальная практика хранить некоторые данные в БД (Mysql) в виде JSON строк? Вот например: У нас есть 1000 постов которые имеют фотки (10 штук к каждому) и например комментарии. И нам нужно выводить в цикле посты (штук 20) в таком формате: Пост с фотками и последними 3-мя комментариями. Например как выводятся посты на стене ВК. Можно ли в таблице с постами сделать 2 дополнительных ячейки (photos и comments) и в них хранить данные в виде JSON строк. Там для фоток JSON строка и такойже для 3-х последних комментариев. Ну а при изменении или добавлении фотки или коммента например обновлять эти поля?
Как мне кажется это сильно снизит нагрузку на БД, вы как думаете?
Изменено legolas4444 (28.10.2014 14:15:09)
Не в сети
При наличии кэширования, хранение данных в таком виде выйдет потом боком. Экономите на собственных нервах и времени...
Не в сети
В принципе, если ожидается ОЧЕНЬ большой траф, то подобная схема денормализации базы оправдана.
Не в сети
Вопрос нагрузки на БД решаем как технологически (кэширование, распределение нагрузки по разным серверам и проч), так и с точки зрения взаимодействия пользователя с ресурсом (например, лоадить комменты по требованию - при достижения конца ограниченного списка, infinite scroll, etc).
При этом, если потребуется работать с этими данными в дальнейшем, то при такой нормализации придётся либо смириться с потерей старых данных, либо извращаться с работой с таким форматом, что в любом случае приведёт к геморрою (либо для заказчика, либо для разработчика).
Изменено SMGladkovskiy (28.10.2014 16:42:50)
Не в сети
- В принципе, если ожидается ОЧЕНЬ большой траф, то подобная схема денормализации базы оправдана.
Для очень большого графа — как раз нет, так как больше объём данных → более сильная нагрузка → более мощный сервер → быстрее работа с мелкими выборками/выборками по индексам. В частности, никто не отменяет встроенное кэширование целых запросов в памяти самой СУБД.
С другой стороны, на маленьких объёмах данных хранение (кэширование) чего-либо в JSON внутри БД не имеет смысла, так как нагрузка небольшая, это больше экономия на связности (в худшую сторону, т.к. СУБД не проверяет содержимое JSON-строк) и на нервах/времени, как написал SMGladkovskiy.
Лучший вариант -с кэшированием где-нибудь в Redis/memcached, если на мощный сервер нет бюджета или это не целесообразно по текущему объёму данных/нагрузке.
Не в сети
Страницы 1