Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Select — считываются валидные записи таблицы. Запись считается валидной, если она создана транзакцией, которая была зафиксирована (commit) до начала текущей транзакции;Самый ходовой уровень изоляции ReadCommitted легко позволяет видеть (и даже изменять) данные, созданые другой транзакцией, зафиксировавшей их уже после старта нашей транзакции. Лишь бы они уже были закомичены в момент нашего к ним обращения. Отсечение данных, созданых после старта текущей транзакции, организуется более сильным уровнем изоляции (snapshot, repeatable_read и т.п.). В целом ваше утверждение ошибочно, если не делать оговорок. Кроме того, применение термина «валидный» по отношению к данным, видимым транзакций — мягко говоря, сомнительно.
Но есть проблема с многопоточностью: при таком подходе будет возможен только последовательный доступ к данным (писатели будут блокировать как читателей, так и других писателей).
Этот механизм сложно воспринимать по-другому: если вы будете хранить только измененную дельту, каким образом вы укажите движку, как нужно собирать данные по нескольким записям? Что будете делать при удалении? Как будут работать индексы?
Теоретически всё это возможно, но я сомневаюсь что такой механизм реализован хотя бы в одной из используемых СУБД
Принципы работы СУБД. MVCC