Intereting Posts
Отображение пользовательских данных продукта в представлении «Элементы заказа» Установка Laravel 4.1 в Windows 7 // Сделать файл .phar глобально доступным для командной строки Windows Добавить купон в электронную почту для обработки, только если клиент не использовал один Скрытие URL изображения Как загрузить файлы (multipart / form-data) с помощью многомерных POSTFIELDS с помощью PHP и CURL? Как я могу отправлять электронные письма из класса обслуживания Symfony2? собираемся построить php MVC, какие соглашения об именах мне нужно знать? круговое изображение с изображением как я могу проверить все элементы массива одинаковые? Как встроить php-скрипт в javascript? while loop и join output в mysql php Как вывести значение для каждого третьего результата инструкции foreach в php? Как отсортировать функцию query_posts по настраиваемому полю, а ограничивать сообщения другим настраиваемым полем Команда PHP Exec – как передать ввод в ряд вопросов PHP отображает изображение BLOB из MySQL

Как php и apache обрабатывают несколько запросов?

Как PHP обрабатывает несколько запросов от пользователей? Он обрабатывает их все сразу или по одному, ожидая завершения первого запроса, а затем переходит к следующему.

На самом деле, я добавляю немного вики на статический сайт, где пользователи смогут редактировать адреса предприятий, если они находят их неточными или могут быть улучшены. Только зарегистрированные пользователи могут это сделать. Когда пользователь редактирует имя компании, это имя вместе с другими вхождениями изменяется в разных строках таблицы. Я немного обеспокоен тем, что произойдет, если 10 пользователей будут делать это одновременно. Это будет реальная путаница вещей. Точно так же PHP делает все по одному в порядке, полученном на каждый скрипт (update.php) или все сразу.

Запросы обрабатываются параллельно веб-сервером (который запускает скрипт PHP).

Обновление данных в базе данных происходит довольно быстро, поэтому любое обновление будет отображаться мгновенно, даже если вам необходимо обновить несколько таблиц.

Что касается mish mash, для БД обработка 10 запросов в течение 1 секунды такая же, как 10 запросов в течение 10 секунд, это не смутит их и просто выполнит их один за другим.

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

РЕДАКТИРОВАТЬ:

Если вы не хотите, чтобы 2 пользователя одновременно редактировали одну и ту же форму, у вас есть несколько вариантов их предотвращения. Вот несколько идей:

  1. Вы можете «заблокировать» эту запись для издания всякий раз, когда пользователь открывает страницу для ее редактирования и не разрешает другим пользователям открывать ее для издания. Вы можете столкнуться с несколькими проблемами, если пользователь не «разблокирует» запись после их завершения.
  2. Вы можете в реальном времени (с AJAX) уведомлять пользователя о том, что запись, которую они редактируют, была изменена, как и при переполнении стека, когда новый ответ или комментарий были отправлены по мере ввода.
  3. Когда пользователь отправляет редактирование, вы можете проверить, была ли запись отредактирована между тем, когда они начали редактирование, и когда они попытались отправить ее, и покажите им новую версию рядом с их версией, чтобы они вручную «объединили» 2 обновления.

Вероятно, есть больше решений, но они должны вас начать.

Это зависит от того, какую версию Apache вы используете и как она настроена, но в стандартной конфигурации по умолчанию для обработки одновременных запросов используются несколько сотрудников с несколькими потоками. См. http://httpd.apache.org/docs/2.2/mod/worker.html для краткого изложения того, как это работает. Конечным результатом является то, что ваши PHP-скрипты могут вместе содержать десятки открытых подключений к базе данных, возможно, отправив несколько запросов в одно и то же время.

Однако ваша СУБД предназначена для решения этой проблемы. Если вы делаете только простые запросы INSERT , тогда ваш код не должен делать ничего особенного. Ваша СУБД сама позаботится о необходимых замках. Блокировка уровня строк будет наиболее быстрой для нескольких INSERT, поэтому, если вы используете MySQL, вам следует рассмотреть механизм хранения InnoDB.

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

Если у вас есть другие проблемы на уровне приложений, связанные с параллелизмом, например, один пользователь перезаписывает изменения другого пользователя, вам придется обрабатывать их в скрипте PHP. Один из способов справиться с этим состоит в том, чтобы использовать номера версий, сохраненные вместе с вашими данными, и отказывать в выполнении запроса, если номер версии изменился, но как вы справляетесь с этим, все зависит от вашего приложения.