Optimización FastAPI para devolver datos JSON de gran tamaño
Devolver grandes conjuntos de datos JSON a través de FastAPI puede ser una tarea que requiere mucho tiempo. Para abordar este cuello de botella, exploramos enfoques alternativos que mejoran el rendimiento.
Identificación del cuello de botella:
El enfoque inicial de analizar el archivo Parquet en JSON usando json.dumps( ) y json.loads() es ineficiente. El codificador JSON predeterminado de FastAPI introduce una sobrecarga significativa.
Codificadores alternativos:
Una solución es emplear codificadores JSON más rápidos como orjson o ujson. Estas alternativas ofrecen una mejora sustancial con respecto al codificador predeterminado de FastAPI.
Personalizar codificaciones de respuesta:
Al omitir el codificador predeterminado de FastAPI y convertir directamente los datos a JSON dentro de la respuesta, puede optimizar el proceso de codificación. Esto implica crear una clase APIRoute personalizada que anule el controlador de ruta y mida el tiempo de respuesta.
Aprovechando el codificador JSON de Pandas:
Usando el método to_json() de Pandas directamente dentro FastAPI proporciona un rendimiento excelente. Este método convierte el DataFrame en una cadena JSON, evitando conversiones innecesarias y mejorando la eficiencia.
Transmisión de datos si hay problemas de memoria:
En los casos en los que surgen limitaciones de memoria debido a un exceso datos, considere las técnicas de transmisión por secuencias. Devolver los datos de forma incremental puede mitigar los problemas de memoria de manera efectiva.
Solución alternativa: Dask
Para conjuntos de datos excepcionalmente grandes, considere utilizar Dask, una biblioteca especializada diseñada para manejar tales volúmenes. El método read_parquet() de Dask permite una integración perfecta con los archivos Parquet.
Consideraciones adicionales:
Si la visualización de los datos en el navegador provoca retrasos, configurar el encabezado Content-Disposition con el parámetro adjunto solicita al navegador que descargue los datos en lugar de renderizarlos. Además, asegurarse de que se especifique el parámetro de ruta cuando se utilizan los métodos to_json() o to_csv() en Pandas evita posibles problemas de memoria al evitar el almacenamiento en memoria de un gran conjunto de datos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3