2014-09-05 55 views
0

我在PHP中有一個REST服務,它返回一個JSON或XML響應。但是這項服務的一個分支是更新本地數據庫,問題是記錄的數量多少是180 000.從休息服務發送大量記錄

我的問題是,對於有大量記錄的此操作的最佳方法是什麼?

我想創建像CSV服務器的臨時文件,TXT爲JSON或XML和下載客戶端,否則遞歸地從先前請求的ID列表發送GET請求

不可能性的解決方案看後評論

我找到了解決方案,創建一個CSV文件(28MB),然後壓縮(5MB),並通過該下載...

+0

你的記錄數量有什麼具體問題?你有任何錯誤信息?從我所知道的JSON和XML都沒有限制你可以編碼的元素數量。這兩種格式都可能有點冗長,但是,如果您在HTTP層中啓用壓縮,則大多數情況下都會考慮到這一點。 – hakre 2014-09-08 12:16:38

+0

服務器返回內存錯誤和執行過程的時間遞增,並且當數據量增加時 – Ossarotte 2014-10-04 13:02:25

回答

0

返回180K記錄一個WebService是概念錯誤的,一個偶然的DoS攻擊等待發生(更不用說因交通配額而封閉的託管帳戶)。

你應該在這個實現分頁,如:

http://myserver.tld/myservice/getItems?from=100&max=1000 

蓋在一個合理的量max參數(1000或者是10000比較小的記錄),並一定要揭露找出的一種方式總行數 - 例如,來自此調用的結果或另一個getItemCount調用。

+0

支持分頁以及批處理(和REST btw。)的數據交換中的一個標準是OData:http:// docs。 oasis-open.org/odata/odata/v4.0/os/part1-protocol/odata-v4.0-os-part1-protocol.html#_Toc372793748 – hakre 2014-09-09 08:29:41

0

@Neils是對的,您的RESTful服務不應該在單個請求中提供那麼多記錄。如果您選擇,實施分頁並添加HAL(http://phlyrestfully.readthedocs.org/en/latest/halprimer.html)鏈接。

如果你的客戶如實地需要一整套大型數據(可能是需要重新訪問的設計),你正在尋找一個不同的用例。異步生成該數據集並進行適當的緩存。還要考慮XML/JSON是否適合數據集的正確格式,因爲知道您的客戶端將不得不加載並解析它。一個單位的CSV還是可以滿足的?