Performance ORM(对象关系映射)是网站性能问题的根本原因吗?

Performance ORM(对象关系映射)是网站性能问题的根本原因吗?,performance,model-view-controller,orm,Performance,Model View Controller,Orm,大多数基于MVC的网站都使用ORM在模型和相应的数据库实体之间进行映射。介于两者之间的是自动生成或由开发人员提供的SQL/非SQL查询。这种方法的问题是-1。数据库I/O是实时通信的瓶颈2。没有易于插入的机制来进行缓存。3.可伸缩性。等 我想听听你对这方面的看法。如果说ORM是任何使用它的网站性能低下的根本原因,那可能太笼统了;性能比这更复杂。如果您使用的是关系数据库,最好的方法可能是从使用ORM开始,然后如果性能不够好,使用探查器找到真正的瓶颈并解决它们。您可能会在某些地方使用ORM,而在其他

大多数基于MVC的网站都使用ORM在模型和相应的数据库实体之间进行映射。介于两者之间的是自动生成或由开发人员提供的SQL/非SQL查询。这种方法的问题是-1。数据库I/O是实时通信的瓶颈2。没有易于插入的机制来进行缓存。3.可伸缩性。等


我想听听你对这方面的看法。

如果说ORM是任何使用它的网站性能低下的根本原因,那可能太笼统了;性能比这更复杂。如果您使用的是关系数据库,最好的方法可能是从使用ORM开始,然后如果性能不够好,使用探查器找到真正的瓶颈并解决它们。您可能会在某些地方使用ORM,而在其他地方使用手工调优的SQL。

我认为这取决于—在某些情况下,ORM可能会导致性能问题,但将所有性能问题归咎于ORM可能并不准确

我发现ORM使用中存在两个主要性能缺陷:

1) 获取太多数据

在大多数情况下,您得到的数据比实际需要的要多。通常情况下,这不是一个大问题,但是如果模型映射不正确,当您只需要一小段数据时,有时可以获得大型数据图

2) 无法优化ORM生成的SQL

有时,ORM不能为某些情况生成最佳的SQL,并且很难或不可能对其进行修改。在过去,我通过在一些SQL调优将获得巨大性能收益的情况下相对快速地绕过ORM来缓解这一问题


另一方面,由于大多数orm通常都包含某种内置缓存,因此很难利用缓存,这实际上是许多orm性能提高的一个来源(有时是显著的)。例如,Hibernate有一级缓存(会话/持久性上下文),并且可以轻松配置为使用二级缓存。

过去我不得不研究使用EF、Linq到SQL和手工编码的ADO.NET对象/逻辑的优缺点。最终,由于您提到的原因,我们不得不手工编写ADO.NET。