Безопасно ли устанавливать изоляцию MySQL на «Read Uncommitted» («грязное чтение») для типичного использования в Интернете? Даже с репликацией? - PullRequest
6 голосов
/ 08 января 2010

Я работаю на веб-сайте с типичным шаблоном использования веб-сайтов CRUD: аналогично блогам или форумам, где пользователи создают / обновляют контент, а другие читают его.

Похоже, что в этом случае можно установить уровень изоляции базы данных на « Read Uncommitted » («грязное чтение»). Насколько я понимаю, общий недостаток «Read Uncommitted» заключается в том, что читатель может читать незафиксированные данные, которые впоследствии будут откатываться.

В шаблоне использования блога / форума CRUD будет ли когда-нибудь откат? И даже если есть, есть ли серьезные проблемы с чтением незафиксированных данных?

Прямо сейчас я не использую репликацию, но в будущем, если я захочу использовать репликацию (основанную на строках, а не на операторе), помешает ли мне уровень изоляции «Read Uncommitted»?

Что ты думаешь? Кто-нибудь пробовал использовать «Read Uncommitted» в своей РСУБД?

Ответы [ 2 ]

3 голосов
/ 09 января 2010

MySQL 5.1 является более строгим при использовании чтения-uncommitted и binlogging (необходимого для репликации) - поэтому вы можете получить ошибки в некоторых простых операторах update / delete, которые вы не получите на уровне изоляции по умолчанию REPEATABLE READ. Я видел простые обновления ПК, такие как:

Обновить строку установки foo = 1, где id = 1234;

Ошибка с: mysql_real_query ошибка 1598 сообщение: Binary регистрация невозможна. Сообщение: уровень транзакции READ-UNCOMMITTED в InnoDB не безопасно для режима binlog 'STATEMENT'

Таким образом, вы должны быть готовы с этим справиться, переключившись на повторяющиеся операции чтения при изменении данных или используя отдельные соединения для чтения и записи, с их собственными уровнями изоляции. Последнее может пригодиться, когда / если ваш проект масштабируется и требуется репликация, так что вы можете отправлять select на ведомое устройство только для чтения и записывать на мастер.

OTOH, использование read-uncommitted для чтения может быть реальным преимуществом, если не требуется последовательное чтение, так как Innodb имеет меньше блокировок для выполнения.

Что касается вопроса о возможности отката, я думаю, что вы - лучший человек, который расскажет нам об этом, поскольку именно вы его кодируете:).

2 голосов
/ 08 января 2010

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

Где это проблема или нет - это не вопрос MySQL, а вопрос приложения, который включает оценку риска использования / возврата противоречивых данных.

В приложении интернет-банкинга это не нужно. В игре все может быть в порядке. Это зависит.

Я использовал «read uncommitted» и репликацию, и у меня не было проблем.

...