(Mysql) 存储 table 更改的最有效方法是什么?
(Mysql) What is the most efficient way to store table changes?
我正在使用 mysql 开发 Web 应用程序,我有几个 table,包括 user 和 article.
由于要记录更新了所选文章的用户,我想到了三种可能:
- 向table文章添加两列:ART_USE_ID(了解谁更改了)和ART_date(保存日期时间).
- 用 CHA_USE_ID、CHA_ART_ID 和 CHA_date 创建第三个 table changes,每次都会有一个条目用户更改 table.
- 将两者结合起来:创建 table changes 但保留 ART_date 以更快地检索上次更改的日期。
个人认为,第三个是多余的,第一个概念化的很烂(只保留最后一处改动)。尽管第二个似乎只适用于一个 table(文章),但如果必须保存更改超过 30 个,恐怕它会变得更加复杂和非常慢tables -- 这意味着 changes table 将有 30 个外键(?!)
最好的方法是什么?你对此有何看法?
你真的想知道每个修改文章的人吗?如果答案是肯定的,你必须使用第二个,我认为最好的选择是第一个(考虑速度,时间)并且我以为你只需要知道最后修改文章的人就可以了
为此,MySQL 有一个称为 Audit Log 的功能。这个想法是 "audit" 这是一系列数据更改事件,被写入数据库外部的日志文件。这样您就可以检查日志中的更改,可以看到对同一数据的多个更改,可以使日志过期等等。
审计日志需要一个插件实现来完成它的工作。 MySQL 制作企业审计插件,但它不是免费的——您必须成为付费客户才能获得 MySQL Enterprise。
审计日志插件实现也有一些免费替代方案。
您不妨试试 Percona Audit Log Plugin。这是 Percona Server(MySQL 社区版的一个分支)附带的可选插件。您只需启用插件即可。
安装和配置文档:https://www.percona.com/doc/percona-server/5.7/management/audit_log_plugin.html
我正在使用 mysql 开发 Web 应用程序,我有几个 table,包括 user 和 article.
由于要记录更新了所选文章的用户,我想到了三种可能:
- 向table文章添加两列:ART_USE_ID(了解谁更改了)和ART_date(保存日期时间).
- 用 CHA_USE_ID、CHA_ART_ID 和 CHA_date 创建第三个 table changes,每次都会有一个条目用户更改 table.
- 将两者结合起来:创建 table changes 但保留 ART_date 以更快地检索上次更改的日期。
个人认为,第三个是多余的,第一个概念化的很烂(只保留最后一处改动)。尽管第二个似乎只适用于一个 table(文章),但如果必须保存更改超过 30 个,恐怕它会变得更加复杂和非常慢tables -- 这意味着 changes table 将有 30 个外键(?!)
最好的方法是什么?你对此有何看法?
你真的想知道每个修改文章的人吗?如果答案是肯定的,你必须使用第二个,我认为最好的选择是第一个(考虑速度,时间)并且我以为你只需要知道最后修改文章的人就可以了
MySQL 有一个称为 Audit Log 的功能。这个想法是 "audit" 这是一系列数据更改事件,被写入数据库外部的日志文件。这样您就可以检查日志中的更改,可以看到对同一数据的多个更改,可以使日志过期等等。
审计日志需要一个插件实现来完成它的工作。 MySQL 制作企业审计插件,但它不是免费的——您必须成为付费客户才能获得 MySQL Enterprise。
审计日志插件实现也有一些免费替代方案。
您不妨试试 Percona Audit Log Plugin。这是 Percona Server(MySQL 社区版的一个分支)附带的可选插件。您只需启用插件即可。
安装和配置文档:https://www.percona.com/doc/percona-server/5.7/management/audit_log_plugin.html