问题: 使用ORM构建的对象模型通常需要执行多个查询才能完成单个操作。例如,“获取”操作可能会从多个表中提取信息,特别是在具有嵌套对象结构时。在复杂请求中,这些查询可能会累积,并且您的数据库将在手动编写SQL之前开始阻塞。
问题: 在哪里对ORM进行负载均衡以减少需要进行的查询次数,更重要的是,为什么选择这种方法?您是否有单独的模型来加载依赖于上下文的数据,或者在控制器中指定应加载哪些数据?还是其他方式?
问题: 在哪里对ORM进行负载均衡以减少需要进行的查询次数,更重要的是,为什么选择这种方法?您是否有单独的模型来加载依赖于上下文的数据,或者在控制器中指定应加载哪些数据?还是其他方式?
ORM真的有很好的理由存在——加快开发速度。
如果性能成为问题,我宁愿实现一些缓存机制,而不是退回到硬编码SQL。
我建议使用领域模型模式,以一种面向对象的方式提供数据接口。在领域模型类中实现持久性时,适当地使用ORM和SQL的混合。
例如,您将针对单个表执行一些简单的查询。为此,请使用方便的ActiveRecord模式。但正如您所描述的那样,您通常还需要针对多个表执行一些复杂的查询以获取更复杂的相关数据。在这种情况下,ActiveRecord是一个笨拙的解决方案,因此请使用纯SQL。当您需要具有关系运算符(如JOIN
或GROUP BY
)的复杂查询时,它是最好的工具。
@pestaa提到了缓存,这是另一个好工具。这里还有一个可以考虑的工具:Identity Map。重点是您应该学习多种工具,并考虑在任何给定情况下哪个工具最好。
试图在每种情况下仅使用一种模式就像在一档挡位上开车一样。