Разберем интересный вопрос с собеса на backend node.js (middle позиция) разработчика -
Расскажите о минусах ORM🧐 1. Для сложных структур данных и запросов автогенерированные запросы иногда могут быть неэффективны по сравнению с ручным написанием SQL. В пример приведём ситуацию, когда ORM может вызвать проблему с производительностью при выполнении сложных операций, таких как n+1 запросы - то есть, при извлечении связанных сущностей делается несколько отдельных запросов, вместо одного(можно отнести сюда TypeORM).
Как это лечить?
- Использование JOIN в запросах для извлечения связанных данных за один раз вместо множественных запросов для каждого объекта
- ORM Prisma поддерживают пакетную загрузку, объединяя несколько однотипных запросов в один
2. ORM стремится абстрагировать работу с БДшкой, но это не всегда возможно. Разрабу всё равно приходится юзать SQL, так как абстракция ORM не всегда успешно охватывает всю сложность взаимодействия. Например, когда речь идёт о сложных операциях - агрегациях данных, составных запросах или использовании специфичных для БД функций (окна PostgreSQL)
3. Проблема с несрабатывающим уникальным индексом в TypeORM - возникает, если в таблице уже присутствуют дубликаты, что нарушает работу механизма уникальности. Лечить можно ручной корректировкой миграций или удалением дубликатов до выполнения миграции
4. TypeORM может некорректно сгенерировать SQL-запрос для блокировки строки с помощью FOR UPDATE или других методов. Если блокировка реализована неправильно, может возникнуть ситуация, когда строки не блокируются, что приведет к несогласованности данных, когда два запроса параллельно обновляют одно и то же значение.
Присоединяйтесь к нашему общему чату и Discord серверу :)