php session vs mysql speed

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

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

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

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

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

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

Установите новое значение в сеансе :

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

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

Время: 0.00000811 секунд

Вставьте то же значение в файлы cookie

Время: 0.00000906 секунд

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

$before = microtime(true); // Put your code here $after = microtime(true); $Speed = number_format(( $after - $before), 8); echo "<h1>Time: " . $Speed . " Seconds</h1>"; 

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

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

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

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