有没有人有任何经验表明开发人员可以通过选择在SQL和手工设计的数据库中使用ORM(在Django,RoR,SQLAlechemy等中)可以获得什么样的性能?我想有一些复杂的问题,包括在ORM约束内指定数据库是增加还是减少创建高效数据库结构的机会(基于开发人员的经验水平),以及开发人员如何构建基于SQL或ORM的查询(再次基于他/她的经验).有关这些或内在性能问题的任何信息对我来说都非常有趣.
我的建议是不要担心这个,直到你需要 - 不要过早优化.ORM可以为开发速度,代码可读性提供许多好处,并且可以消除大量代码重复.我建议使用一个,如果它将使您的应用程序更容易开发.
在开发过程中,使用基准测试和分析来确定代码中的瓶颈,如果需要,您可以绕过ORM并在需要时使用手动查询.通常,您将能够使用缓存和数据库索引(以及其他内容)提高ORM的速度,然后您可以决定需要手动查询的位置.在大多数情况下,ORM性能可能是可以接受的,使用它的好处将远远超过性能成本.
在大多数DAL层开发/架构中,性能始终是一种思想.我认为现在我们开始质疑这些ORM工具的性能,因为他们承诺所谓的易开发性:
ORM中两个最大的性能问题领域是:
无法编写Optimum SQL.您必须使用由框架解释为SQL的对象查询语言.通常它是很好的SQL,但通常它不是最有效的SQL.
反射.大多数ORM框架使用Reflection来使用数据库中的Data填充对象.反射操作成本很高,并且随着负载和数据的增加,性能下降变得显而易见.
出现的其他性能问题是由于实体对象与表紧密耦合导致数据库设计或实体模型设计效率低下.