【问题标题】:ORM (esp. NHibernate) performance for complex queries复杂查询的 ORM(尤其是 NHibernate)性能
【发布时间】:2010-12-02 20:18:19
【问题描述】:

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

现在,对于新版本,我们想使用 ORM,可能是 NHibernate,因为它显然是唯一支持 Oracle Lite 的(应用程序使用 Oracle 或 Oracle Lite,具体取决于它是在连接模式还是断开模式下运行)。但我担心 NHibernate 生成的查询的性能。我之前使用过其他 ORM(Linq to SQL、Entity Framework),但查询非常简单,因此没有性能问题。

所以,在我决定使用 ORM 还是继续使用普通 SQL 之前,我想知道这些工具在处理外连接、子查询等场景方面的能力如何……你认为 ORM(尤其是NHibernate) 是否适合在上述报告场景中使用?我应该担心复杂查询的性能吗?

任何反馈将不胜感激

【问题讨论】:

    标签: .net performance nhibernate orm


    【解决方案1】:

    this chart。目前还没有 DataObjects.Net,但它与 EF 和 NHibernate 的比较结果显示在here

    EF 的 LINQ 测试代码是 here;其他工具的版本可以在同一文件夹中找到。所有这些 .cs 文件均由a single T4 template 生成,因此测试完全相同。那里使用的模型是Northwind。

    更多链接:

    【讨论】:

    • Alex,谢谢,这个网站看起来很有前途!现在我需要花一些时间来剖析测试结果;)
    • 关于复杂查询:这里完全取决于 LINQ 翻译器的质量。 NH LINQ 翻译器在工作时似乎完全直截了当。请注意,这些测试显示特定 ORM 可以翻译什么,而不是如何。那里的性能测试是为简单查询设计的,所以你不应该认真研究它们。虽然例如分页测试显示翻译质量存在一些差异:一些提供商总是使用 ROWNUMBER 而不是 TOP,这是他们在此测试中失败的主要原因。
    • 好吧,尽管我想,我不能在这个项目上使用 EF,所以 EF 和 NH 之间的比较对我来说并不重要......无论如何,我认为为我的特定场景获取相关性能数据的唯一方法是使用我的应用程序将执行的实际查询进行自己的测试......
    • 图表有更新的版本吗?在那段时间里可以取得很多成就。
    【解决方案2】:

    如果您正在寻找具有全面高效的 LINQ 转换器的 ORM,我建议您尝试Entity FrameworkDataObjects.Net。我不确定 Oracle Lite 支持。 NHibernate 的 LINQ 翻译器还没有完全完成。

    无论如何,您现在能做的最好的事情就是下载领先的 ORM 工具,并通过分组、连接、子查询等对棘手的查询进行测试。

    【讨论】:

    • 感谢您的回答。不幸的是,EF 不是一个选项(尽管它本来是我的第一选择)。有适用于 Oracle(Devart、DataDirect)的 EF 提供程序,但没有适用于 Oracle Lite,而且可能永远不会有,因为 Oracle Lite 没有被广泛使用。而 DataObjects.Net 显然还不支持 Oracle...
    【解决方案3】:

    NHibernate 有一些学习曲线,但它非常值得学习,因为所花费的任何时间都会得到多次回报。我会推荐 NHibernate in Action 这本书来学习,因为它是一个很好的资源,涵盖了你的问题所提出的所有问题以及更多内容。

    NHibernate 性能可以调整(参见下面的链接),并且 NHibernate 具有强大的缓存机制。

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

    最终性能将由谁编写查询来决定,因为它在 SQL 中。

    【讨论】:

    • 感谢您的建议,这看起来很有趣
    • 我还要提到截屏系列“NHibernate 的夏天”——我今天使用它的唯一原因! Steve Bohlen 在 NHibernate 的每一个细节上都做得很好! summerofnhibernate.com
    猜你喜欢
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2021-05-27
    • 2015-12-06
    • 2012-08-03
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    相关资源
    最近更新 更多