【问题标题】:Is there a role for a DBA when an app uses a persistence layer or repository?当应用程序使用持久层或存储库时,DBA 是否有角色?
【发布时间】:2016-11-22 05:24:26
【问题描述】:

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

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

请注意,我并没有质疑让 DBA 参与管理生产数据库的价值。但在过去的项目中,必须让优秀的 DBA 参与设计和编码阶段,找出优化数据结构的方法,将代码放入存储过程等。

但鉴于数据库结构几乎完全由 Hibernate 和 JackRabbit 管理,因此优化它们的空间不大。当然,如果我们发现它们表现不佳,DBA 可能会发现问题,我们可以提交补丁来改进它们,但我不知道我们是否希望(或能够)在应用程序方面做很多事情——具体调优。

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

让我无法完全排除在设计和开发基于持久层之上的应用程序时对 DBA 的需求的原因是怀疑。我不太相信使用预打包的解决方案可以完全消除对特定应用程序进行数据库优化的需求。

我错过了关键点吗?熟练的 DBA 是否可以调整休眠配置文件以使我的应用程序的特定用例变得异常快速?在没有 DBA 手动调整数据库本身、构建索引等的情况下考虑运行高负载 Hibernate 应用程序是不是很疯狂?或者开发领域是否有专门优化基于 XML 的数据模型和抽象持久层的新生物?

【问题讨论】:

    标签: hibernate database-design


    【解决方案1】:

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

    其他 DBA 是架构师/设计师。 “解决这个问题将涉及数据建模”这就是第二层 DBA应该做的事情。

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

    1. 他们沉迷于表和列的命名约定。

    2. 他们痴迷于 FK/PK 关系,而忽略了这样一个事实,即一旦您获取了行并将它们制成对象,您就有许多丰富、复杂的集合类可用于管理关系。

    3. 他们不能将表中的行与应用程序中的对象以及两者都是实现的真实世界实体分开。这通常可能是一个表演障碍。如果您有一个复杂的现实世界对象,该对象由复杂的编程语言结构实现并且还映射到复杂的数据库结构,那么它可能会令人困惑。有些人退回到他们的舒适区并开始重复无意义的短语,例如“这一切都只是位”或“最终,一切都是 FK,甚至是对象引用”。

    4. 要求一切都是存储过程,“因为它更快”。如果他们不能提供证据,情况会更糟。

    重点是……

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

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

    应该是双向的。您应该查看您的实体、您的需求,并制定出 数据结构和算法来做正确的事情。完成此操作后,您可以调整缓冲区的大小等等以获得更好的性能。

    从根本上说,超快的速度来自于对最内层最内层循环的考虑:它们在循环什么?他们在寻找什么?如何用不循环或根本不循环的东西替换它们?

    如果您的 DBA 可以参与算法和数据结构设计,那么它们就是一种资产,请大量使用它们。

    如果您的 DBA 无法参与,请不要将您的设计限制在他们认为满意的范围内。

    【讨论】:

      【解决方案2】:

      考虑经营一家公司是不是很疯狂? 高负载 Hibernate 应用程序而无需 DBA 手动调整 DB 本身, 建立索引等?

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

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

      【讨论】:

        【解决方案3】:

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

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

        (我没用过 JackRabbit,所以无法评论)

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

        【讨论】:

          【解决方案4】:

          我想说这取决于您的应用程序 - 您仍然可以使用 Hibernate 进行本机查询 - 所以这取决于是否存在任何可能存在并需要调整的查询。同样,它取决于所需的性能 - 如果有任何性能关键部分,您可能需要支持来确定是什么减慢了该部分的速度。此外,一些数据库只需要比其他数据库更多的管理员(Oracle ...)

          【讨论】:

            【解决方案5】:

            我同意David。更糟糕的是:使用持久层的开发人员应该具备良好的 DB 知识,了解他们的某些调用为何耗时以及如何找到解决方法。

            【讨论】:

              猜你喜欢
              • 2013-10-16
              • 1970-01-01
              • 1970-01-01
              • 2021-10-28
              • 1970-01-01
              • 2021-07-13
              • 1970-01-01
              • 1970-01-01
              • 2014-10-08
              相关资源
              最近更新 更多