hibernate对象与数据库物理模型

时间:2009-03-30 20:42:47

标签: java performance hibernate

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

我们当前的系统是专为少量用户设计的,因此没有做太多努力来保持物理和物体同步。开发人员完成了他们的任务,架构师没有监控。既然我们正在将遗留系统重写/导入到新系统中,那么遗留系统就会处理大量用户量并可能使新系统陷入困境。

更新20090331
根据Pete在下面的评论 - 关注的是数据层与对象层中的表/数据关系。如果两者之间没有依赖关系,那么如果这些关系不匹配则没有性能命中?这是对的吗?

我的观点是,开发团队花费大量时间“调整”hibernate查询/对象,但在数据库层没有任何东西可以提高应用程序的性能。我会假设他们会调整两个层次。

这些问题可能只是一个糟糕的数据库初始设计,并试图通过使用Hibernate来弥补/弥补差异吗?

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

3 个答案:

答案 0 :(得分:1)

更新:回应评论:除了使用Hibernate之外,还要优化数据库。当你考虑它时,在hibernate完成所有工作之后,它最终只是查询数据库。如果数据库执行不好(索引错误或缺失,表空间设置不当等),那么调整Hibernate的数量并不重要。另一方面,如果您的数据库设置良好但Hibernate没有设置(可能没有正确设置缓存等等,并且您需要更多地返回数据库)那么性能将受到影响好。始终重要的是要对系统进行端到端的调整,但要从基础(数据库)开始并进行处理。

结束更新

我很好奇你对“不匹配”的意思 - 你的意思是将列添加到未在hibernate数据对象中表示的表中吗?表格已添加?我不认为这样会影响性能(如果你没有插入/更新所有列,更可能是数据完整性)

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

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

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

的操作

order.getItems()

不必知道它下面是一对多的关系。你的hibernate代码中的细节控制着负载的完成方式(懒惰,缓存等)。

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

答案 1 :(得分:0)

你当然可以在asm中编写你的抽象层 - “可能”(开发人员的糟糕话语)更快。

这是不成熟的优化 - 可能打破了干净的项目布局。

与hibernate-manual一样,优化可以看起来不同 - 简单编码某些部分“可能”成为其中的一部分。

答案 2 :(得分:0)

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

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

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