【问题标题】:Keeping database table clean using Entity Framework使用实体框架保持数据库表清洁
【发布时间】:2018-05-24 18:28:15
【问题描述】:

我正在使用实体框架,并且我有一个表,用于记录由第 3 方生成的一些事件。这些活动有效期为 3 天。所以我喜欢清除任何超过 3 天的事件,以保持我的数据库表更精简。无论如何我可以做到这一点吗?一些在清理过程中不会导致任何性能问题的方法。

【问题讨论】:

  • 您使用的是哪个数据库服务器?
  • 目前我正在使用 localDb 进行开发,但将来会部署到 Azure SQL 数据库。
  • 您可以使用每天晚上或至少在高峰时间运行的 SQL Server 代理作业,它会清理您的数据。因此,开销也将远离您的应用程序服务器。

标签: entity-framework entity-framework-6


【解决方案1】:

要做到上面提到的,有一些选择:

1) 定义映射到您的 EF 的存储过程。并且您可以使用 Quarts Trigger 及时地执行此方法。

https://www.quartz-scheduler.net

2) SQL Server 代理作业,每天在最少的高峰时间运行并删除您的行。

https://docs.microsoft.com/en-us/sql/ssms/agent/schedule-a-job?view=sql-server-2017

如果只有清洁目的所需的方法,我建议您使用选项 2

【讨论】:

  • 谢谢汉尼。我已经在我的解决方案中配置了 Quartz。但是,我找不到 SQL 服务器代理。可能是因为我的管理工作室版本。但是,现在我将只设置一个时间表并使用我的 EF 获取所有记录并删除旧记录。首先,我不希望在任何 3 天内有超过几千行,这对于 EF 和我的网络应用程序来说应该没问题,但从长远来看,我必须再次访问此页面。
【解决方案2】:

首先。确保第 3 方在每条记录上写上时间戳,这样您就可以跟踪记录的年龄。

那么。创建一个脚本,删除所有超过 3 天的记录。

从你的表中删除 DATEDIFF(day,getdate(),thatColumn)

现在在 SQL 管理 Studio 中创建计划任务:

在 SQL Management Studio 中,导航到服务器,然后展开 SQL Server Agent 项,最后展开 Jobs 文件夹以查看、编辑、添加计划作业。

将脚本设置为每天运行一次或任何你喜欢的东西:)

【讨论】:

  • 谢谢大卫。我找不到代理,可能是由于工作室的版本。我计划使用 Quartz 调度程序和 EF 来上线,因为我预计流量不会很大,可能会在几个月或几年内访问它。 :) 再次感谢。
猜你喜欢
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多