2012-01-17 4 views
3

Я нахожусь в написании API для своего сайта, а также довольно большой класс для обработки всех запросов API.Неуправляемые соединения mysql замедляют работу скриптов?

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

Поэтому я ищу немного советов, когда дело доходит до классов и некоторых функций PHP.

Во-первых, похоже, что класс, который я пишу, вероятно, окажется около 3000 строк кода. Если это инициализировано на каждой странице, игнорируя тот факт, что на одну страницу будут использоваться только одна или две функции в классе, это сделает API намного медленнее? Должен ли я искать отдельные файлы с расширениями для класса для каждого метода класса?

Во-вторых, у меня есть все мои подключения к различным базам данных в отдельных файлах в каталоге. В каждом соединении есть функция mysql_pconnect(). На данный момент я требую только эти файлы, когда это необходимо. Поэтому, если для этого метода требуется подключение к базе данных x, я просто поставлю запрос (соединение ...) в метод. Неплохо ли включать файлы в класс?

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

Так три вопроса: действительно

  1. ли инициируя большой класс в начале каждой страницы замедлить время выполнения сценария, даже если используется только один метод класса? Именно поэтому люди используют класс класса extends class?
  2. Неправильно ли «требовать()» файлы внутри класса?
  3. Неужели неиспользуемые подключения к базе данных mysql замедляют работу сценария?

ответ

3

Нет, неиспользуемое соединение MySQL не будет потреблять много времени (если есть) cpu, хотя оно будет занимать бит памяти для обработки различных бит состояния, которые должны поддерживаться на уровне, подключение основа.

Однако обратите внимание, что протокол подключения MySQL на самом деле довольно «легкий». Поддержание пула постоянных соединений кажется привлекательным, но стоимость установления нового соединения в любом случае уже очень низка.

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

+0

Благодарим вас за ответ. Я не совсем понимаю, что вы подразумеваете под непреднамеренными тупиками. Не могли бы вы объяснить мне немного подробнее? –

+0

Хорошо. выполняется какой-то скрипт, начинается транзакция, устанавливается несколько блокировок, а затем прерывается по любой причине. Если он использует постоянное соединение с БД, это соединение остается в живых, даже несмотря на то, что сценарий умер. Позже, другому скрипту присваивается это соединение, он запускает свои собственные операции с базами данных, запускает транзакции, получает блокировки и т. Д. Поскольку этот новый скрипт не знает, что произошло раньше, очень легко начать запрашивать блокировки (явно или иначе), которые покрыты действиями старого мертвого сценария, и теперь вы застряли. –

+0

Хорошо, я собираюсь переписать мой файл class.mysql.php, который фактически является библиотекой функций sql, чтобы значительно ускорить выполнение запросов. Что бы вы предложили мне реализовать в этом классе для предотвращения взаимоблокировок? попробуй поймать..? Хотя, это не будет пытаться повторить попытку, если он потерпит неудачу. Есть ли у вас какие-то мысли по моим другим вопросам выше? –

1

Если вы пишете api, чтобы обслуживать данные от вашего db до нескольких сторонних сторон, вам лучше не позволять им запрашивать db, даже через веб-сервис (если у вас нет мутаций db-а-вторых, сторонам необходимо немедленно)

Лучшим способом было бы написать xml-файл (ы) в защищенное место и использовать веб-сервис для авторизации стороннего участника и обслуживать XML-файл (ы). Затем периодически обновляйте xml.

+0

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

+0

Зачем вам нужен api, если только вы спрашиваете db? – Erik

+0

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

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