Когда нужно беспокоиться о контроле параллелизма PHP mysql
У меня есть вопрос о контроле параллелизма и о том, когда об этом беспокоиться. Я создал сайт PHP/MySQL (InnoDB). Я знаю о том, как избежать проблем с транзакциями, но тогда есть контроль параллелизма.
Мой сайт - это электронная коммерция, на которой хранятся товары, вставленные пользователем, так что в качестве примера. Когда пользователь вставляет новый элемент на сайт, БД создает идентификатор продукта в качестве первичного ключа (автоматически увеличивается БД) и сохраняет другие данные об этом продукте, отправленные через форма. Я использую подготовленные заявления.
Нужно ли мне беспокоиться о том, что два или более пользователей делают это одновременно? Есть ли вероятность, что отправка двух или более элементов одновременно приведет к искажению данных в разных строках?
Чтобы иметь возможность вставлять продукты, пользователь должен войти в систему с помощью сеансов, если это имеет значение для вопроса.
Заранее спасибо, Маркус.
2 answers
Если они не пишут в одну и ту же строку, я не понимаю, почему у вас могут возникнуть проблемы с параллелизмом. Даже если они записывали в одну и ту же строку, InnoDB имеет блокировку на уровне строк , что означает, что строка будет заблокирована до тех пор, пока пользователь не закончит запись в нее, оставляя последующих пользователей "ждать", пока блокировка не будет снята. Что касается возможности "конфликтующих запросов на вставку": если вы вставляете новые данные в таблицу, в которой используется автоматическое увеличение первичный ключ, вы гарантированно получаете уникальный идентификатор каждый раз, что означает, что параллелизм никогда не должен быть проблемой при вставке.
Вы можете выполнить быструю блокировку таблиц, особенно полезную при обновлениях