Стоит ли бояться serializable-транзакций больше, чем труднонаходимых багов?
В базах данных транзакции обладают свойствами ACID , где «I» означает изоляцию транзакций при одновременном (concurrent) выполнении. Наличие (serializable) изоляции гарантирует, что результат транзакций, выполненных параллельно, будет таким же, как если бы они были выполнены в некотором последовательном порядке. Сериализация выполнения транзакций не бесплатна с точки зрения производительности. Многие СУБД поддерживают более слабые уровни изоляции, оставляя за разработчиком выбор подходящего. В монолитных СУБД более слабый уровень изоляции часто используется по умолчанию. Так, в PostgreSQL и MySQL это «read committed». В распределённых СУБД чаще по умолчанию более строгие уровни: «repeatable read» в YugabyteDB и TiDB , «serializable» в CockroachDB и YDB . Слабые уровни изоляции могут быть причиной очень труднонаходимых багов. Причём эти баги могут вызвать уязвимости в безопасности. Из-за подобных багов уже были украдены миллионы долларов, в частности с биткоин-бирж. Мы расскажем о подобных случаях более детально в следующих разделах.
https://habr.com/ru/companies/ydb/articles/825768/