在SQL中存档数据

时间:2012-11-22 18:01:40

标签: sql database database-design

需要一些关于如何最好地解决这个问题的建议。基本上,我们的数据库中有几个表以及这些表的已删除数据的存档版本(例如Booking和Booking_archive)。这两个表中的表结构完全相同,除了归档表中的两个额外列:DateDeleted和DeletedBy。

我删除了这些存档表,只是将DateDeleted和DeletedBy列添加到实际表中。我的计划是对此表进行分区,以便将归档信息与非归档信息分开。

这是最好的方法吗?我只是不喜欢有两个表来区分存档和非存档数据。

执行此操作的其他任何建议/指示?

2 个答案:

答案 0 :(得分:4)

归档的目的是提高性能,所以我想说将数据分成另一个表肯定会更好。实际上,我会在单独的服务器上创建存档数据库,并将存档数据保存在那里。这将带来最大的性能提升。亚军架构是同一服务器上的第二个“归档”数据库,具有完全重复的表。

即使使用分区,您仍然会遇到表锁定问题,并且硬件限制会降低您的速度。单独的表或dbs将消除前者,单独的服务器或每个分区的一个驱动器可以解决后者。

至于存储存档日期,我认为我不会在生产数据库上这样做。也可以在archive-db表上创建你的时间戳,所以当你插入记录时,它会在归档时用日期时间自动标记它。

答案 1 :(得分:4)

解决方法取决于:

  1. 具有此类存档表的表的数量
  2. 数据到存档表的到达率是多少?
  3. 您想投资单独服务器的软件/硬件
  4. 基于以上所述 - 各种选择可能是:

    1. 相同的数据库,同一服务器上的不同架构
    2. 在同一台服务器上存档数据库
    3. 在不同服务器上存档数据库
    4. 如果存档数据并且无法返回主表,请不要进行分区。 您还可以在归档数据(保留期或到期日期)上添加生命周期管理列,以便还可以有效管理归档数据生命周期。