@riazantsev96

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект