Изоляция транзакций и параллелизм - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь создать приложение на Java (JDK1.8) с Connector / J и MySql.Мне сказали, что Serializable - это самый высокий уровень, но он влияет на производительность, поэтому Serializable обычно не используется.

Но рассмотрим следующую ситуацию:

Есть два коммита, которые собираются обновить поля одной и той же строки (коммит A и коммит B).Если A и B происходят одновременно, а уровень изоляции не является Serializable, могут возникнуть гонки данных, что делает поля несовместимыми.Но на уровне Serializable два обновления не будут происходить одновременно, поэтому либо A происходит раньше, чем B, либо B предшествует A, и строка будет либо в версии A, либо в версии B, но не в некотором сочетании A иB.

Я думал, что атомарность ACID гарантирует синхронизацию A и B. Но кажется, что определение атомарности гарантирует, что только одна транзакция произойдет «все или ничего», она ничего не говорит о одновременных фиксациях.

Так я должен использовать Serializable для предотвращения гонки данных?Какой из ACID действительно гарантирует атомарность одного обновления?

1 Ответ

0 голосов
/ 09 июня 2018

Нет.Чтобы избежать описанной проблемы, вам не нужен «сериализуемый».Есть и другие уровни изоляции.То, чего вы боитесь, может случиться только с «читать без ответа».Для любого другого уровня изоляции поля в одной записи всегда будут согласованными.

...