FastAPI 傳回大型 JSON 資料的最佳化
透過 FastAPI 傳回大量 JSON 資料集可能是一項耗時的任務。為了解決這個瓶頸,我們探索提高效能的替代方法。
識別瓶頸:
使用 json.dumps 將 Parquet 檔案解析為 JSON 的初始方法( ) 和 json.loads() 效率低。 FastAPI 的預設 JSON 編碼器引入了大量開銷。
替代編碼器:
一種解決方案是採用更快的 JSON 編碼器,例如 orjson 或 ujson。這些替代方案比 FastAPI 的預設編碼器提供了實質改進。
自訂回應編碼:
透過繞過 FastAPI 的預設編碼器並直接將回應中的資料轉換為 JSON,我們可以優化編碼過程。這需要建立一個自訂 APIRoute 類別來覆寫路由處理程序並測量回應時間。
利用 Pandas JSON 編碼器:
直接在其中使用 Pandas 的 to_json() 方法FastAPI 提供卓越的性能。此方法將 DataFrame 轉換為 JSON 字串,避免不必要的轉換並提高效率。
如果內存問題,則流式傳輸數據:
由於內存過多而出現限制的情況數據,考慮流技術。增量返回資料可以有效緩解記憶體問題。
替代解決方案:Dask
對於特別大的資料集,請考慮使用 Dask,這是一個專門為處理此類資料量而設計的函式庫。 Dask 的 read_parquet() 方法允許與 Parquet 檔案無縫整合。
其他注意事項:
如果在瀏覽器上顯示資料導致延遲,請設定Content-Disposition 標頭帶有附件參數會提示瀏覽器下載資料而不是渲染資料。此外,確保在 Pandas 中使用 to_json() 或 to_csv() 方法時指定路徑參數,可以避免在記憶體中儲存大型資料集,從而防止潛在的記憶體問題。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3