Я разрабатываю приложение, которое будет работать с нескольких компьютеров. Я хочу заблокировать таблицы mysql, чтобы не было проблем с параллельным выполнением процессов, например, один процесс пишет, а другой читает одновременно. Или, что еще хуже, оба процесса одновременно записывают (обновляют) разные значения. MySQL предоставляет блокировки, но в документации сказано, что нам следует избегать использования блокировок с InnoDB. Читайте здесь. Пожалуйста, дайте несколько советов, что делать в этой ситуации. Всем спасибо.
блокировка mysql innodb
Ответы (1)
InnoDB — это механизм хранения транзакций с полной поддержкой ACID. Одним из свойств InnoDB является то, что он обрабатывает параллельные обновления. Как именно, зависит от уровня изоляции, но обычно InnoDB запрещает двум транзакциям изменять одну и ту же строку, блокируя строку. Он не блокирует всю таблицу, поэтому другие записи могут быть изменены другими транзакциями.
Если вы установите уровень изоляции serializable
, приложение будет работать, так как параллелизм вообще отсутствует, но все же будет разрешен некоторый параллелизм.
Чем выше уровень изоляции, тем меньше параллелизма у вас есть, но все же у вас больше, чем если вы заблокируете таблицу.
person
Maxim Krizhanovsky
schedule
07.07.2013