2017-09-16 30 views
0

我正在查询的API将需要5个参数,称它们为A,B,C,D,E,使用数据存储进行一些计算,然后返回大约8个字段的响应,这些字段都将被存储。不幸的是,这个计算需要很长时间,导致用户体验最多缓慢。值得注意的是,这个回应将在屏幕上使用JavaScript应用程序,而周围的技术目前是PHP 7.1,使用Laravel和MySQL缓存来自API的数十亿响应的最快/最有效的方式是什么?

我的计划是将每个响应保存在一个表(或类似的响应中)然后将它们用作直接查找,因此最终用户可以输入A,B,C,D,E并获得即时响应。

所以,这个问题基本上是两个部分:

1:什么是查询一个RESTful API十亿倍(或更多)在一天的最佳方式?目前,对于类似的情况,我一直在使用Guzzle Promises一次发送5个请求。

2:推荐使用哪种技术来存储此数据?它只需要是一个单行或一个没有关系的实体。这些数据不会用于连接或类似的任何事情。目前,计划是使用分片MySQL,或者使用Redis(但是我担心Redis最终会停止扩展,比如我对数据的需求大量增加)。

要么对这些问题的任何见解将不胜感激

+1

你应该看看[help/on-topic]和[ask]。 – pvg

+1

你需要重新考虑你的策略。您无法每天查询REST API 10亿次 - 即每秒每秒11574个请求。如果每个响应为1KiB,即每天数据传输约为1TB,则API提供商每个月需要花费数百或数千美元,更不用说他们需要处理您的流量的数十台服务器。 –

回答

0

关于缓存存储

由于您的API通过HTTP协议运行,所以您可以做的最好的事情是遵循HTTP Caching。基本上,这意味着你需要响应发送适当的标题,以激活到期和/或验证缓存模式。

此外,它意味着你不需要编码缓存存储。您可以使用现有的反向代理解决方案。例如,在AWS中,您可以使用CloudFront。如果你自己维护服务器 - 你可以使用Varnish或Nginx作为反向代理。

-1

在这种情况下,我们的猜测一样好,你... 这种数据操作取决于:

  • 正是你的最终用户需要什么? (个性化数据或账户独立)
  • 数据多久更新一次? (每小时,每天,每周一次...)
  • 什么是API响应的缓存时间? (是的,API也缓存了它的响应)

我们假设你请求的数据每天改变两次,数据不是个性化的。 在这种情况下,您可以设置一些CRON作业,每天获取数据2次,转换数据(仅使用所需的数据,计算等),并将它们存储在数据库中(如果数据不是那么大,否则使用PostgreSql)并向最终用户显示数据库中的数据(速度更快)。 也可能有用的清理旧数据(上周,月,年......)

我希望你会在这里找到有用的东西,祝你好运!

+0

数据每天都会刷新,并且是个性化的(感谢您指出这一点,将有一列应该链接到列入白名单的域名)。除非更新,否则所有数据将有30天的使用期限。所以CRON的任务将在每天早上进行。 API响应将被缓存使用光油 – user2483010

+0

个性化,你的意思是 - 每个域? –

+0

如果列入白名单的域与请求信息的域匹配,则允许,否则不要 – user2483010

相关问题