2011-02-09 70 views
2

许多应用程序累积二进制灰尘 - 随着时间积累的记录,永远不会看到白天的光。我们的应用程序会保存聊天记录,并且只显示最近5天的此类记录。一段时间后运行清理操作是否是一个好主意,将这些旧记录移动到“历史记录”表中。历史表将永远不会被使用,只是允许我们运行内部统计数据,同时(我认为)在主表中剩余的记录上实现更好的性能。另外,如果我们建立一个历史表,那么我们是否需要复制我们的表,或者是否存在隐藏的MS SQL函数,它会自动创建“影子表”。你如何处理旧记录?

+0

实际上,我对将数据移动到历史数据库存储的推荐流程非常感兴趣。我们有很多主键链接,这意味着大量的奇数位数据需要移动,我也相信大量使用“for”循环。似乎有点笨重。 – 2011-02-09 03:49:46

回答

1

没有MS SQL函数会自动创建这样的影子表。它与分区密切相关,但它确实会将存储分割(快速/慢速),同时仍将数据保存在一个表中。

你在找什么是直接存档和清除。一个简单的策略是夜间任务

  1. 更新静态查找表(即主表引用)历史表date < getdate()-6
  2. 移动记录
  3. 删除被感动

如果记录此表有其他表的外键链接to,您会发现这些表不太可能需要清除,除非它们太快增长(很少)。另一方面,如果其他表格具有FK,则这是另一回事。在这种情况下,您必须移动所有依赖子项,然后移动主项,然后按相反顺序删除。

+0

我有点不清楚人们在实践中是如何做到这一点的。我是否创建了多个“存档”表格,其后缀是“ConversationsOld”,“LogsOld”,“UsersOld”等,然后将数据移入它们? – 2011-02-09 04:49:40

1

cyberkiwi对于“没有魔力”是正确的,他的推荐对于简单的数据是很好的。数据复杂时,归档变得复杂。您可能会发现在归档时需要对数据进行非规范化处理,以便可以删除或修改原始行引用的数据。