php介面 - PHP 資料介面設計

來源:互聯網
上載者:User
服務A提供資料一天100W的日誌資料, B需要寫一個介面去抓取服務A的資料,(假定A的100W可以類比成從資料庫取出來) , 現在需要設計一個介面,保證介面可以比較快速的擷取100W的資料,擷取資料突然中斷可以斷點繼續擷取,同時還要保證介面安全

回複內容:

服務A提供資料一天100W的日誌資料, B需要寫一個介面去抓取服務A的資料,(假定A的100W可以類比成從資料庫取出來) , 現在需要設計一個介面,保證介面可以比較快速的擷取100W的資料,擷取資料突然中斷可以斷點繼續擷取,同時還要保證介面安全

我做過同樣的一個資料統計的服務,
A服務,是一台伺服器(A伺服器
B服務,在另外一台伺服器上面(B伺服器

最終解決方案是A伺服器的資料最終通過檔案儲存體下來,
然後在A伺服器上面通過計劃任務用 指令碼(php的curl)或者簡單點 直接rsync命令同步到B伺服器,

然後B伺服器掃檔案內容,然後將資料歸檔,去重入庫等。。

100W的資料量還是很少的。我第一眼看的時候,還以為100M呢。

解決方案比較贊同@sunwenzheng的提議。採用Redis的隊列來解決。

解決方案如下:

1.在B伺服器搭建佇列服務(不搭建在A上,是因為你的A伺服器可能是主伺服器,減少其壓力)
2.A伺服器,組建記錄檔之後立即Push到B伺服器Redis的隊列中。
3.B伺服器輪詢隊列,收集資料插入到資料庫。

這樣做的好處是,保證了日誌記錄的時序以及可以控制日誌擷取的時效。而且針對100W資料綽綽有餘。

這麼大的資料量,還要求斷點續傳,幸好是日誌資料,即時性應該要求不高。
可以考慮讓服務A定時匯出到一個檔案,然後服務B通過ftp/sftp之類的直接下載,ftp的速度已經夠快的了,如果還要更快,可以搭個NFS共用檔案。(都是支援斷點續傳的哦)

對方提供的介面有沒有時間參數什麼的?如果有就可以進行分批請求,每次記錄最後的時間,下次請求使用這個時間做條件就好
你也可以將收到的資料寫入redis的隊列中,同時另一個進程從redis隊列中讀取資料批量寫入資料庫裡
樓上的說法,如果可以使用文本的話, 也可以考慮使用 rsync 進行同步

這麼大的資料,使用API傳輸效率太低了點吧。
* 將每日的資料庫直接匯出成檔案(資料量如果太大,可以每小時的資料匯出一個檔案,或者10W條一個檔案)
* 然後伺服器B通過Http擷取(Http斷點續傳很容易實現)
* 擷取到以後反向解包資料,匯入資料庫
這樣做的好處是實現起來比較簡單,不易出錯。

可以考慮用分頁處理方法。比如100W條,我一次處理1W條,處理完後,在處理下一頁的資料。至於這個如何處理,可以先擷取總數,然後產生隊列任務。在依靠伺服器去執行擷取資料

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.