2013-02-12 6 views
1

Возможно, фиктивный вопрос, но я не могу понять это. Это вопрос концепции. У меня есть веб-платформа, в которой пользователи хранят много вещей с примерно 500 одновременными подключениями. В срок исполнения/безопасности, что это лучший подход:Подключения к базе данных MySQL

  • Подключение пользователя к БД каждый раз, когда мне нужно, чтобы получить данные из него (каждый раз, когда он идет на другую страницу BTW) и закрыть соединение после Я схватил их? or
  • Подключить пользователя ONCE к БД при входе в систему, сохранить ссылку на БД (например, в $ _SESSION) и убить соединение при выходе из системы? or
  • При входе в систему вы можете получить почти все, что угодно, от таблицы пользователя, его профили один и все остальные, поместить их в $ _SESSION и подключиться только к БД при необходимости обновления/вставки?

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

Спасибо за помощь.

+0

Если '$ _SESSION' является ссылкой на PHP, вы не можете хранить ресурсы в PHP сессий. –

+0

Правильно ;-). Забыли это. – fperr

ответ

0

Я бы сказал, что это сильно зависит от вашего конкретного варианта использования и настройки вашего сервера. Единственный способ узнать наверняка, это попробовать различные решения и профилировать свой код.

Обычно, когда вы просматриваете свое первое выбранное решение, вы получите подсказки о причинах задержек и о том, что является самым большим источником времени ожидания/обработки. Таким образом, вы сможете лучше понять следующее (и улучшенное) решение.

Как правило, это хороший подход к оценке лениво, а затем кэш как можно больше. Для веб-приложений нереляционные базы данных, такие как Memcached или Redis, чтобы назвать несколько, являются де-факто стандартными (по крайней мере, в моем опыте).

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

Update:

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

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

Удачи с проектом :)

+0

Спасибо за ваш ответ. Я расскажу об этом, чтобы узнать, что может быть лучше. Я посмотрю на MemCached.Я хотел увидеть это позже, но думаю, это будет подходящее время. – fperr

+0

@fperr Вы знакомы с инструментами для веб-профилирования/сравнения? Я лично использую 'ab' - Apache Benchmark, много. –

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