Supposons que j'ai une instance mongodb sur un serveur distant (1 processeur central et mémoire 8G).
Lorsque j'envoie une simple requête db.table.find ({_ id: ObjectId ('xxx')}). Limit (1) .explain () à l'instance, j'ai obtenu le résultat montrent cette requête coûte 10ms.
Alors, puis-je conclure que "mon serveur mongodb ne peut gérer que 100 requêtes simples par seconde"?
3 Réponses :
Vous devez savoir que votre serveur mongodb peut gérer de nombreuses requêtes parallèles.
votre hypothèse est incorrecte, car vous ignorez le fait que mongodb prend en charge la concurrence
"Alors puis-je arriver à la conclusion que" mon serveur mongodb ne peut gérer que 100 requêtes simples par seconde ""
Ce n'est pas comme ça qu'une requête prend 10 ms puis 100 requêtes prendront 1 seconde
db.table.find ({_ id: ObjectId ('xxx')}). limit (1) ne verrouille pas votre table
Donc, si vos 100 clients le demandent avec 100 connexions, tous reviendront dans 10 ms
La concurrence dépend des verrous et des limites de connexion
Si une collection de verrouillage de requête en lecture et en écriture pendant 10 secondes, toutes les requêtes après cela attendront que le verrouillage soit effacé
MongoDb peut gérer Requête multiple
db.runCommand ({serverStatus: 1}) retournera le statut actuel de mongo il y a un objet dans
"connections" : {
"current" : <num>,
"available" : <num>,
"totalCreated" : <num>,
"active" : <num>
}
https://docs.mongodb.com/manual/reference/command/serverStatus/#connections
https://docs.mongodb.com/manual/reference/configuration-options/#net.maxIncomingConnections
https://docs.mongodb.com/manual/faq/ concurrence /
Cela donnera plus de clarté sur les connexions et ses limites
Comment avez-vous chronométré cela, à partir du serveur Web? Ensuite, cela inclurait le temps nécessaire pour transmettre et traiter les données au service Web ainsi que toute latence du réseau en fonction de leur position par rapport à l'autre.