Как PHP обрабатывает несколько запросов от пользователей? Он обрабатывает их все сразу или по одному, ожидая завершения первого запроса, а затем переходит к следующему.
На самом деле, я добавляю немного вики на статический сайт, где пользователи смогут редактировать адреса предприятий, если они находят их неточными или могут быть улучшены. Только зарегистрированные пользователи могут это сделать. Когда пользователь редактирует имя компании, это имя вместе с другими вхождениями изменяется в разных строках таблицы. Я немного обеспокоен тем, что произойдет, если 10 пользователей будут делать это одновременно. Это будет реальная путаница вещей. Точно так же PHP делает все по одному в порядке, полученном на каждый скрипт (update.php) или все сразу.
Запросы обрабатываются параллельно веб-сервером (который запускает скрипт PHP).
Обновление данных в базе данных происходит довольно быстро, поэтому любое обновление будет отображаться мгновенно, даже если вам необходимо обновить несколько таблиц.
Что касается mish mash, для БД обработка 10 запросов в течение 1 секунды такая же, как 10 запросов в течение 10 секунд, это не смутит их и просто выполнит их один за другим.
Если вам нужно обновить 2 таблицы и вам абсолютно необходимо эти 2 обновления для последующего запуска без прерывания другого запроса на обновление, вы можете использовать транзакции.
РЕДАКТИРОВАТЬ:
Если вы не хотите, чтобы 2 пользователя одновременно редактировали одну и ту же форму, у вас есть несколько вариантов их предотвращения. Вот несколько идей:
Вероятно, есть больше решений, но они должны вас начать.
Это зависит от того, какую версию Apache вы используете и как она настроена, но в стандартной конфигурации по умолчанию для обработки одновременных запросов используются несколько сотрудников с несколькими потоками. См. http://httpd.apache.org/docs/2.2/mod/worker.html для краткого изложения того, как это работает. Конечным результатом является то, что ваши PHP-скрипты могут вместе содержать десятки открытых подключений к базе данных, возможно, отправив несколько запросов в одно и то же время.
Однако ваша СУБД предназначена для решения этой проблемы. Если вы делаете только простые запросы INSERT
, тогда ваш код не должен делать ничего особенного. Ваша СУБД сама позаботится о необходимых замках. Блокировка уровня строк будет наиболее быстрой для нескольких INSERT, поэтому, если вы используете MySQL, вам следует рассмотреть механизм хранения InnoDB.
Конечно, ваш запрос всегда может потерпеть неудачу из-за слишком большого количества подключений к базе данных, конфликта с уникальным индексом и т. Д. Заверните свои запросы в блоках try catch
для обработки этого случая.
Если у вас есть другие проблемы на уровне приложений, связанные с параллелизмом, например, один пользователь перезаписывает изменения другого пользователя, вам придется обрабатывать их в скрипте PHP. Один из способов справиться с этим состоит в том, чтобы использовать номера версий, сохраненные вместе с вашими данными, и отказывать в выполнении запроса, если номер версии изменился, но как вы справляетесь с этим, все зависит от вашего приложения.