如何从数据库中存储的项目中删除/查找无效 URL?

问题描述 投票:0回答:1

我正在开发一个项目,我们为用户存储数百万个端点(例如用户为页面添加书签、用户喜欢链接并且我们存储它、用户保存最喜欢的端点等)。我们存储了超过 10-1500 万个端点。我们估计这些端点中有 10-20% 是不起作用的/被删除/移动/死端点。如何从数据库中删除这些 URL?

有时网站可能会暂时关闭,如果脚本给我 404,我不想删除它,这样的情况很多。

我的方法应该是什么?谢谢你

performance testing search architecture software-design
1个回答
0
投票

有很多方法可以解决“过时数据删除”问题。一般来说,您可以在主动方法和被动方法之间进行选择。 积极主动

有一个预定的后台作业,可以系统地扫描链接。它获取固定数量的记录(例如 10,000 条),并且查询使用排序(例如创建日期)。对于排序,请选择不可变且价值不断增长的列

例如

作业运行#1:[2021-01-01T00:00:00Z,2021-01-01T09:17:10Z]
  • 作业运行#2:[2021-01-01T09:17:10Z,2021-01-01T13:42:56Z]
  • 作业运行#3:[2021-01-01T13:42:56Z,...
  • 您必须保存系统扫描中所在的位置,以便下一个作业运行可以从上一个作业停止的地方继续。

如果您需要处理暂时性问题(站点暂时不可用),那么您可以在多个不同的日子运行作业,以确保它们要么永久不可用,要么存在一些暂时性故障,但现在已经消失。您可以引入

可用性状态

来捕获每个单独记录的作业运行结果。 这是状态转换的示例:

availability status state diagram 将记录标记为删除后,您就可以安全地将其删除。

反应式

此方法在客户端和存储在数据库中的链接之间使用保留代理。每当有人点击链接时,请求首先会到达保留代理,然后该代理将请求转发到实际目标。保留代理检查响应并执行所需的“可用性状态”转换(就像批处理代码中一样)。最后将响应返回给客户端。

结论 两种方法各有利弊。例如,主动方法从最旧到最新扫描链接,这可能非常耗时才能获取最新记录。反应式方法仅扫描

active

链接...

将这两种方法结合起来从多个角度解决问题可能是有意义的。每当您评估选择哪种解决方案时,请同时考虑权衡,例如引入的复杂性、请求处理增加的延迟等。

© www.soinside.com 2019 - 2024. All rights reserved.