как получить результаты пользовательского поиска для сайта социальной сети

#php #mysql #caching #social-networking

#php #mysql #кэширование #социальная сеть

Вопрос:

У меня есть сайт социальной сети, написанный на PHP и использующий базу данных MySQL. В настоящее время я показываю предварительный просмотр пользователей онлайн на главной странице для людей, которые не вошли в систему. Это можно легко кэшировать, поскольку результаты одинаковы для всех.

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

Вначале это не было проблемой, но теперь, когда более 100 тысяч участников и несколько очень активных пользователей, это становится большой проблемой!

Я чувствую, что есть более эффективный способ сделать это, и я ищу идеи: D

Комментарии:

1. Звучит больше как сайт типа «знакомства» или «горячие синглы ждут вас!», чем «социальная сеть».

2. отношения пользователей очень часто не являются взаимно однозначными.. итак, это своего рода социальная сеть: D

Ответ №1:

Вы можете заменить ник «заблокированного» пользователя некоторым заполнителем («заблокированный» или «нежелательный»), когда зарегистрированный пользователь просматривает список.
Смотрите, как SO делает то же самое с «Игнорируемыми тегами» (на главной странице) — вопросы с игнорируемыми тегами просто исчезают.
Это позволит вам избежать проблем с разбиением на страницы.