Концепция условий гонки

Я знаю, что такое состояние гонки, но до сих пор не до конца понимаю:

Во-первых, я знаю, что myisam не поддерживает транзакции, а innodb поддерживает.

Я создаю социальный сайт, ориентируясь на большое количество пользователей, и мне интересно, нужно ли мне думать об условиях гонки, потому что пользователи обновят свой профиль с помощью ON DUPLICATE KEY UPDATE, но мне интересно, возникнут ли условия гонки и как вы написать код для защиты от этой проблемы?

Может кто-нибудь, пожалуйста, объясните концепцию состояния гонки на сайте с несколькими пользователями, например использование COMMIT, ROLLBACK и т. Д.

Где я могу использовать эти вещи?

1 ответ

Решение

Во-первых, я знаю, что myisam не поддерживает транзакции, а innodb поддерживает.

Это хорошее начало. Я предлагаю использовать InnoDB. Транзакции - это то, что делает модификации базы данных атомарными и последовательными. Транзакции также обеспечивают изоляцию, так что ни один пользователь базы данных не может вмешиваться в изменения другого пользователя.

Гоночные условия могут возникать при многопоточности. Да, база данных использует более одного потока, но транзакции гарантируют, что изменения базы данных одного пользователя будут сделаны до изменения базы данных другого пользователя. (Да, это упрощенное логическое объяснение.)

Отредактировано для добавления: Вы можете задать конкретный вопрос SQL, который может возникнуть в других вопросах переполнения стека, но в целом вы хотите выполнить COMMIT как можно скорее после оператора SQL INSERT, UPDATE или DELETE.

Другие вопросы по тегам