【问题标题】:NHibernate Schema GenerationNHibernate 模式生成
【发布时间】:2011-06-12 21:37:58
【问题描述】:

您能分享一下您在 NHibernate 模式生成方面的经验吗?就数据模型的复杂性和大小而言,它的可扩展性如何?与手工制作的数据模型相比,它是否对性能有任何重大影响?

【问题讨论】:

  • 您是在专门讨论从类定义生成数据库模式吗?与手动制作数据库模式以匹配类定义相比?如果是这种情况,它可能是 80% 的解决方案,并且非常接近您首次发布所需的解决方案。在第一个生产版本之后,您必须考虑架构生成并没有真正进行的迁移。
  • 是的 Michale,我指的是从类定义生成数据库模式。很高兴知道它非常接近版本 1 的需求,我认为它会节省大量时间。谢谢。

标签: nhibernate database-design orm


【解决方案1】:

我发现它对开发非常有用,因为您可以通过一些代码随意使用它来重建和重新填充测试数据库。 Michael 关于迁移的观点与我们的经验相符 - 一旦您发布了初始版本,您需要决定另一种更改生产数据库的方法。

FWIW,我们使用了大约 30 种常见模型(包括每个子类排列的表)的 NH 模式生成,并且它生成的定义是正确的,因此对模式的大小没有明显限制它可以处理。

我现在倾向于认为自动生成的架构几乎总是比手工制作的架构更好的起点,因为该软件会为您提供完全一致且完全符合您指定的内容。熟练的 DBA 可以执行的优化类型可能不是必需的或有用的,除非您有大量的特定工作负载需要调整。

【讨论】:

    【解决方案2】:

    如果您需要导出架构并填充数据库,您希望看到 Fluent NHibernate Schema Tool。它能够读取您的程序集、hibernate.cfg.xml、*.hbm.xml 和 Fluent 映射。您可以生成/执行数据库的 DDL(创建/更新/删除表),它接受一个类似 CSV 的输入文件,用于填充创建/更新的数据库(数据集文件接受在 HQL 中完成的小查询) .此工具对于使用 NHibernate 的单元测试和 Web 应用程序非常有用。

    查看更多:https://bitbucket.org/guibv/fnst/wiki/Home

    【讨论】:

      【解决方案3】:

      您正在比较苹果和梨。手工制作的模型将始终(以及应该)执行任何 ORM 技术。

      我个人认为 NHibernate 表现良好,几乎可以将任何 OO 模型映射到关系模型,这就是它的美妙之处。有一些问题,例如了解应用程序启动时间并确保您正确使用会话管理。

      我会推荐 NHibernate,并且已经在包含大约 80 个表的架构上使用了 18 个月,并且还没有发现任何重大问题。

      【讨论】:

      • 很高兴知道它在 80 张桌子和 18 个月内运行良好。我知道手工制作的数据库模型会更好,这就是为什么我提到是否存在任何“主要的性能影响”。
      【解决方案4】:

      我会说没有任何性能影响。实际上,如何创建表以适应映射文件的选择并不多。还有一些仅用于创建模式的附加功能,例如可以指定数据库数据类型、创建约束和索引以及在创建模式时运行任意 sql。

      性能调优通常可以在自动创建架构后进行。例如,您让 NH 创建表并运行一些 Alter Table 语句来设置一些与性能相关的设置。之后创建(或替换)索引也很容易。所有这些甚至可以写入映射文件。艰苦的工作仍然由 NH 完成:根据已有的信息创建所有表和列:映射文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多