使用 ORM 的价值在于通过自动化将查询结果分配给对象字段的繁琐工作以及跟踪对象字段的更改以便将它们保存到数据库中来帮助加快开发速度。因此,术语对象关系映射。
ORM 在数据库可移植性方面对您没有什么价值,因为您只使用您部署的一个数据库。
ORM 的运行时性能方面并不比自己编写纯 SQL 好,而且通常比自己编写的 SQL 差很多。正如您所提到的,查询生成的通用方法经常犯幼稚的错误并导致冗余查询。同样,好处在于开发时间,而不是运行时效率。
使用 ORM 与不使用 ORM 似乎并没有对可伸缩性产生巨大影响。其他更具可扩展性的技术包括:
- 在 RDBMS 中管理索引。将尽可能多的算法从 O(n) 改进到 O(log 2 n)。
- 智能缓存架构。
- 通过数据库分区/分片进行水平扩展。
- 数据库负载平衡和复制。尽可能从从属数据库读取,并写入单个主数据库。以不同的方式索引从属和主控。
- 使用 Sphinx Search 等补充技术补充 RDBMS。
- 通过在问题上投入硬件来进行垂直缩放。Jeff Atwood 在 StackOverflow 播客上对此发表了评论。
有些人主张将您的数据管理转移到使用云计算或分布式非关系数据库的分布式架构中。在您获得大量用户之前,这可能不是必需的。一旦发展到一定程度,所有规则都会发生变化,您可能无论如何都无法使用 RDBMS。但除非你是雅虎、Facebook 或 LinkedIn 的数据架构师,否则不要担心——云计算被过度炒作了。
众所周知,数据库始终是 Web 应用程序的瓶颈,但也有一种情况是,提高前端的效率至少同样重要。参照。史蒂夫苏德斯的书。
Julia Lerman 在Programming Entity Framework (2009) 第 503 页中显示,在直接使用 DataReader 和使用 Microsoft 的 LINQ to Entities 之间,查询执行成本增加了 220%。
另请参阅 Jeff Atwood 在All Abstractions are Failed Abstractions上的帖子,其中他表明使用 LINQ 至少是使用纯 SQL 的成本的两倍,即使以一种幼稚的方式也是如此。