我正在重新构建一对在一种情况下使用Hibernate的应用程序,以及Hibernate和Java Content Repository(特别是JackRabbit)的组合第二个。
重新架构的一个关键问题是提高性能,所以我想知道为应用程序的设计和开发引入DBA是否有任何价值。
请注意,我并不质疑让DBA参与管理生产数据库的价值。但是在过去的项目中,必须让一个好的DBA参与设计和编码阶段,找出优化数据结构的方法,将代码放入存储过程等等。
但鉴于数据库结构几乎完全由Hibernate和JackRabbit管理,因此优化它们的余地不大。当然,如果我们发现它们表现不佳,DBA可能会发现问题并且我们可以提交补丁来改进它们,但我不知道我们希望(或能够)在应用方式上做很多事情 - 具体调整。
想知道DBA在这种类型的应用程序中的作用的另一个原因是我们的大部分性能问题很可能在持久层之上,即数据库,休眠或JackRabbit并不是太慢,它是我们构建数据并推动它的方式并不是很好。修复此问题将涉及数据建模,但实现介质是XML文件和Java代码,而不是数据库表和SQL。 DBA通常对这类事情了解多少?
让我完全忽视在构建在持久层之上的应用程序的设计和开发中需要DBA的事情是怀疑主义。我不太相信使用预先打包的解决方案可以完全消除对特定应用程序进行数据库优化的需求。
我错过了关键点吗?熟练的DBA可以调整hibernate配置文件,以便为我的应用程序的特定用例提供极快的速度吗?在没有DBA手动调整数据库本身,构建索引等的情况下考虑运行高负载Hibernate应用程序是否是疯狂的?或者是否有一个新的生物在开发领域专门优化基于XML的数据模型和抽象的持久层?
答案 0 :(得分:7)
有DBA,还有DBA。一些DBA是管理员 - 备份,恢复,授权,撤销 - 类型的人。保持灯亮。基础。
其他DBA是建筑师/设计师。 “修复此问题将涉及数据建模”这就是DBA的第二层应该正在做什么。
许多管理员DBA都是建筑师的角色 - 毕竟他们知道SQL - 但并不适合它。你知道你在......时遇到了错误的人。
他们对表和列命名约定感到困惑。
他们痴迷于FK / PK关系,忽略了这样一个事实:一旦你获取了行并将它们变成了对象,就会有很多丰富,复杂的集合类可用于管理关系。
< / LI>它们不能将表中的行与应用程序中的对象以及两者都是实现的实际实体分开。这通常可以成为一种表现。如果您有一个复杂的现实世界对象,该对象由复杂的编程语言结构实现,并且还映射到复杂的数据库结构,则会让人感到困惑。有些人退回到他们的舒适区,开始重复无意义的短语,如“一切都只是位”或“最终,一切都是FK,甚至是对象参考”。
要求一切都是存储过程“因为它更快。”如果他们不能提供证据,情况会更糟。
这就是重点......
性能取决于两件事:数据结构和算法。通过选择正确的数据结构和算法来最大限度地减少资源使用(I / O,内存等)。
数据库非规范化是一种调整数据结构以匹配算法的方法。其他性能调优在很大程度上是相同的概念:更改参数和选项以使数据结构更好地匹配应用程序算法。
这个应该双向进行。您应该查看您的实体,您的需求,并找出做正确事情的两种数据结构和算法。一旦你完成了这个,你就可以调整缓冲区的大小,而不是为了获得更好的性能。
从根本上说,炽热的速度来自于考虑内部最内部的循环:它们循环的是什么?他们在寻找什么?如何将它们替换为不循环或根本不循环的东西?
如果您的DBA可以参与算法和数据结构设计,那么它们就是一种资产,会大量使用它们。
如果您的DBA无法参与,请不要将您的设计限制在他们认为合适的位置。
答案 1 :(得分:3)
考虑跑步是否很疯狂 没有高负载Hibernate应用程序 DBA手动调整数据库本身, 建筑指数等?
是的,因为(AFAIK)Hibernate不对数据库进行任何优化,因为这些事情总是与工作负载有关。
为了解决你的更大问题:当然你需要一个能够调整数据库性能的人,是的,使用hibernate会改变所需的技能。
答案 2 :(得分:2)
Hibernate 可以控制数据库结构。这并不意味着hibernate 应该控制它们。
如果您的应用程序包含大量数据且性能至关重要,我可能不会使用自动生成的表定义。我想要一个完全优化的数据库结构,然后编写Hibernate映射来使用它。如果您获得了一点了解开发的DBA,他们甚至可以编写HQL或自定义SQL来使事情变得更好。
(我从未使用过JackRabbit,所以我不能在那里发表评论)
此外,可能是DBA将帮助您在测试期间解决性能问题。
答案 3 :(得分:0)
我说这取决于你的应用程序 - 你仍然可以使用Hibernate进行本机查询 - 所以它取决于是否存在任何可能存在且需要调整的内容。同样,它取决于所需的性能 - 如果存在任何性能关键部分,您可能需要支持以确定哪个部分正在减速。另外一些DB只需要比其他DB更多的管理员(Oracle ...)
答案 4 :(得分:0)
我同意David。更糟糕的是:使用持久层的开发人员应该具备良好的数据库知识,以了解为什么他们的一些调用时间昂贵以及如何找到解决方法。