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

174
Vistas
¿Es una buena idea almacenar copias de documentos de una colección mongodb en una lista de diccionarios y usar estos datos en lugar de consultar la base de datos?

Actualmente estoy desarrollando un bot Python Discord que usa una base de datos Mongo para almacenar datos de usuario.

Como estos datos cambian continuamente, la base de datos estaría sujeta a una gran cantidad de consultas para extraer y actualizar los datos; así que estoy tratando de encontrar formas de minimizar la comunicación cliente-servidor y reducir los tiempos de respuesta del bot.

En este sentido, ¿es una buena idea crear una copia de una colección de Mongo como una lista de diccionario tan pronto como se ejecuta el script y manipular los datos sin conexión en lugar de consultar continuamente la base de datos?

En particular, cada vez que se busca un dato con el método collection.find(), se extrae de la lista. Por otro lado, cada vez que se necesita actualizar un dato con collection.update(), tanto la lista como la base de datos se actualizan.

Daré un ejemplo para explicar mejor lo que estoy tratando de hacer. Digamos que mi colección contiene documentos con la siguiente estructura:

 {"user_id": id_of_the_user, "experience": current_amount_of_experience}

y el valor de la experiencia debe incrementarse continuamente.

Así es como lo estoy implementando en este momento:

 online_collection = db["collection_name"] # mongodb cursor offline_collection = list(online_collection.find()) # a copy of the collection def updateExperience(user_id): online_collection.update_one({"user_id":user_id}, {"$inc":{"experience":1}}) mydocument = next((document for document in offline_documents if document["user_id"] == user_id)) mydocument["experience"] += 1 def findExperience(user_id): mydocument = next((document for document in offline_documents if document["user_id"] == user_id)) return mydocument["experience"]

Como puede ver, la base de datos está involucrada solo para la función de actualización.

¿Es este un enfoque válido? Para colecciones muy grandes (millones de documentos), ¿la función siguiente () tiene los mismos tiempos de ejecución o todavía habrá algunas ralentizaciones?

Además, aunque no se me preguntó explícitamente en la pregunta, me encantaría recibir algún consejo sobre cómo mejorar el rendimiento de un bot de Discord, siempre que no incluya el uso de un VPS o fragmentación, ya que estoy ya está usando estas opciones.

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

0

Realmente no veo por qué no, siempre que sepa lo siguiente:

  1. Necesitará los recursos del sistema para cargar una base de datos completa en la memoria
  2. Es su responsabilidad sincronizar la base de datos real y su tienda local
  3. Debe ser la única persona/sistema que actualice la base de datos.
  4. Eventualmente, este patrón fallará, es decir, la base de datos se vuelve demasiado grande o es necesario actualizar más de un proceso, por lo que no está preparado para el futuro.

En esencia, está hablando de una solución de almacenamiento en caché, por lo que no es necesario reinventar la rueda, muchos de esos productos/soluciones que podría usar.

Probablemente no sea la forma tradicional de hacer las cosas, pero si funciona, ¿por qué no?

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