@riazantsev96

Как обрабатывать параллельные запросы к Интернет-магазину?

Для изучения PHP и SQL делаю простой Интернет-магазин с нуля.
Уже спроектирована БД и написан скрипт её создания.
Возникли вопросы по обработке как HTTP-запросов, так и запросов к базе данных.

В базе данных создал двух пользователей, посетителя магазина и администратора. PHP-скрипт соединяется с сервером MySQL. В зависимости от того, кто зашёл на сайт, происходит подключение того или иного пользователя.

Вопрос 1. Что будет, если к базе данных подключатся два посетителя? Может ли такое быть? Могут ли PHP-сценарии выполнятся параллельно? Можно ли к БД подключиться параллельно, используя одного и того же пользователя БД?

Вопрос 2. Если к базе данных могут происходить параллельные подключения, как синхронизировать доступ? Например, читатели (посетители) просматривают товары, а писатель (администратор) обновляет цены или добавляет новый товар. Нужно применять транзакции или блокировки? Или транзакции с определённым уровнем блокировки?
  • Вопрос задан
  • 1290 просмотров
Решения вопроса 1
Что будет, если к базе данных подключатся два посетителя?

Если СУБД подразумевает многопользовательскую обработку данных (MySQL в их числе), то все будет в порядке. Более того, современные клиент-серверные СУБД для того и нужны, чтобы к ним могли подключаться множество клиентских приложений и отправлять запросы. Сотни и тысячи подключений - нормальная ситуация для загруженного сайта.
Могут ли PHP-сценарии выполнятся параллельно?

Разумеется, иначе как получить приемлемую отзывчивость для сайта?
Можно ли к БД подключиться параллельно, используя одного и того же пользователя БД?

Вообще это зависит от СУБД, иногда можно ограничивать количество TCP-подключений для одного БД-пользователя. Но как правило по-умолчанию это ограничение не стоит, и обычно все запущенные экземпляры скрипта используют одного юзера для подключения. Иногда для разных скриптов используют разных пользователей БД в целях повышения безопасности - например, для обычных посетителей - пользователя с меньшим набором прав, а для администратора или менеджера - другого пользователя с полным доступом к БД. Тогда, в случае эксплуатируемой SQL-инъекции последствия будут не такими значительными. [В такой архитектуре обычно каждый пользователь БД соответствует одной роли в приложении (администратор/контент-менеджер/обычный посетитель)].

Если к базе данных могут происходить параллельные подключения, как синхронизировать доступ?

Или транзакции с определённым уровнем блокировки?

Не знаю, что вы понимаете под "уровнем блокировки", но вам определенно следует познакомиться с уровнями изолированности транзакций.
Например, читатели (посетители) просматривают товары, а писатель (администратор) обновляет цены или добавляет новый товар.

Если разберетесь с уровнями изолированности - получите ответы на такие вопросы. В частности, read commited (уровень изоляции по умолчанию в большинстве реляционных СУБД) как раз решит проблему параллельных чтения и обновления.

Вообще, с транзакциями определенно следует познакомиться, тем более раз уж взяли в качестве учебного задания интернет-магазин. Только в этом случае можно считать этот учебный проект завершенным.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы