【问题标题】:hibernate object vs database physical model休眠对象与数据库物理模型
【发布时间】:2009-03-30 20:42:47
【问题描述】:

当休眠对象模型和数据库物理模型不再匹配时,是否存在任何实际问题(例如性能)?有什么顾虑吗?它们应该保持同步吗?

我们当前的系统最初是为少数用户设计的,因此没有做太多努力来保持物理和对象的同步。开发人员继续他们的任务,而架构师没有监控。现在我们正在将旧系统重写/导入到新系统中,有人担心旧系统会处理大量用户量,并可能使新系统陷入瘫痪。

更新 20090331
下面来自 Pete 的 cmets - 关注的是数据层与对象层中的表/数据关系。如果两者之间没有依赖关系,那么如果这些关系不匹配,就不会影响性能?对吗?

在我看来,开发团队花费大量时间“调整”休眠查询/对象,但没有在数据库层花费大量时间来提高应用程序的性能。我会假设他们会在两个层面上进行调整。

这些问题可能只是因为最初的数据库设计不佳,并试图通过使用 Hibernate 来弥补/弥补差异吗?

(我是这个项目的新手,所以正在追赶)

【问题讨论】:

  • 在哪些方面不匹配?

标签: java performance hibernate


【解决方案1】:

更新:回应评论:除了使用 Hibernate 之外,优化数据库是至关重要的。仔细想想,在 hibernate 所做的所有工作之后,最终它只是查询数据库。如果数据库性能不佳(索引错误或缺失、表空间设置不当等),那么调整 Hibernate 的多少都没有关系。另一方面,如果您的数据库设置良好但 Hibernate 设置不正确(可能缓存设置不正确等,并且您返回数据库的次数比您需要的多),那么性能将受到影响出色地。端到端调整系统始终很重要,但要从基础(数据库)开始并逐步完善。

结束更新

我很好奇你所说的“不匹配”是什么意思——你的意思是已经将列添加到了休眠数据对象中没有表示的表中吗?表已添加?我认为这样的事情不会影响性能(如果您不插入/更新所有列,则更有可能是数据完整性)

一般来说,对象模型的目标不应该与数据库模式逐字匹配。您想要抽象底层数据复杂性/连接/规范化,这就是使用 Hibernate 之类的东西的全部意义。

例如,假设您有(保持非常简单的)“订单”和“订购商品”,

您的应用程序代码应该能够执行类似的操作

order.getItems()

不必知道它下面是一对多的关系。您的休眠代码中的细节控制着加载的完成方式(延迟、缓存等)。

如果这不能回答您的问题,请提供更多详细信息

【讨论】:

  • 这回答了问题,关注的是数据层与对象层中的表/数据关系。如果我假设没有依赖关系,那么如果这些关系不匹配,就不会影响性能?
  • 谢谢,这就是我的想法,这应该是一个不断调整数据库和对象的循环。
【解决方案2】:

您当然可以在 asm 中编写抽象层代码——“可能”(对开发人员来说是个可怕的词)会更快。

这是过早的优化 - 可能会破坏干净的项目布局。

正如在休眠手册中一样 - 优化可以有不同的方式 - 简单编码某些部分“可能”是其中的一部分。

【讨论】:

    【解决方案3】:

    您描述的更改当然可能会导致性能问题。 我原以为这应该是设计规范的一部分。
    因此,在编写代码时,请牢记性能标准。

    真正了解的唯一方法是将数据加载到测试环境中,然后运行一些测试。

    这绝对应该在上线之前完成,因为它可能会产生一些非常有趣的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      相关资源
      最近更新 更多