【问题标题】:Hibernate Envers performance MySQLHibernate Envers 性能 MySQL
【发布时间】:2016-06-21 14:49:41
【问题描述】:

现在我正在尝试选择最合适的方法,以便使用 AWS RDS MySQL 数据库为我的实体实施审计跟踪。

我必须记录所有实体更改,包括发起这些更改的发起者(用户)。主要标准之一是性能。

Hibernate Envers 看起来是最简单、最完整的解决方案,并且可以非常快速地集成。现在我担心引入 Envers 后可能会出现性能下降。我看到一些帖子,其中开发人员更喜欢基于数据库触发器的审计跟踪方法。

触发器的主要问题是如何获取发起这些更改的发起者(用户)。

根据您的经验,您能否建议 Java/Spring/Hibernate/MySQL(AWS) 的方法,以便对历史更改实施审计跟踪。

另外,我们是否有任何 AWS RDS MySQL 数据库基础设施中的审计跟踪解决方案?

【问题讨论】:

  • 您能否详细说明您遇到的性能问题或顾虑?我不知道有任何性能问题,但欢迎您在此处概述这些问题或打开 JIRA 让我查看。
  • 由于请求的数量,我可以快速获得具有历史更改的非常大的表。我担心它会减慢我的系统速度
  • 这不是 Envers 的性能问题,当您需要审核高容量系统场景中的所有更改时,这只是任何审核解决方案所面临的副作用。无论您选择使用其他解决方案还是使用数据库触发器,根据您的业务需求,您生成的行数保持不变。

标签: mysql spring hibernate amazon-web-services hibernate-envers


【解决方案1】:

请理解,在没有具体证据支持自己的理论的情况下推测性能类似于过早优化代码。这几乎总是浪费时间。

从简单的数据库的角度来看,随着表增长到特定限制,是的,它的性能会下降,但通常这主要影响查询,如果表被正确索引并且查询正确形成,则插入/更新的影响较小。

但许多数据库支持将分区作为控制性能问题的一种手段,尤其是在较大的表上。这通常涉及跨您创建的分区方案定义的一组边界分隔表的数据。您只需定义什么是最相关的数据,然后尝试将此分区存储在最快的驱动器/存储上,而不太相关(通常较旧)的数据存储在较慢的驱动器/存储上。

您还可以通过指定 envers 属性org.hibernate.envers.default_schema 来选择将数据库表存储在不同的模式/表空间中。如果您的数据库支持将模式放在文件系统上的不同数据库文件中,您可以通过允许实体表读取/写入不影响审计表的读取/写入来帮助提高性能。

我不能说 MySQL 对这些东西的任何支持,但我知道 MSSQL/Oracle 非常容易支持分区,并且 Oracle 肯定允许跨不同数据库文件分离模式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 2011-09-01
    • 2023-03-24
    • 2013-12-21
    • 1970-01-01
    相关资源
    最近更新 更多