从代理ips列表中选择最佳代理ip的算法

时间:2014-09-03 13:48:25

标签: algorithm data-structures

我抓了几个网站说site1, site2, ...., site100。我使用代理ips列表来抓取它们,让我们说ip1, ip2, ..., ip10。每当我从网站抓取任何页面时,请site5我调用一个函数getProxyFor(site5),它给我代理ip,我应该使用site5来请求页面。 getProxyFor检查返回代理ip,该代理ip已用于site5次数最少(我可以使用其他条件,例如代理的年龄或总成功请求数(对所有站点合并)有多少)发送等)。所以基本问题是

  

从每个都有几个属性的项目列表中,我想选择   查询一个或多个属性的项目

我可以将所有这些数据存储为rdbms,如

IP     | Site     | Count 
ip1    |  s1      |  5
ip1    |  s2      |  9
ip2    |  s2      |  1

并执行select ip from table order by count limit 1之类的查询(我可以使用限制5,然后检查那些5 ips的年龄和其他东西)。但是,如果我不想使用SQL数据库呢?我应该使用什么数据结构来有效地查询这些数据

1 个答案:

答案 0 :(得分:1)

我将redis用于此类功能。具体来说,redis有sorted sets,它可以让你获得使用IP次数最少的能力(假设你使用IP作为密钥分数的次数)。

如果您有一组更复杂的标准用于确定接下来使用哪个IP,您可以通过使其成为条件的函数来计算密钥的分数(假设函数的输出是数字) 。例如。 score = f(last_time_used, latency, number_of_times_used)

此外,redis存储在内存中,因此与SQL相比,快速