采集频率的动态调整策略

简介:

采集频率的动态调整策略

背景

之前的采集配置都需要手动设置爬行间隔时间,希望根据不同网站板块实际情况进行填写。但实际使用时发现想填准这个值非常困难,页面本身更新频率也是变化的,所以结果就是基本都是填写成默认值。从而导致爬行频率设置形同虚设,对于很多几乎不更新的板块也配置了较高的采集频率一直在工作(默认是15分钟一次),浪费系统资源。另外早晚帖文的更新速度也明显不一样,而系统却一直按固定频率进行爬行。

解决思路

既然写成静态的间隔时间很不实用,那么就需要用一个动态的方式来根据实际情况灵活调整。

鉴于滑动窗口协议流量控制的思路,采集也可以采用类似方式。网页下载无非三种情况:(1)发现了新帖文并采集入库,(2)未发现新帖文则没有东西入库,(3)网页下载失败或网页改版导致没发现帖文。目前在每次任务采集完成以后都记录其采集的具体情况,比如发现多少条记录、入库多少条记录等。那么对于发现有更新就加快采集频率,没更新就减慢采集频率,实际情况页面更新频率也是比较平滑,所以这样就会让采集系统在采集过程中可以有一个调整周期,逐渐与页面实际更新频率相接近。但为了防止过快或者过慢采集,还要设置一个采集频率的边界。

解决方案

加速条件:本轮次采集该版块有新帖文入库,则按一定比例加快采集速度,加速因子为upactor

减速条件:本轮次采集该版块未发现任何新帖文,则按一定比例下降采集速度,减速因子为downactor

频率范围5分钟/轮次~1/轮次(1440分钟/轮次)

动态公式

f(0) = 15m/r

If found new records, f(i+1) = f(i) * upactor, f(i+1) < 1440 m/r

If not found new recoreds, f(i+1) = f(i) * downactor, f(i+1) > 5 m/r

 

根据初步评估,upactor1.125downactor0.5比较合适。那么一个持续不变化的网站采集频率从15m/r变化到1440m/r一共需要约40次任务调度,共9天的时间。而一个网站持续变化最多是从1440m/r变化成5m/r,一个需要调度约8次,共一天的时间。

这种低增长快下降的策略可以更好应对突然加快更新频率,不容易遗漏帖文。



本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/716307,如需转载请自行联系原作者

相关文章
|
3月前
|
人工智能 自然语言处理 前端开发
《10分钟开发电商页!CodeBuddy自然语言转代码实测:程序员效率革命》
CodeBuddy AI编程助手,实现自然语言到代码全流程生成,支持React开发、Figma转代码,提升效率,限时抽奖送体验码!
|
Linux C# Android开发
.NET Avalonia开源、免费的桌面UI库 - SukiUI
.NET Avalonia开源、免费的桌面UI库 - SukiUI
744 5
|
存储 前端开发 JavaScript
前端基础(十一)_函数声明及调用、函数的形参与实参、arguments参数、函数的参数类型、函数中的问题
本文介绍了JavaScript中函数的声明及调用、形参与实参的概念、arguments对象的使用、函数参数的类型以及函数中this的作用。通过示例代码详细解释了函数如何接收参数、如何处理参数个数不匹配的情况,以及函数在不同上下文中this的指向。
261 1
|
存储 弹性计算 小程序
对象存储OSS产品常见问题之Bucket授权策略中授权用户的id如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
336 0
|
存储 API 数据安全/隐私保护
MinIO安装教程(Window版本)
MinIO安装教程(Window版本)
1702 0
|
消息中间件 Java 数据库
秒杀系统库存超卖问题:从传统解决方案到引入RabbitMQ
秒杀系统库存超卖问题:从传统解决方案到引入RabbitMQ
812 0
|
关系型数据库 MySQL Linux
MySQL【部署 02】Linux 非 root 用户部署 mysql-5.7.28 设置开机启动及问题汇总(含云盘资源)
MySQL【部署 02】Linux 非 root 用户部署 mysql-5.7.28 设置开机启动及问题汇总(含云盘资源)
578 0
|
测试技术 数据库 Python
|
分布式计算 JavaScript 前端开发
Spark综合小案例之莎士比亚诗文集词频统计
Spark综合小案例之莎士比亚诗文集词频统计
339 0
Spark综合小案例之莎士比亚诗文集词频统计
|
数据处理
超参数调整实战:scikit-learn配合XGBoost的竞赛top20策略
超参数调整实战:scikit-learn配合XGBoost的竞赛top20策略
564 1
超参数调整实战:scikit-learn配合XGBoost的竞赛top20策略