Уровни изоляции БД.
Вопрос с собесов - расскажите про уровни изоляции БД. Их как известно четыре:
1) READ UNCOMMITED
2) READ COMMITTED
3) REPEATABLE READ
4) SERIALIZABLE
Вроде известные факты, ничего интересного.
Но интересно то, что это все теория, а на практике READ UNCOMMITED не реализован в большом числе СУБД. Если брать большую четвёрку - Oracle и PostgreSQL не реализуют, MSSQL и MySQL - реализуют.
Вопрос - почему так?
А потому что сейчас он не особо нужен.
READ UNCOMMITED - это грязные чтения. Зачем видеть чужие незафиксированные данные? Да не зачем.
Окей, тогда может быть скорость - отсутствие блокировок?
Если говорить про чтение - снова мимо. Сейчас почти все СУБД реализуют механизм снимков - MVCC (Multiversion Concurrency Control), детальнее https://aristov.tech/blog/mvcc-v-postgresql/?ysclid=mi26mzeuj6767354782 - для обеспечения изоляции и транзакционности. А в этом случае при чтении выбирается нужная версия данных по определённому алгоритму без всяких блокировок.
Запись. Конкурентно записывать не дожидаясь фиксации более ранних изменений - мусор на выходе.
Единственный кейс - если клиент может гарантировать отсутствие конкуренции. А это можно сделать, если клиент один. В общем кейс редкий.
Подозреваю, READ UNCOMMITED - наследие времени, когда MVCC не было.
#DB #PostgreSQL
Вопрос с собесов - расскажите про уровни изоляции БД. Их как известно четыре:
1) READ UNCOMMITED
2) READ COMMITTED
3) REPEATABLE READ
4) SERIALIZABLE
Вроде известные факты, ничего интересного.
Но интересно то, что это все теория, а на практике READ UNCOMMITED не реализован в большом числе СУБД. Если брать большую четвёрку - Oracle и PostgreSQL не реализуют, MSSQL и MySQL - реализуют.
Вопрос - почему так?
А потому что сейчас он не особо нужен.
READ UNCOMMITED - это грязные чтения. Зачем видеть чужие незафиксированные данные? Да не зачем.
Окей, тогда может быть скорость - отсутствие блокировок?
Если говорить про чтение - снова мимо. Сейчас почти все СУБД реализуют механизм снимков - MVCC (Multiversion Concurrency Control), детальнее https://aristov.tech/blog/mvcc-v-postgresql/?ysclid=mi26mzeuj6767354782 - для обеспечения изоляции и транзакционности. А в этом случае при чтении выбирается нужная версия данных по определённому алгоритму без всяких блокировок.
Запись. Конкурентно записывать не дожидаясь фиксации более ранних изменений - мусор на выходе.
Единственный кейс - если клиент может гарантировать отсутствие конкуренции. А это можно сделать, если клиент один. В общем кейс редкий.
Подозреваю, READ UNCOMMITED - наследие времени, когда MVCC не было.
#DB #PostgreSQL
Блог по архитектуре и оптимизации PostgreSQL от Аристова Евгения
MVCC в PostgreSQL - Блог по архитектуре и оптимизации PostgreSQL от Аристова Евгения
Устройство механизма MVCC в PostgreSQL и его принципиальное отличие от других СУБД. На примерах рассматриваем служебную информацию и атрибуты.
👍1