我正在尝试为我的Spring Boot应用程序实现审计层。目前我尝试了两种方法。
1) 创建1个审计表,包含字段:user_name、table_name、column_name、old_value、new_value、uuid、event_type。每当有更改被保存时,将填充审计实体并将其保存。
优点:
- 快速 - 只有一个审计表,易于管理
缺点:
- 有时涉及从业务实体到审计实体的太多映射 - 必须从数据库中获取旧值以填充审计实体 - 手动创建审计实体 - 检索可能很麻烦
2) 使用Javers进行审计
优点:
- 自动创建和更新审计实体 - 较少数量的表需要管理 - 不需要检索旧值
缺点:
- 由于事务规模较大,所需时间太长
基准测试
处理具有20个字段(列)的10行表(实体):
使用方法1所需的时间:24328毫秒 => 24秒
使用方法2所需的时间:311292毫秒 => 311秒(近12倍)
3) 没有使用Hibernate Envers,因为创建的表数会很多。
有人能提出一个在上述优缺点的情况下更好的审计想法吗?我们的目标是:
- 少量表需要管理 - 响应时间短 - 模块化审计层,更多的是自动化而不是手动的
每个表中有10到25列。
1) 创建1个审计表,包含字段:user_name、table_name、column_name、old_value、new_value、uuid、event_type。每当有更改被保存时,将填充审计实体并将其保存。
优点:
- 快速 - 只有一个审计表,易于管理
缺点:
- 有时涉及从业务实体到审计实体的太多映射 - 必须从数据库中获取旧值以填充审计实体 - 手动创建审计实体 - 检索可能很麻烦
2) 使用Javers进行审计
优点:
- 自动创建和更新审计实体 - 较少数量的表需要管理 - 不需要检索旧值
缺点:
- 由于事务规模较大,所需时间太长
基准测试
处理具有20个字段(列)的10行表(实体):
使用方法1所需的时间:24328毫秒 => 24秒
使用方法2所需的时间:311292毫秒 => 311秒(近12倍)
3) 没有使用Hibernate Envers,因为创建的表数会很多。
有人能提出一个在上述优缺点的情况下更好的审计想法吗?我们的目标是:
- 少量表需要管理 - 响应时间短 - 模块化审计层,更多的是自动化而不是手动的
每个表中有10到25列。