确定表中的非活动记录

时间:2019-07-18 20:42:48

标签: sql bigdata

在这种情况下,“无效”通常可以指用户上个月从未从Web服务器访问过的数据。

随着数据库表的增大,知道记录的“非活动”状态可用于优化对活动数据的查询。


我知道一种方法可以

  1. 每次使用last_accessed时间戳更新记录 已访问。
  2. 每月,当流量较低时,Web服务器可以告诉数据库为过去一个月未访问的记录更新inactive标志。

但是这种方法的两个主要问题是

  1. 在客户端仅尝试选择数据时更新会影响性能。
  2. 如果记录太多,则每月更新可能会花费很长时间,并且会引起问题,例如锁定行。

想知道有什么更好或替代的方法。

1 个答案:

答案 0 :(得分:0)

这是一种方法。

您可以编写一个查询,该查询实际上将检查last_accessed_date是否在最近30天内(CASE WHEN last_accessed_date < SYSDATE-30),并创建一个is_active指示器。从本质上讲,这将使您可以将历史记录标记为有效或无效。

然后,完成此操作后,您需要例行(每天,每周或每月)运行此脚本以检查这些项目的状态。每月一次可能是个好主意,可以在非工作时间执行,这样不会对性能产生很大的影响(星期六上午3:00 AM)。我确定您可以与您的团队安排此时间,并让您的通信团队向最终用户发出通知,告知他们最终用户可能会在此时间段(本月的第一个星期六,凌晨3:00 AM-6:00 AM)看到可用性延迟等等。

此外,您可能会遇到第二种情况。每当有人访问记录时,您都可以进行小的逻辑检查,其本质上是“将last_accessed_date更改为今天。如果is_active当前为No,则切换为yes”。这样可以使您的数据库保持最新状态。

为了优化,最后一步是,如果您选择包括第二个选项(逻辑检查),则可能会有一个字段显示“ Last_Updated_Indicator”,这是该指标的最后更改日期。如果自上次运行整个数据库更新功能以来的最后更新指标在交货时间内,则可以跳过该指标。这将大大减少该更新过程对性能的影响。