MySQL update tabel set count = count +1 одновременная проблема - PullRequest
0 голосов
/ 12 октября 2018

Мне нужно обновить таблицу и установить VOTE_COUNT = VOTE_COUNT + 1 для каждого вызова, скажем, у меня есть 10 000 одновременных обращений к базе данных и выполнить одно и то же заявление одновременно:

UPDATE VOTE SET VOTE_COUNT = VOTE_COUNT + 1;

Будет ли какая-либо параллельная проблема, из-за которой результат не будет равен 10000?(начальный счет = 0)

1 Ответ

0 голосов
/ 12 октября 2018

В зависимости от базового механизма хранения mysql / mariadb у вас могут быть проблемы с параллелизмом или производительностью.

Лучше всего будет иметь механизм хранения с обработкой транзакций, чтобы у вас не было проблем с параллелизмом.

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

Без блокировки у вас могут возникнуть проблемы с параллелизмом, потому что два обновленияоператоры могут одновременно читать значение, добавлять 1 и сохранять его обратно - так что один (или более) оператор обновления будет потерян!Поскольку все они будут хранить одно и то же значение.

При блокировке таблицы для каждого обновления, все будет очень медленно для ваших одновременных операторов обновления!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...