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

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

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 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