блокировка mysql innodb

Я разрабатываю приложение, которое будет работать с нескольких компьютеров. Я хочу заблокировать таблицы mysql, чтобы не было проблем с параллельным выполнением процессов, например, один процесс пишет, а другой читает одновременно. Или, что еще хуже, оба процесса одновременно записывают (обновляют) разные значения. MySQL предоставляет блокировки, но в документации сказано, что нам следует избегать использования блокировок с InnoDB. Читайте здесь. Пожалуйста, дайте несколько советов, что делать в этой ситуации. Всем спасибо.


person Miloš Ljumović    schedule 01.08.2012    source источник


Ответы (1)


InnoDB — это механизм хранения транзакций с полной поддержкой ACID. Одним из свойств InnoDB является то, что он обрабатывает параллельные обновления. Как именно, зависит от уровня изоляции, но обычно InnoDB запрещает двум транзакциям изменять одну и ту же строку, блокируя строку. Он не блокирует всю таблицу, поэтому другие записи могут быть изменены другими транзакциями.

Если вы установите уровень изоляции serializable, приложение будет работать, так как параллелизм вообще отсутствует, но все же будет разрешен некоторый параллелизм.

Чем выше уровень изоляции, тем меньше параллелизма у вас есть, но все же у вас больше, чем если вы заблокируете таблицу.

person Maxim Krizhanovsky    schedule 07.07.2013