es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo mejorar el rendimiento de las consultas GET en FastAPI?

Actualmente estoy trabajando en el desarrollo de una API con FastAPI.

La API se utiliza para obtener una cierta cantidad de datos en una fecha específica de MariaDB.

Implementé esto utilizando FastAPI Pagination, pero tardó 9 segundos en obtener una respuesta.

¿Habría otras formas de mejorar el rendimiento?

Adjunto un poco de información adicional a continuación:


  • La URL actual de la API GET

http://localhost:8080/images/{fecha}?{page=N}&{size=M} (por ejemplo, http://localhost:8080/images/20211223?page=1&size=50)

  • Información de la tabla

La tabla tiene alrededor de 10,000,000 de filas, y aquí hay algunas líneas de datos agregados. No hay un índice en esta tabla, por el momento. ¡Si es necesario, lo agregaría!

enter image description here

  • La implementación actual
    “`

    <h1>Parte de la función "get"</h1></li>
    </ul>

    @router.get('/{stnd_ymd}', response_model=Page[ResponseImage])
    async def get_images(stnd_ymd: str):
    lista_de_imagenes = Images.get_all(stnd_ymd=stnd_ymd, cnts_ty_cd="CT_IMAGE")
    return paginate(lista_de_imagenes)

    <h1>Acerca de la función 'get_all'</h1>

    def get_all(cls, session: Session = None, **kwargs):
    sess = next(db.session()) if not session else session
    query = sess.query(cls)
    for key, val in kwargs.items():
    col = getattr(cls, key)
    query = query.filter(col == val)
    result = query.all()
    if not session:
    sess.close()
    return result
    “`


    Si se necesita alguna otra información, ¡por favor avíseme!

    Gracias,

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, existen otras formas de mejorar el rendimiento de la API. En primer lugar, agregar un índice en la tabla puede mejorar significativamente el rendimiento de las consultas a la base de datos. En este caso, agregar un índice en la columna de fecha puede ayudar, ya que la consulta se basa en una fecha específica.

    Además, puedes limitar la cantidad de registros que la base de datos devuelve a la vez, utilizando las cláusulas limit y offset en la consulta SQL. Esto puede reducir la cantidad de datos que se necesitan transferir a través de la red y mejorar el tiempo de respuesta.

    Otra opción es utilizar la memoria caché para almacenar los resultados de las solicitudes a la API durante un cierto período de tiempo, y servirlos desde la caché en lugar de hacer consultas a la base de datos cada vez. Esto puede reducir considerablemente la carga en la base de datos y mejorar el tiempo de respuesta para solicitudes posteriores.

    Adicionalmente, puedes considerar el uso de técnicas de programación asíncrona para mejorar el rendimiento de la API. Dado que el procesamiento de las solicitudes no depende entre sí, puedes utilizar asyncio y las palabras clave async/await para la ejecución paralela de código.

    En general, existen varias formas de mejorar el rendimiento de la API, y el enfoque más adecuado depende del caso de uso específico y de las restricciones.

Comments are closed.