如何存储、获取随机 100 个页面的状态呢?

2018-03-23 12:12:22 +08:00
 xshwy

需求:获取排名前 100 个 url 的 HTTP 状态码存储,前台要显示排名前 100 个 url 非 200 状态码的页面有哪些。

目前想法:

  1. 获取排名前 100 的 url
  2. 轮询 100 个 url 状态码
  3. 删除之前的数据库数据
  4. 保存获取到的状态码

目前数据库设计:

遇到的难题:

  1. 在第 3 步删除之前数据的时候,需要一定的时间,前台用户查询的时候会显示没有数据,体验不好。
  2. 因为是获取排名前 100 的 url,所以每次查询的 url 可能不一样,无法在之前的数据上更新

请教: 有没有更优雅的存储方式? 后续可能会扩展到 1000 个、10000 个 url,遇到类似情况该如何解决呢?

先提前感谢各位大佬的回复了,感谢!

2974 次点击
所在节点    Python
24 条回复
kennylam777
2018-03-23 17:52:29 +08:00
@xshwy 放心吧, 1000 及 10000 還是很小

我有一個類似的, 3500 多 URL 佔用 10MB 不到 RAM
rrfeng
2018-03-23 17:53:36 +08:00
es kibana 啥代码也不要写
xshwy
2018-03-24 01:01:00 +08:00
#22 @rrfeng 我搜索一下相关技术,感谢提供解决方案

#21 @kennylam777 哇 非常感谢,发现 ZADD/ZRANK 太好用了,可以实现我大部分的需求,可以自动更新已存在的数据,还可以直接排序好实用,也可以直接分页查询太好了!

不过有一点问题就是无法设置过期时间,查了一圈也没找到相关的解决方案,继续求教一下

第一次轮训查到三个状态码为非 200 的,按照排名顺序插入,排名也是必须的,所以 score 无法设置时间戳…
> ZADD urls 1 xxx.com/001
> ZADD urls 3 xxx.com/002
> ZADD urls 25 xxx.com/003

前台可以展示出排名第几的 url 是非 200 状态,第二次轮训的时候只查到 1 个状态码为非 200 状态
> ZADD urls 23 xxx.com/001

问题来了,如何清空之前存储的 002、003 两个数据呢?或者如何设置自动清理超过 10 分钟没更新的数据呢?
baojiwei
2018-03-29 02:50:54 +08:00
redis 的 zrank 就可以了
多使用缓存,这类问题不需要使用数据库
如果需要的话也是异步的,非高频操作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440731

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX