PHP сессия против скорости MySQL - PullRequest
3 голосов
/ 23 февраля 2010

Я работаю в системе разрешений. На каждой странице нужно будет проверить, есть ли у пользователя разрешение на это. У меня есть два варианта: сохранить данные в переменной сеанса (которая обновляется только при входе в систему) или каждый раз запрашивать информацию в базе данных. Что быстрее?

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

Ответы [ 4 ]

7 голосов
/ 23 февраля 2010

Скорость SESSION против DB зависит от ряда факторов:

  • Сколько данных будет храниться в переменной сеанса
  • Каково действительное хранилище переменных сеанса (если это сеансы, поддерживаемые базой данных, это будет в основном то же время)

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

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

3 голосов
/ 23 ноября 2016

Установить новое значение в сеанс дубль:

Время: 0,00062895 секунд

Вставить то же значение в базу данных дубль:

Время: 0,00000811 секунд

Вставить то же значение в Cookies

Время: 0,00000906 секунд

Или вы можете проверить, используя этот код:

$before = microtime(true);
    // Put your code here
$after = microtime(true);
$Speed = number_format(( $after - $before), 8);

echo "<h1>Time:  " . $Speed . " Seconds</h1>";
1 голос
/ 23 февраля 2010

Я бы сохранил такую ​​информацию в сеансе:

  • Эти данные относятся к текущему пользователю
  • Каждый пользователь имеет свою версию данных
  • Такие данные вряд ли будут часто меняться - это означает, что ожидание, пока не истечет сеанс и пользователь не вернется, часто в порядке.
    • и, если вы думаете, что он будет часто меняться, вы можете сохранить некоторую метку времени в сеансе вместе с этими данными, чтобы отслеживать «когда», которое было выбрано из БД в последний раз; и если он получен " слишком давно ", просто повторяйте его каждые пару минут.


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

0 голосов
/ 23 февраля 2010

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

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