Answers:
ORM并不是要完全接管对数据库的访问。将它们用于80%的CRUD代码中,这些代码太繁琐而无法自己编写。对于需要仔细优化的其余20%,请使用存储过程,动态SQL或任何您想要的东西。
我在需要高性能并处理数十亿条记录的应用程序中使用ORM(nHibernate)。随着时间的流逝,我们注意到最重要的性能问题与我们自己使用ORM的方式有关,而不是仅由于ORM。
ORM不应替代您的强制性数据库知识。它是用来在代码中提高生产力和灵活性的一种工具,但是您需要了解底层流程才能优化性能。
您没有指定特定的ORM,因此以下是我们为提高性能所做的工作:
ORM没有神奇的作用。它们将对象访问方法转换为SQL。它们执行的SQL语句不一定比您手动编写的SQL慢。话虽如此,您可能会遇到一些问题:
使用本机SQL来提高性能没有错。但是首先要确保您了解导致您减速的原因。
如umlcat所述,有些ORM可以让您使用批量操作。
更好的是,许多ORM是可扩展的,因此,如果尚未支持,则可以编写自己的方法来运行批量操作。如果您可以排除应用程序中的批量操作,我将其添加为ORM上的一层(为此,您可能需要编写原始SQL),然后在应用程序中使用ORM您已实现的方法。
这也使单元测试和调试更加容易。一旦您对ORM方法的测试覆盖面广,就可以在应用程序中自由使用它。否则,调试原始SQL(尤其是带有事务和许多JOIN的大型SQL)可能会很麻烦。
有一次,我花了将近一天的时间在原始SQL调用中发现了一个错误,该错误将近100个LOC,而该错误只是一个字符!从那时起,我尝试避免在应用程序中使用原始SQL,并对所有SQL过程进行单独的单元测试。