Лучшая практика для хранения глобальных данных в PHP? - PullRequest
5 голосов
/ 08 марта 2010

Я запускаю веб-приложение, которое позволяет пользователю войти в систему. Пользователь может добавлять / удалять контент в своей «библиотеке», которая отображается на странице с именем «library.php». Вместо того, чтобы запрашивать базу данных о содержимом библиотеки пользователей каждый раз, когда они загружают «library.php», я хочу хранить ее глобально для PHP, когда пользователь входит в систему, чтобы запрос выполнялся только один раз. Есть ли лучшая практика для этого? FX. хранить свою библиотеку в массиве в сеансе?

Спасибо за ваше время

Ответы [ 7 ]

7 голосов
/ 08 марта 2010

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

Честно говоря, если не происходит каких-либо серьезных тяжелых запросов для получения библиотеки или если у вас тонны трафика, я бы просто придерживался 'выполнить запрос всякий раз, когда пользователь нажимает на library.php'.

2 голосов
/ 08 марта 2010

Рассмотрим размер данных. Умножьте это на максимальное количество одновременных пользователей.

Затем сравните это с доступной памятью на вашем сервере. Также подумайте, действительно ли это общий сервер; другие сайты тоже нуждаются в ресурсах.

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

1 голос
/ 08 марта 2010

Поскольку это оптимизация производительности БД, я бы посоветовал вам взглянуть на memcached , который идеально соответствует вашей проблеме:

memcached [...] предназначен для использования на скорости динамические веб-приложения облегчение загрузки базы данных.

1 голос
/ 08 марта 2010

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

Одним из способов могут быть сеансы, но это зависит от объема данных, которые вы хотите сохранить. Согласно вашему примеру, вы говорите о библиотеке, поэтому мне кажется, что необходимо сохранить большое количество данных, в таком случае БД - это путь, и да, вы должны каждый раз запрашивать ее.

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

1 голос
/ 08 марта 2010

Когда пользователь входит в систему, вы можете сгенерировать xml-файл (например, USER_ID.xml), который вы отображаете с помощью xslt.

http://php.net/manual/en/book.xslt.php

0 голосов
/ 08 марта 2010

вы заботитесь о производительности; Пожалуйста, обратите внимание:

  • Сессия может использовать базу данных или файл для хранения данных.
  • предназначена для использования вместо файлов из-за ее производительности и возможностей.

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

0 голосов
/ 08 марта 2010

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

$_SESSION['key'] = "value";

Вы также можете хранить массивы или все остальное там, и его можно очистить, если пользователь выйдет из системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...