Hibernate 当应用程序使用持久层或存储库时,DBA是否有角色?

Hibernate 当应用程序使用持久层或存储库时,DBA是否有角色?,hibernate,database-design,Hibernate,Database Design,我正在重新设计一对应用程序,在一个案例中使用,在第二个案例中使用Hibernate和Java(特别是)的组合 重新构建过程中的一个关键问题是提高性能,因此我想知道为应用程序的设计和开发引入新的架构是否有任何价值 请注意,我并不质疑让DBA参与管理生产数据库的价值。但在过去的项目中,在设计和编码阶段,有一个好的DBA参与,找出优化数据结构的方法,将代码放入存储过程中,等等,都是至关重要的 但是,由于数据库结构几乎完全由Hibernate和JackRabbit管理,因此没有太多的空间来优化它们。当然

我正在重新设计一对应用程序,在一个案例中使用,在第二个案例中使用Hibernate和Java(特别是)的组合

重新构建过程中的一个关键问题是提高性能,因此我想知道为应用程序的设计和开发引入新的架构是否有任何价值

请注意,我并不质疑让DBA参与管理生产数据库的价值。但在过去的项目中,在设计和编码阶段,有一个好的DBA参与,找出优化数据结构的方法,将代码放入存储过程中,等等,都是至关重要的

但是,由于数据库结构几乎完全由Hibernate和JackRabbit管理,因此没有太多的空间来优化它们。当然,如果我们发现它们的性能不好,DBA可能会发现问题,我们可以提交补丁来改进它们,但我不知道我们是否希望(或能够)在特定于应用程序的调优方面做很多工作

想知道DBA在这类应用程序中的角色的另一个原因是,我们的大部分性能问题很可能都在持久层之上,也就是说,不是数据库、hibernate或JackRabbit太慢,而是我们构建数据和推送数据的方式不是很好。解决这个问题需要数据建模,但实现媒介是XML文件和Java代码,而不是数据库表和SQL。DBA通常对这类事情了解很多吗

在设计和开发构建在持久层之上的应用程序时,让我无法完全忽视DBA的需要的是怀疑论。我不太相信使用预打包的解决方案就可以完全消除对特定应用程序的数据库优化需求

我是否遗漏了关键点?熟练的DBA能否调整hibernate配置文件,使我的应用程序的特定用例的运行速度极快?考虑在没有DBA手动调整数据库本身、构建索引等情况下运行高负载Hibernate应用程序是否疯狂?或者,在开发环境中是否有一种新的生物专门优化基于XML的数据模型和抽象的持久层

认为跑步是疯狂的行为。 高负载Hibernate应用程序,无需 DBA手动调整数据库本身, 建筑指数等

是的,因为(AFAIK)Hibernate不会对数据库进行任何优化,因为这些事情总是依赖于工作负载


为了解决您更大的问题:当然,您需要一个善于调整数据库性能的人,是的,使用hibernate确实会改变所需的技能集。

我认为这取决于您的应用程序-您仍然可以使用hibernate执行本机查询-因此这取决于是否存在任何可能需要调整的应用程序。类似地,这取决于所需的性能—如果存在任何性能关键部分,您可能需要支持来确定是什么使该部分变慢。另外,有些数据库只需要比其他数据库更多的管理员(Oracle…

我同意。更糟糕的是:使用持久层的开发人员应该具备良好的数据库知识,以理解为什么他们的一些调用需要花费大量时间,以及如何找到解决方法。

Hibernate可以控制数据库结构。这并不意味着hibernate应该控制它们

如果你有一个包含大量数据的大型应用程序,而且性能至关重要,我可能不会使用自动生成的表定义。我想要一个完全优化的数据库结构,然后编写Hibernate映射来使用它。如果您有一位稍微了解开发的DBA,他们甚至可以编写HQL或自定义SQL,使事情变得更好

(我从未使用过JackRabbit,因此我无法在这里发表评论)


此外,可能是DBA在测试期间帮助您解决性能问题。

有DBA,也有DBA。有些DBA是管理员——备份、恢复、授予、撤销——之类的人。保持灯亮着。基础的

其他DBA是架构师/设计师。“解决这个问题需要数据建模”,这是第二层DBA应该做的

许多管理员DBA被推到架构师的角色——毕竟他们知道SQL——但并不真正适合它。你知道你找错人了当

  • 他们沉迷于表和列的命名约定

  • 他们沉迷于FK/PK关系,忽略了一个事实,即一旦您获取了行并将其变成对象,您就有了许多丰富、复杂的集合类可用于管理关系

  • 它们不能将表中的行与应用程序中的对象以及两者都是其实现的真实实体分离。这通常是一个阻碍表演的因素。如果您有一个由复杂的编程语言结构实现的复杂的真实世界对象,并且该对象还映射到复杂的数据库结构,那么它可能会变得混乱。有些人退回到自己的舒适区,开始重复一些毫无意义的短语,比如“一切都只是一点点”或“最终,一切都是FK,甚至是对象引用”

  • 要求所有内容都是存储过程“因为它更快”。如果他们不能提供证据,情况会更糟

  • 关键是

    性能取决于两件事:数据结构和算法。通过选择正确的数据结构和算法来最小化资源使用(I/O、内存等)

    数据库非规范化是调整数据结构以匹配算法的一种方法。其他性能调整基本上都是相同的概念:更改参数和选项以使数据结构更好地匹配应用程序算法

    这应该是双向的。Y