Подтвердить что ты не робот

Сессия VS Файл VS Memcache для кэша в PHP?

У меня есть социальная сеть

  • Таблица пользователей составляет около 60 000 строк

  • Таблица друзей составляет около 1 миллиона строки (используемые для определения того, кто является вашим друг)

Я хочу сделать ссылку для друга, стену, что бы вы ни назвали, она будет показывать такие вещи, как сообщение о статусе пользователя (сообщения типа Twitter), будет показано несколько разных элементов, но для начала это будет просто статус друга и, возможно, сообщение в блоге.

В основном вы увидите только контент, опубликованный с идентификатором пользователя, который находится в вашем списке друзей.

Я пытаюсь найти лучший способ и не очень далеко, но вот моя последняя идея.

В настоящее время для создания этого фида мне нужно

  • Получить список идентификаторов друзей на таблица большого друга

  • Получить данные потока от друга ids из приведенного выше результата

  • ПРИСОЕДИНИТЕСЬ к таблице пользователя, чтобы получить URL и имя пользователя издателей

  • Затем подключитесь к таблице комментариев, чтобы получить комментарии, отправленные в фид.

Это одна большая задача для создания этого фида

У меня есть 3 идеи до сих пор, вот где может помочь ваша помощь.

Вариант Memcache:

  • Использовать memcache и кешировать пользователей friendlist как массив, когда пользователь регистрируется на сайте, также когда пользователь одобряет новый запрос друга на друга, который будет добавлен в список, он восстановит там кеш.
  • В дополнение к тому, чтобы просто получать туда друзей, я мог бы сохранить там URL-адрес и имя пользователя друзей, это ускорит все, устраняя этот запрос при создании файла-друга.

Файловый кеш-код:

  • Сделайте то же самое, что и параметр memcache но сохраняет эти данные как массив к кеш файлу вместо памяти, затем включите этот файл кеша в страница.

  • Я не уверен, какой из лучших метод для работы я понимаю memcache хранит все в памяти поэтому друзья, у которых есть 20 000 друзей, которые могли бы использовать много памяти и кеша файлов поместить его в память, когда пользователи это нужно, если я прав. Также, если я сделал метод файла, когда пользователь выходит из сайта, я бы удалил там кеш файл, поэтому папка кэша никогда не будет слишком большим файлов

Кэш сеанса Опции:

  • То же, что и в кэше файлов выше, я просто понял, что данные сеанса сохранены в файл, поэтому это не сделает его способным кэш-памяти?

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

4b9b3361

Ответ 1

Memcache - ваш лучший выбор по множеству причин:

  • Это ДЕЙСТВИТЕЛЬНО быстро - все в памяти, и оно очень оптимизировано для ситуаций, подобных вашим (и кэширование в целом:)
  • Распространяется. Это означает, что если у вас несколько серверов веб-приложений или приложений, они могут получить доступ к одному и тому же кешу
  • Вы можете объединить несколько серверов для memcache. Если у вас несколько серверов, которые недостаточно используются (или несколько выделенных кеш-серверов), вы можете объединить их все вместе в один большой кеш
  • Это супермасштабируемое (по причинам, упомянутым ранее)
  • Он получил отличную поддержку PHP - пакет PECL для memcache был недавно обновлен с большим количеством новой доброты.
  • Вы даже можете хранить свои пользовательские сеансы в memcache - просто установите его в файле php.ini. Это намного быстрее, чем хранение сессий в базах данных, и позволяет вашим сеансам сохраняться на нескольких веб-хостах (если вы находитесь в ситуации с балансировкой нагрузки)... это также даст вашему сайту немного повышения производительности, поскольку нет необходимости ударить файловую систему/базу данных для информации о сеансе по каждому запросу.

... и многое другое;)

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

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

Ответ 2

Максимальный размер объекта по умолчанию, допустимый в Memcache, равен 1 МБ.

@jsaondavis: "данные сеанса сохраняются в файл".

Ваше утверждение выше неверно. Сессия может быть настроена для хранения в базе данных. По умолчанию сеанс hasndler является файлом.

Ответ 3

Redis будет хорошим решением:

Вот поток на Redis Vs. Memcached. Похоже, что у Redis есть 512mb-хранилище, а не ограничение 1mb... QUITE немного отличается:)

Memcached vs. Redis?