Возможный дубликат:
Не удается передать соединение mysqli в сеансе в php
Многие из нас написали PHP-приложения, которым требуются базы данных; в основном MySQL, но я часто использовал очень маленькие базы данных MS Access для людей, которые менее технически способны, чтобы они могли загрузить их / сохранить резервные копии / и т. д. (независимо от того, правильно это или нет, я понятия не имею).
Что я замечаю, много времени тратится на подключение и запуск некоторых из тех же запросов. Из-за этого у меня возникла интересная мысль: сохранение соединения и возможных наборов результатов, которые в основном статичны в переменной $_SESSION
чтобы уменьшить нагрузку, поскольку пользователь перемещает сайт.
Очевидно, что для этого требуется много внимания. Такие вещи, как закрытие соединения при уничтожении сеанса, – это только начало.
Мой вопрос сводится к: действительно ли это возможно? И если да, то что мне следует знать (помимо фиксации сеанса , поскольку это его собственная проблема, применимая ко всем сеансам)?
Даже если вы можете это сделать (ресурс против данных), это плохая идея. У вас будет много одновременных открытых подключений, которые очень быстро взорвут ваши максимальные соединения … особенно если его жизненный цикл расширяется за пределами более чем на 100 мс (в зависимости от ваших запросов) до 20 минут и более. С открытыми соединениями что-то вроде MySQL также не сможет правильно восстановить свои распределения памяти, и вся система вроде бы идет в ад. Короче говоря, это не то, что есть в БД, если единственным потребителем вашего кода будет один пользователь.
В качестве альтернативы я настоятельно рекомендую технологии кэширования, которые разработаны специально для уменьшения загрузки базы данных и сокращения времени соединения. Используя что-то вроде простейшего, memcached значительно улучшит производительность, и вы сможете точно указать, сколько системных ресурсов входит в кеш, позволяя базе данных выполнять свою работу по получению данных, когда это необходимо к.
Вы не можете хранить подключения к базе данных или результирующие наборы в сеансе, так как это ресурсы и:
Некоторые типы данных не могут быть сериализованы, поэтому сохраняются в сеансах. Он включает переменные ресурсов или объекты с циклическими ссылками (т.е. объекты, которые передают ссылку на себя другому объекту).
Вы можете извлечь набор результатов в обычный массив и сохранить его в сеансе, как и любую другую переменную. В любом случае это будет довольно типичный вариант использования сессий. Просто будьте осторожны, чтобы не хранить слишком много данных в сеансе, поскольку это может стать более обременительным, чем извлечение из базы данных.
Вы можете проверить постоянные соединения для соединительной части. http://php.net/manual/en/function.mysql-pconnect.php
Вы должны использовать их в некоторых конфигурационных файлах для лучшего использования. Сессии предназначены для определенных сеансов, а не для глобальных.