7

My web app contains data gathered from an external API of which I do not have control. I'm limited to about 20,000 API requests per hour. I have about 250,000 items in my database. Each of these items is essentially a cached version. Consider that it takes 1 request to update the cache of 1 item. Obviously, it is not possible to have a perfectly up-to-date cache under these circumstances. So, what things should I be considering when developing a strategy for caching the data. These are the things that come to mind, but I'm hoping someone has some good ideas I haven't thought of.

  • time since item was created (less time means more important)
  • number of 'likes' a particular item has (could mean higher probability of being viewed)
  • time since last updated

A few more details: the items are photos. Every photo belongs to an event. Events that are currently occurring are more like to be viewed by client (therefore they should take priority). Though I only have 250K items in database now, that number increases rather rapidly (it will not be long until 1 million mark is reached, maybe 5 months).

4

2 回答 2

5

http://instagram.com/developer/realtime/会有用吗?当有新的(可能是更新的?)图像供您查看时,Instagram 似乎愿意发布到您的服务器。这能行吗?

否则,我认为您的问题听起来很像任何搜索引擎所遇到的问题——您是否看过维基百科的爬虫选择标准?您正在处理网络爬虫所面临的许多问题:要爬取什么、多久爬一次,以及如何避免对单个站点发出过多请求。您还可以查看开源爬虫(在同一页面上)以获取您可能能够研究的代码和算法。

无论如何,抛出一些关于爬行标准的想法:

  • 更新更新时经常更改的内容。所以,如果一个项目在最近五次更新中没有改变,那么也许你可以假设它不会经常改变并减少更新。
  • 为每个图像创建一个分数,并更新分数最高的那些。或最低分数(取决于您使用的分数类型)。这与 LilyPond 用于排版音乐的想法类似。为此类分数创建输入的一些方法:
    • 图像被更新并需要重新缓存的机会的统计模型。
    • 每个图像的重要性分数,使用图像的新近度或事件的货币等。
  • 更新经常查看的内容。
  • 更新有很多视图的东西。
  • 时间会影响图像更新的概率吗?您提到新图像更重要,但是旧图像发生变化的概率呢?减慢检查旧图像的频率。
  • 将您的请求的一部分分配给缓慢更新所有内容,并拆分其他部分以同时处理来自几种不同算法的结果。因此,例如,具有以下内容(数字仅用于展示/示例-我只是将它们从帽子中拉出来):
    • 每小时 5,000 个请求在数据库的完整内容中搅动(前提是自上次爬虫通过后它们没有更新)
    • 2,500 个处理新图像的请求(您提到的更重要)
    • 2,500 个处理当前事件图像的请求
    • 2,500 个请求处理前 15,000 个观看次数最多的图像(只要该图像的最后 5 次检查发生变化,否则,按递减的时间表检查)
    • 2,500 个请求处理至少已查看的图像
    • 总计:每小时 15,000 个请求。
于 2013-06-18T23:49:02.237 回答
1

每小时在您的网站上查看多少(独特的)照片/活动?那些未查看的照片可能不需要经常更新。您在旧事件/电话的视图中看到任何模式吗?旧事件可能不那么受欢迎,因此也许不必经常检查它们。

andyg0808 有很好的详细信息,但是在实际应用之前了解您的数据使用模式很重要。

在某些时候,您会发现每小时 20,000 个 API 请求不足以更新经常查看的照片,这也可能导致您遇到不同的问题。

于 2013-06-21T21:11:30.950 回答