Значение использования ORM состоит в том, чтобы помочь ускорить разработку , автоматизируя утомительную работу по присваиванию результатов запроса полям объекта и отслеживая изменения в полях объекта, чтобы вы могли сохранить их в базе данных. Отсюда и термин объектно-реляционное отображение .
ORM не имеет для вас большого значения в отношении переносимости базы данных, поскольку вы используете только одну базу данных, на которой вы развернули.
Аспект производительности ORM во время выполнения ничуть не лучше и, как правило, намного хуже, чем написание простого SQL самостоятельно. Как вы уже упоминали, универсальные методы генерации запросов часто допускают наивные ошибки и приводят к избыточным запросам. Опять же, преимущество заключается во времени разработки, а не в эффективности времени выполнения.
Использование ORM по сравнению с неиспользованием ORM, по-видимому, не имеет большого значения для масштабируемости. Другие методы с большей отдачей для масштабируемости включают в себя:
- Управление индексами в СУБД. Улучшите как можно больше алгоритмов от O (n) до O (log 2 n).
- Интеллектуальная архитектура кэширования.
- Горизонтальное масштабирование с помощью разделения / разбиения базы данных.
- Балансировка нагрузки и репликация базы данных. Чтение из ведомых баз данных, где это возможно, и запись в одну главную базу данных. Индексируйте рабов и хозяев по-разному.
- Дополнение к СУБД дополнительными технологиями, такими как Sphinx Search.
- Вертикальное масштабирование с помощью аппаратного решения проблемы. Джефф Этвуд прокомментировал это в подкасте StackOverflow.
Некоторые люди выступают за перевод вашего управления данными в распределенную архитектуру с использованием облачных вычислений или распределенных нереляционных баз данных. Это, вероятно, не нужно, пока вы не получите очень большое количество пользователей. Как только вы достигнете определенного уровня, все правила изменятся, и вы, вероятно, все равно не сможете использовать СУБД. Но если вы не являетесь архитектором данных в Yahoo, Facebook или LinkedIn, не беспокойтесь об этом - облачные вычисления чрезмерно раскручены.
Существует распространенное мнение, что база данных всегда является узким местом в веб-приложениях, но есть также случай, когда повышение эффективности внешнего интерфейса является по меньшей мере столь же важным. Ср книги Стив Соудерс .
Джулия Лерман из Programming Entity Framework (2009), стр. 503 показывает, что затраты на выполнение запросов возрастают на 220% между использованием DataReader напрямую и использованием Microsoft LINQ to Entities.
Также см. Пост Джеффа Этвуда по Все абстракции являются ошибочными абстракциями , где он показывает, что использование LINQ по крайней мере вдвое дороже использования простого SQL даже наивным способом.