Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

685
Vistas
¿Cómo mejorar el rendimiento de la consulta GET en FastAPI?

Actualmente estoy trabajando en el desarrollo de API con FastAPI.

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

Implementé esto usando Paginación FastAPI , pero tardó 9 segundos en obtener una respuesta.

¿Habría otras formas de mejorar el rendimiento?

Adjunto un poco de fondo a continuación:


  • La URL de la API GET actual

http://localhost:8080/images/{date}?{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 índice en esta tabla, a partir de ahora. Si es necesario, ¡lo agregaría!

ingrese la descripción de la imagen aquí

  • La implementación actual
 # get function part @router.get('/{stnd_ymd}', response_model=Page[ResponseImage]) async def get_images(stnd_ymd: str): image_list = Images.get_all(stnd_ymd=stnd_ymd, cnts_ty_cd="CT_IMAGE") return paginate(image_list) # about `get_all` function 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 hay alguna otra información necesaria, por favor dígame!

Gracias,

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Como algunas personas señalaron en los comentarios, el tiempo de respuesta lento podría deberse a una consulta mal optimizada. Por ejemplo, en su método get_all al aplicar filtros para la consulta, siempre obtiene todas las columnas, lo que podría no ser la mejor práctica al obtener una cantidad tan grande de datos, así que intente obtener solo aquellas columnas que son necesarias para su interfaz/cliente en una vista específica. También creo que debe escribir su propia paginación personalizada realizada en el nivel de consulta (que será más rápido porque lo realiza la propia base de datos) porque tengo la sospecha de que la paginación fastapi solo pagina datos ya obtenidos previamente. Ejemplo de paginación usando SQLAlchemy:

 offset = (page_number * items_count) - items_count filters = [ getattr(cls, column_name) == value for column_name, value in kwargs.items() ] query = query.where(*filters) result = query.offset(offset).limit(items_count).all()

Intente usar fastapi-profiler cuando busque cuellos de botella de rendimiento en su código. Aquí hay una configuración simple que usé en uno de mis proyectos:

 app.add_middleware( CProfileMiddleware, enable=True, print_each_request=True, strip_dirs=False, sort_by="cumtime" )
over 4 years ago · Santiago Trujillo Denunciar

0

¿Qué marco ORM usas? ¿Tortuga? ¿Alquimia SQL? Fastapi-pagination se integra con un montón de marcos

Entonces desea comprender qué consulta SQL se produce. Para esto, depuraría la solicitud y profundizaría en el código del marco ORM para encontrar un lugar donde se genera la consulta SQL. Por lo general, un simple step into depuración debería funcionar.

Algunos marcos ORM le permiten ver las consultas SQL registradas. Aquí hay una pregunta sobre el registro de consultas de SQLAlchemy .

Después de encontrar su consulta, desea probarla manualmente y ver qué puede mejorar. El comando ANALIZAR puede ser útil para obtener información sobre índices de tablas usados y otras cosas.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda