2015-02-13 1 views
0

У меня есть веб-сайт, который извлекает и отображает много информации из базы данных. Эта информация также может быть почти одинаковой между двумя различными запросами.Информация о базе данных: Храните его в сеансе или воссоздайте его по каждому запросу?

Я хотел бы знать, если это лучше:

  1. хранить эту информацию в переменной сессии (там может быть много информации)
  2. Воссоздать его на каждом запросе (даже если это почти то же самое и может занять некоторое время для создания)

Я обеспокоен масштабируемостью, когда будет много пользователей.

Любая другая альтернатива?

Trivial Пример

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

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

Сохраните список пользователей в сеансе или извлечете его из базы данных?

+0

Какую базу вы используете? В Oracle я, вероятно, займусь настройкой кеша буфера и тем самым и позволяю ему обрабатывать кэширование обычно повторно используемых материалов. – Ditto

+0

@Ditto SqlServer. Но это не то, что является глобальным для всего приложения, скорее, оно специфично для одного конкретного пользователя по одному конкретному запросу. Это означает, что он не может использоваться для всего приложения. – Gudradain

+0

Хорошо, извините, что я не знаком с sql-сервером, поэтому вам нужно будет помочь кому-то еще, однако, предполагая, что sql-server имеет что-то похожее, настройка того, как DB обрабатывает память, не является проблемой в отношении вам кажется, что это всего лишь 1 сеанс. БД выяснит это. Если это не полезно для другого сеанса, оно не будет использоваться. Возможно, это не очень полезно в этой ситуации, поэтому вам нужно будет понять, что предлагают эксперты sql-сервера;) удачи – Ditto

ответ

1

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

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

Скажем, в вашем примере у вас есть список пользователей, и ваша цель - показать самые обновленные данные всегда, я бы не кэшировал его по умолчанию. Любая современная СУБД (mysql, postgresql и т. Д.), Вероятно, имеет систему кэширования, которая достаточно хороша для общего варианта использования. Но предположим, вы показываете некоторые данные статистики, которые требуют запроса с несколькими объединениями в таблицах с тысячами строк. И предположим, что эти данные не будут существенно изменяться в почасовой базе, я бы определенно его кешировал.

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

ps: Если вы решили перейти на кеширование в сеансе, лучше всего хранить PHP Session в memcached (это высокопроизводительная система кэширования объектов с распределенной памятью). Вам нужно будет установить memcached, а затем изменить настройки php.ini, here - быстрый учебник для справки.

Смежные вопросы