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.
Realmente no veo por qué no, siempre que sepa lo siguiente:
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?