Подготовка к собеседованию на знание БД

Какие бы вопросы я спросил у нового чувака, если бы был DWH Lead или что-то типа такого.

  • ACID
  • Уровни изоляции транзакций
  • Блокировки
  • MVCC + UNDO Log в Mysql. Как это реализовано в NoSQL (конкурентный доступ к данным)
  • Сравнение SQL баз (хотя бы PostgreSQL vs Mysql - статья Uber пригодится и ее анализ)


Блокировки

в PostgreSQL есть блокировки типов SHARE LOCK, EXCLUSIVE LOCK

MVCC позволяет блокировкам на чтение не мешать блокировкам на запись и наоборот

Read Comitted как-будто не дает такой сильный уровень согласованности данных, как другие. Например, его колбасит при UPSERT, он может сделать DO NOTHING если в другой транзакции произойдет изменение соответствующее. Или delete where hits=10 ничего не удалит, потому что в другой транзакции будет обновление hits 9 -> 10, 10 -> 11.

Repeatable read. Может произойти откат транзакции, если в другой эта строка уже удалилась. Скорее всего потребуются блокировки чтобы строго соблюсти бизнес правила, если в другой транзакции изменяются данные

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

SELECT FOR SHARE чем отличается от SELECT FOR UPDATE? SELECT FOR SHARE можно в 2 транзакциях делать и они не будут блокировать друг друга, а select for update будет.