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.

La función Mongo find() que devuelve todos los documentos es lenta para ciertos documentos.

Estoy experimentando un problema al usar PyMongo para iterar sobre todos los documentos en una colección en particular. El bucle necesita escanear aproximadamente 450.000 documentos y es casi instantáneo en casi todos los documentos, excepto en unos pocos donde una sola iteración tarda de 10 a 90 segundos.

Estoy tratando de averiguar qué está ralentizando el cursor en ciertos documentos. Determiné que las largas demoras siempre ocurren en los mismos documentos.

Comparé la exportación JSON de un documento lento y lo comparé con uno rápido, y no veo nada que debería estar ralentizando la búsqueda indexada en _id. Los documentos no son particularmente grandes y los campos que realmente estoy extrayendo tienen exactamente el mismo tamaño.

La colección tiene un índice en _id, así como algunos otros índices que no son relevantes para este código.

¿Qué podría estar causando que esta consulta se detenga en ciertas iteraciones de una búsqueda por ID?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Podría haber algunas razones por las cuales la consulta se cuelga en ciertas iteraciones de una búsqueda por ID. Algunas posibilidades incluyen:

    1. Fragmentación: Si la colección está muy fragmentada, puede ralentizar las consultas ya que el sistema tiene que buscar múltiples fragmentos de disco para encontrar los datos necesarios. Esto puede suceder si los documentos son eliminados o actualizados con frecuencia, dejando espacios vacíos en la colección que deben ser llenados.
    2. Limitaciones de hardware: Dependiendo del tamaño de la colección y la configuración del sistema (por ejemplo, RAM, CPU), la consulta puede estar sobrecargando los recursos del sistema y causando un cuello de botella. Es posible que los documentos lentos tengan una mayor densidad de datos o requieran más procesamiento, lo que podría hacer que la consulta tarde más tiempo.

    3. Latencia de red: Si la base de datos se encuentra alojada de forma remota, es posible que la consulta se ralentice debido a problemas de latencia de red. Esto podría empeorar si los documentos lentos se encuentran más lejos del servidor, lo que requeriría más tiempo para transferir los datos.

    4. Bloqueo: Si varios procesos están accediendo a los mismos datos al mismo tiempo, podría haber problemas de bloqueo que hagan que la consulta se cuelgue en ciertas iteraciones. Esto puede suceder si hay transacciones en ejecución prolongadas o si otras consultas están manteniendo bloqueos en los mismos datos.

    Para diagnosticar el problema con mayor precisión, puede ser útil perfilar la consulta utilizando las herramientas de perfilado integradas de PyMongo. Esto podría ayudar a identificar en qué parte de la consulta se está invirtiendo más tiempo y ofrecer pistas sobre lo que podría estar causando el problema. Además, la revisión de los registros de la base de datos y las métricas del sistema podría proporcionar más información sobre posibles problemas relacionados con el hardware o la red.

Comments are closed.