光速与 NHibernate
Posted
技术标签:
【中文标题】光速与 NHibernate【英文标题】:Lightspeed vs NHibernate 【发布时间】:2010-10-18 10:35:43 【问题描述】:LightSpeed 是什么体验? Mindscape 提供的比较并没有过多地说明 NHibernate。 Lightspeed 似乎很灵活,但我对性能的看法并不多。 Lightspeed 的表现如何?使用 Lightspeed 还有什么缺点吗?
【问题讨论】:
不要去光速附近的任何地方,这里有人决定使用它并且有 0 支持,每次我必须触摸它时只会出现疼痛和痛苦......我不能只是描述它是多么令人沮丧......想象一下Seibel和VB生了一个孩子,这不是轻轻地发生的。就像仇恨一样......这种关系出了点问题,这是他们在不诉诸暴力的情况下唯一的宣泄......所以是的,远离光速...... 【参考方案1】:在过去的六个月里,我一直在工作中使用 NHibernate 和 Active Record,并在业余时间在家中使用 LightSpeed。
优点/缺点 到目前为止,我发现 LightSpeed 和带有 Active Record 的 NHibernate 都易于学习。
我还没有发现 LightSpeed 的缺点(目前)。我最喜欢的功能是:
约定优于配置。这样可以节省大量时间并提供一致的代码。 模型类和配置生成器。 支持 Linq 和 mysql 5。我最喜欢 Active Record 的特点是:
无需 XML 配置,自动提供最常用的配置选项。 NHibernate 的灵活性在需要时仍然可用(例如条件查询)。Active Record 对我来说的缺点是:
Ruby on Rails 代码示例似乎比 C# 示例多性能 我还没有(还)并排比较这两种产品并平等地运行性能测试。
我猜 NHibernate 的类层次结构更深。在使用 ANTS Profiler 优化我的代码时,我发现对于一个简单的查询,在生成实际 SQL 查询之前,会通过 NHibernate 类进行调用后调用。
当然,产生的查询会对 ORM 的最终性能产生重大影响。
LightSpeed 和 NHibernate 都提供延迟加载,而 Active Record 让 NHibernate 轻松实现这一点。
我认为使用带有 Linq 的 Lightspeed 优化您的查询更容易,并且对维护您的代码的人来说更清楚。而通常不建议编写 NHibernate HQL。
【讨论】:
RoR ActiveRecord 和 Castle ActiveRecord 唯一的一点是它们都实现了相同的模式。除此之外,他们不分享任何内容。 Lightspeed 的缺点:主键在模型中总是必须被称为 Id,而 Lightspeed 期望它们是一个单独的、自动计算的字段。根据他们自己的网站:“我们不希望主键具有任何商业价值”。复合键支持有些欠缺,在运行 LINQ 查询时检查 SQL 分析器会发现它们的实现远未完成……缓存和投影都不能使用 LINQ 正常工作(尽管 Mindscape 的专有机制按承诺工作)。【参考方案2】:关于性能,from this page
急切和延迟加载没有 N+1 问题。 包括“命名聚合”。那是, 为特定的急切负载命名 图形。观看截屏视频。
不要低估这一点。这意味着如果您加载一个包含 200 个项目的列表,大多数情况下,大多数 ORM 将运行 201 个查询。光速没有。这是(非常)少数不这样做的人之一。
如果您正在寻找在某些边缘情况下快 100 毫秒的东西,那么祝您好运。理论上我喜欢 NH,而且我认为我永远不会使用 ORM,但对于我所做的大部分工作来说,NH 完全是矫枉过正——我最终花了很多时间来维护元数据、类文件、映射等人,它是......有趣的......测试。好吧,无论如何,这是给我们的。
【讨论】:
如果映射有问题,请使用 Fluent-NHibernate 或 ActiveRecord【参考方案3】:我最近快速浏览了两者。 Lightspeed 给我留下深刻印象的是:
他们的工具运行良好(我认为是我用过的最好的 VS 设计师)。 响应速度非常快。他们回答了问题并添加了功能。对我来说最引人注目的是它们严重依赖约定,并且在大多数情况下似乎没有覆盖。因此,在决定如何准确映射事物时,我的选择并没有我想要的那么好。据说 Lightspeed 3 会解决这个问题,让您可以进行更多自定义。
由于所有的 XML,我远离 NHibernate,但后来发现 Fluent NHibernate,它看起来会很好地工作。没有设计师支持,尽管有些人可能会说这是设计使然(专注于您的对象)。 NHibernate 似乎也是 .NET 最常用的 ORM,所以从这个意义上说,它是一个“安全”的赌注。到目前为止,它已经能够映射出我能想到的大部分内容。
无论如何,由于自定义限制,我在 Lightspeed 上并没有走得太远。如果我正在开始一个可以符合他们惯例的新项目,那可能是一个不同的故事。该公司反应迅速,我真的很想使用他们的一种产品:)。
【讨论】:
【参考方案4】:我最近对大量 ORM 进行了比较,包括 NH 和 Lightspeed。我专业用NH所以有点偏,文章是here。
【讨论】:
他的文章好像移到这里了:shrinkrays.net/articles/…【参考方案5】:我已经使用 Lightspeed 几个月了,但我是 .NET 的新手,所以从未使用过 NHibernate。到目前为止,我发现它很容易使用,学习曲线很小,并且会不断更新。对我来说最大的好处是支持。查询通常会在很短的时间内得到答复,并且发现的任何错误通常会在第二天修复并在夜间构建中可用。 不确定“Lightspeed 的性能如何”是什么意思?这家伙看起来很开心:o) http://omarbesiso.spaces.live.com/blog/cns!70A5B53D721071B7!473.entry
【讨论】:
是的——Mindscape 擅长回答问题。它在很大程度上弥补了产品随附的 skint 文档。如果您想了解 Lightspeed 在 SQL Server 上的表现如何,请打开 SQL 分析器并观察它生成的查询......您可能会惊讶地发现它毕竟不是那么高效! 在过去 2.5 年发布的最后几个版本中,性能得到了改进。【参考方案6】:去年,我在新西兰奥克兰的 TechEd 上与该产品的一位主要开发人员(Jeremy Boyd)进行了交谈,并提出了这个问题。他似乎认为它比 NHibernate 快了几个数量级。这当然是他的产品,所以他会这么说,但我认为值得一提。
【讨论】:
这种说法,没有重要的限定,听起来非常可疑。 ORM 不会给远程数据库调用增加足够的开销,甚至在许多情况下都不会引起注意。 请注意:Jeremy Boyd 是 Microsoft 在新西兰的 RD。光速很快!以上是关于光速与 NHibernate的主要内容,如果未能解决你的问题,请参考以下文章