代码之家  ›  专栏  ›  技术社区  ›  Thomas Levesque

用于复杂查询的ORM(特别是NHibernate)性能

  •  10
  • Thomas Levesque  · 技术社区  · 16 年前

    我的公司正在从头开始重写现有的应用程序。除其他任务外,此应用程序对订单和发票数据执行复杂的SQL查询,以生成销售报告。查询是根据用户选择的条件动态构建的,因此如果选择了许多条件,查询可能非常复杂。目前,表现不错,但不是很好。

    现在,对于新版本,我们希望使用ORM,可能是nhibernate,因为它显然是唯一支持Oracle Lite的版本(应用程序使用Oracle或Oracle Lite,这取决于它是在连接模式还是断开模式下运行)。但我担心NHibernate生成的查询的性能。我以前使用过其他表单(linq-to-sql,实体框架),但是查询非常简单,所以没有性能问题。

    因此,在我决定使用ORM或使用纯SQL之前,我想知道这些工具处理场景(如外部联接、子查询等)的能力如何。您认为ORM(尤其是NHibernate)适合用于上述报告场景吗?我应该担心复杂查询的性能吗?

    任何反馈都将非常感谢

    3 回复  |  直到 16 年前
        1
  •  8
  •   Alex Yakunin    16 年前

    this chart . 目前还没有dataobjects.net,但它与ef和nhibernate的比较结果如下所示 here .

    ef的linq测试代码是 here ;其他工具的版本可以在同一文件夹中找到。所有这些.cs文件都是由 a single T4 template ,所以测试完全相同。这里使用的模型是北风。

    更少的链接:

        2
  •  6
  •   Burt    16 年前

    NHibernate有一点学习曲线,但它是值得学习的,因为任何时间花费将回报多次。我会推荐NHibernate在行动手册中学习,因为它是一个很好的资源,涵盖了你的问题所要求的一切,以及更多。

    nhibernate的性能可以调整(见下面的链接),nhibernate有强大的缓存机制。

    http://www.codeproject.com/KB/database/NHibernate_Perf.aspx https://www.hibernate.org/hib_docs/nhibernate/html/performance.html

    最终,性能将由谁编写查询来决定,就像在SQL中一样。

        3
  •  5
  •   Alex Kofman    16 年前

    如果你想找一个有全面高效的LINQ翻译的ORM,我建议你试试。 Entity Framework DataObjects.Net . 我不确定是否支持Oracle Lite。NHibernate的LINQ翻译还没有完全完成。

    不管怎样,您现在能做的最好的事情就是下载主要的ORM工具,并在具有分组、联接、子查询等复杂查询上测试它们。