Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

682
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda