2017-09-16 31 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

相關問題