Использование сеанса для снижения нагрузки на процессор - PullRequest
1 голос
/ 01 июля 2010

У меня есть страница, которая выполняет следующие операции:

  1. Выполняет запрос в БД (точнее, выберите u.user_uid, ut.user_metatada из пользователей u, user_tag ut, где u.uid = ut.uid. Один пользователь может иметь одну или несколько метаданных)
  2. Генерирует массив данных на основе результата запроса
  3. Выполняет некоторые сложные операции с этими массивами (подробнее об этой операции читайте в этом посте.). Возвращает окончательный результат в виде массива. Этот массив является одномерным массивом, содержащим user_uids.
  4. Выполняет другой запрос и получает user_fullname, user_photo всех элементов user_uid
  5. Печатает результат запроса на странице.

Когда пользователь перезагрузит страницу, эти 5 операций будут выполняться с самого начала. Чтобы избежать выполнения всех этих 5 операций каждый раз, когда пользователь перезагружает страницу, мы можем сохранить конечный результат (операция № 5) в сеансе. Таким образом, мы можем сказать следующее:

If session is not set
 Perform those 5 operations
else
 Print session values

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

Ответы [ 4 ]

3 голосов
/ 01 июля 2010

Использование APC или Memcached .Они в кэшах значений ключа памяти предназначены именно для этой цели. Вы можете хранить массивы в них, если хотите, и установить время истечения для аннулирования. Facebook использует их , чтобы уменьшить нагрузку, чтобы они не могли быть плохими ... :)

1 голос
/ 01 июля 2010

Вы также можете использовать что-то вроде memcached

И если лучше попытаться уменьшить загрузку процессора или памяти, это зависит.

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

0 голосов
/ 01 июля 2010

Вы также можете сохранить свой результат в новой БД-таблице. Или в сеансе.

Объем используемой памяти будет зависеть от того, сколько пользователей посещают ваш сайт. Каждый пользователь создаст новую запись в каталоге session_save_path (именно там хранится информация о сеансе).

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

0 голосов
/ 01 июля 2010

В вашем случае: что вам нужно больше, процессор или память?

Если результат этих 5 операций не меняется часто, во что бы то ни стало, кэшируйте результат (в сеансах или на диске).

...