Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 28.10.2014 14:10:00

Хранение JSON строк в БД. Обсуждение

Как вы думаете это номальная практика хранить некоторые данные в БД (Mysql) в виде JSON строк? Вот например: У нас есть 1000 постов которые имеют фотки (10 штук к каждому) и например комментарии. И нам нужно выводить в цикле посты (штук 20) в таком формате: Пост с фотками и последними 3-мя комментариями. Например как выводятся посты на стене ВК. Можно ли в таблице с постами сделать 2 дополнительных ячейки (photos и comments) и в них хранить данные в виде JSON строк. Там для фоток JSON строка и такойже для 3-х последних комментариев. Ну а при изменении или добавлении фотки или коммента например обновлять эти поля?
Как мне кажется это сильно снизит нагрузку на БД, вы как думаете?

Изменено legolas4444 (28.10.2014 14:15:09)

Не в сети

#2 28.10.2014 15:05:01

Re: Хранение JSON строк в БД. Обсуждение

При наличии кэширования, хранение данных в таком виде выйдет потом боком. Экономите на собственных нервах и времени...

Не в сети

#3 28.10.2014 15:43:57

Re: Хранение JSON строк в БД. Обсуждение

В принципе, если ожидается ОЧЕНЬ большой траф, то подобная схема денормализации базы оправдана.

Не в сети

#4 28.10.2014 16:41:06

Re: Хранение JSON строк в БД. Обсуждение

Вопрос нагрузки на БД решаем как технологически (кэширование, распределение нагрузки по разным серверам и проч), так и с точки зрения взаимодействия пользователя с ресурсом (например, лоадить комменты по требованию - при достижения конца ограниченного списка, infinite scroll, etc).

При этом, если потребуется работать с этими данными в дальнейшем, то при такой нормализации придётся либо смириться с потерей старых данных, либо извращаться с работой с таким форматом, что в любом случае приведёт к геморрою (либо для заказчика, либо для разработчика).

Изменено SMGladkovskiy (28.10.2014 16:42:50)

Не в сети

#5 28.10.2014 18:26:30

Re: Хранение JSON строк в БД. Обсуждение

  1. В принципе, если ожидается ОЧЕНЬ большой траф, то подобная схема денормализации базы оправдана.

Для очень большого графа — как раз нет, так как больше объём данных → более сильная нагрузка → более мощный сервер → быстрее работа с мелкими выборками/выборками по индексам. В частности, никто не отменяет встроенное кэширование целых запросов в памяти самой СУБД.

С другой стороны, на маленьких объёмах данных хранение (кэширование) чего-либо в JSON внутри БД не имеет смысла, так как нагрузка небольшая, это больше экономия на связности (в худшую сторону, т.к. СУБД не проверяет содержимое JSON-строк) и на нервах/времени, как написал SMGladkovskiy.

Лучший вариант -с кэшированием где-нибудь в Redis/memcached, если на мощный сервер нет бюджета или это не целесообразно по текущему объёму данных/нагрузке.

Не в сети

Подвал раздела