sql >> Base de Datos >  >> NoSQL >> MongoDB

Concurrencia en gopkg.in/mgo.v2 (Mongo, Go)

La mgo.Session es seguro para uso concurrente. Citando de su documento:

Todos los métodos de sesión son seguros para la concurrencia y se pueden llamar desde varias rutinas.

Pero esto no significa que no deba crear y usar más de ellos en paralelo, llamando a Session.Copy() o Session.Clone() , en la sesión inicial obtenida en el momento de la marcación.

Ser seguro para la concurrencia y tener el beneficio de usar más de ellos no se excluyen entre sí (no son mutuamente excluyentes) ). Si bien puede usar una sola mgo.Session de un número arbitrario de goroutines, que no escalarán bien, que no escalarán en absoluto . Las sesiones administran automáticamente un grupo de conexiones, tal vez incluso a varios nodos de servidor, pero si está utilizando una sola Session , no te estás aprovechando de eso. Creando una nueva Session al comienzo de cada una de sus solicitudes (si es necesario) y cerrándola correctamente al final (con Session.Close(); preferiblemente llamado usando defer ), está aprovechando potencialmente el uso de múltiples conexiones al mismo tiempo, posiblemente a múltiples nodos de servidor (si están disponibles) y, por lo tanto, utiliza mejor los recursos del servidor; y obtener tiempos de respuesta más rápidos (tanto de la base de datos como, en última instancia, para sus usuarios finales de HTTP). Llamando a Session.Close() no cierra la conexión subyacente con el servidor, simplemente vuelve a poner la conexión en el grupo, lista para que la recoja otra sesión.

Consulte también la pregunta relacionada sobre el uso de Session s:mgo:el rendimiento de las consultas parece ser constantemente lento (500-650 ms)