В таких решениях не используют MySQL.
Берите Redis и храните что-то типа такого:
1. like:post:{pid}:count - количество лайков поста с ID={pid}
2. like:post:{pid}:users - пользователи, которые лайкнули пост c ID={pid}
3. like:user:{uid}:count - количество постов, которые лайкнул пользователь с ID={uid}
4. like:user:{uid}:posts - посты, которые лайкнул пользователь с ID={uid}
SELECT p.id, p.cat_id, p.name, p.image, p.price, p.brand, p.image_type, p.url FROM product p
LEFT JOIN har_values v ON (v.prod_id = p.id)
WHERE p.id = 1 LIMIT 1;
Выбираем заголовки:
SELECT id, name FROM hars WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9);
Если потребление памяти растет день ото дня - значит она где-то течет. Надо искать утечки.
Если объем памяти возрастает до какого-то предела и стабилизируется - это нормальная работа сервисов и их кэша. Перезапуск в этом случае будет снижать производительность.
Если у вас фиксированное количество полей, зачем изобретать велосипед — храните всё в одной таблице (user_id, name, birthday, field_1,… field_N).
Если поля добавляются (из админки сайта, например, если это сайт), то лучше создавайте каждому типу поля (int, text, date, etc) новую таблицу.
В друпале, например, вообще каждому новому полю создается своя таблица, а в запросах потом куча JOIN'ов.
Палка о двух концах. Очевидные и наиболее адекватные варианты:
1. Выбрать посты, выбрать количество комментариев к ним. Итого 2 SELECT запроса на отображение.
2. Использовать LEFT JOIN и GROUP BY. Итого один, но медленный запрос на отображение.
3. Добавить столбец comments_count в таблицу постов. На отображение будет один быстрый запрос, но на вставку нового комментария добавится один UPDATE (или триггер), плюс нужно будет внимательно следить за этим значением (уменьшать при удалении комментария и т.п.).
Если нагрузка не очень большая, я бы выбрал первый вариант как самый простой в реализации и поддержке. При увеличении нагрузки перешел бы на третий.
Ответ написан
Комментировать
Комментировать
Оценили как «Нравится»
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.