API使用,在本地存储或每次都提出请求?

时间:2013-02-28 07:57:32

标签: php mysql database api facebook-graph-api

我想知道是否有人可以给我一些建议。 目前我们正在构建一个使用大量API的应用程序,例如Flickr,Facebook,Salesforge,Picasa,Twitter,LinkedIn等。 现在我想知道解决数据使用问题的最佳想法是什么。 首先,请求所有数据消耗您的数据容量。 此外,应用程序应该能够同时处理1000个用户,因此使用所有这些请求可能会让我们被标记为DDOS攻击者:P 所以我的解决方案是将所有内容存储在MySQL中,每小时更新一次关键数据,每天更新一次。 你们怎么解决这个问题? 另一个问题是图像,我们将使用1000000的图片。你们是否会建议在本地托管这些并经常更新它们,或者只是存储链接并将其发送给用户? 我遇到的最后一个问题是,MySQL如何使用1000个用户每秒从复杂表格中获取数百个请求。 例如,如果用户加载相册,则数据库必须吐出100张照片。想象一下,同时为100个用户完成。 mysql能够处理所有这些吗?

提前致谢, 萨姆

1 个答案:

答案 0 :(得分:0)

大多数(如果不是全部)公共API都有称为ETag的东西。这是数据的指纹,您可以向API发出条件GET请求,如:

“如果Etag与E33SDF33D234DMD不同,请给我ID为6123765的图像!”这是通过If-None-Match HTTP标头完成的。

If-None-Match:W/"98F96B877E576EA4E5A278D41217959117663007"

然后,API将使用图像进行回复,否则它将为您提供HTTP 302(它位于您的缓存中)。如果服务器为您提供了映像,则缓存的映像已过时,服务器也会在Etag HTTP响应标头中为您提供新的Etag:

ETag:W/"A4D860491DE0E51EA05F46143A41CC58F7270142"

在缓存中,您可以存储图像ID,图像数据和Etag。然后,当您使用ETag从API请求图像时,如果服务器回复302,您可以传递已缓存的图像。如果服务器为您提供图像和200回复​​,则使用新图像和服务器为您提供图像的Etag更新缓存。并将图像传输给来电者。