ACID в БД
- Атомарность - транзакции неделимы и если падают на каком-то шаге, то падает вся транзакции
- Согласованность - гарантия соблюдения всех правил и ограничений при завершении транзакции. Например если есть ограничение на уникальность значения, то транзакциия должна учесть это ограничение
- Изолированность - Транзакции изолированы друг от друга и даже при параллельном выполнении гарантируют выполнение друг друга. Если транзакции меняют одно и тоже значение, должны быть механизмы разрешения конфликтов
- Устойчивость - после успешного завершения транзакции ее изменения должны оставаться а базе данных при любом ЧП
Уровни изолированности транзакций
Read uncommitted
Уровень, имеющий самую плохую согласованность данных, но самую высокую скорость выполнения транзакций. Название уровня говорит само за себя — каждая транзакция видит незафиксированные изменения другой транзакции (феномен грязного чтения).
Read committed (По умолчанию для Postgres)
Для этого уровня параллельно исполняющиеся транзакции видят только зафиксированные изменения из других транзакций. Таким образом, данный уровень обеспечивает защиту от грязного чтения.
Repeatable read (по умолчанию для MySql InnoDB)
Уровень, позволяющий предотвратить феномен неповторяющегося чтения. Т.е. мы не видим в исполняющейся транзакции измененные и удаленные записи другой транзакцией. Но все еще видим вставленные записи из другой транзакции. Чтение фантомов никуда не уходит.
Serializable
Уровень, при котором транзакции ведут себя как будто ничего более не существует, никакого влияния друг на друга нет. В классическом представлении этот уровень избавляет от эффекта чтения фантомов.
Парадигмы проектирования ORM
ActiveRecord (Laravel - Eloquent ORM)
- Каждый объект - это таблица в базе данных
- Каждый атрибут объекта это колонка в БД
- Объекты могут содержать логику и методы работы с данными
- Несомненный плюс - это простота и низкий порог вхождения