【问题标题】:Database archiving with full database使用完整数据库进行数据库归档
【发布时间】:2020-06-11 11:54:53
【问题描述】:

我有关系数据库 MySQL。要求是将少数表的记录及其相关记录归档,以便从活动数据库中完全删除,并在需要时将其归档以供以后访问。顺便说一句,Web 应用程序是基于 Rails 构建的。

有没有一种方法,原始数据库上的任何插入或更新都会反映到存档数据库中,而原始数据库上的删除不会更新到存档数据库中。

这样存档的数据库就拥有完整的活动和存档数据。并且原始数据库只有实时可访问的数据。

或者是否有任何不同且有效的解决方案。为什么是因为,如果我们采用蛮力方法,每当数据移动到存档数据库时,都需要识别所有记录及其依赖记录并将其移动到存档数据库,然后删除原始数据库中的相应记录。

使用 Rails 框架,在依赖时删除相关和依赖记录相对容易: :destroy 配置正确。

【问题讨论】:

  • 我不确定这样做的确切目的是什么。这显然不是备份,因为活的影子数据库可以像原始数据库一样被黑客入侵。我很确定有更优雅的方式来实现这个目的(对我来说看起来像是一个 XY 问题)。

标签: mysql ruby-on-rails database archiving


【解决方案1】:

有没有办法,对原始数据库的任何插入或更新都会反映到存档数据库,而对原始数据库的删除不会更新到存档数据库。

反例“我”

插入和更新会被反映,而删除则不会。但是一个邪恶的同事可能只是在删除记录之前将任何内容替换为虚拟内容,因此只保留记录之间的关系,而其他一切都将消失。这可能会使“不删除镜像方法”变得无用(除非您可以从链接图本身中扣除有价值的信息)。


如果存档数据库也具有原始数据库的所有技术属性,则这是counterexample "II"

想象一个表,它为某些列定义了 UNIQUE 组: 唯一(姓名、姓氏、出生地、出生日期)

现在有人删除了 Jane Doe,伦敦,2000-01-01。不过,影子表会保留此记录。

一周后,您注意到这是某个同事犯的错误。您想重新创建 Jane,但由于她的数据仍然存在于影子表中,这将被拒绝并且事务不会提交。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2018-03-15
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多