2010-03-08 3 views
5

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

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

+0

«В глобальном масштабе» обычно означает «один экземпляр для всех». То, что вам нужно, это данные для каждого пользователя. –

ответ

7

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

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

+1

Еще одна вещь, которая может быть лучше, - создать собственный кеш, который будет создан при входе пользователя в систему (что-то вроде статического html-сайта, показывающего библиотеку), который удаляется через определенный промежуток времени (например, 30 минут или если пользователь выходит из системы) и который будет обновлен, если он не существует или если какой-либо запрос UPDATE был выполнен. – Tobias

+1

Правда - но за счет дополнительной сложности. В качестве первого шага я бы добавил индексы и кеш запросов к таблицам библиотек, чтобы максимизировать производительность запросов. – karim79

0

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

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

Вы можете также хранить массивы или все еще там и может быть аннулирован, если пользователь выходит из системы ,

1

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

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

2

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

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

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

1

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

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

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

1

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

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

0

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

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

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

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