MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Simultaneidade em gopkg.in/mgo.v2 (Mongo, Go)


A mgo.Session é seguro para uso simultâneo. Citando seu doc:

Todos os métodos Session são seguros de simultaneidade e podem ser chamados de várias goroutines.

Mas isso não significa que você não deva criar e usar mais deles em paralelo, chamando Session.Copy() ou Session.Clone() , na sessão inicial obtida no tempo de discagem.

Ser seguro de simultaneidade e ter o benefício de usar mais deles não excluem uns aos outros (eles não são mutuamente exclusivos ). Embora você possa usar um único mgo.Session a partir de um número arbitrário de goroutines, que não serão dimensionadas bem, que não serão de forma alguma . As sessões gerenciam automaticamente um pool de conexões, talvez até mesmo para vários nós de servidor, mas se você estiver usando uma única Session , você não está aproveitando isso. Ao criar uma nova Session no início de cada solicitação (se necessário) e fechando-a corretamente no final (com Session.Close(); preferencialmente chamado usando defer ), você está aproveitando potencialmente o uso de várias conexões ao mesmo tempo, possivelmente para vários nós de servidor (se disponíveis) e, portanto, utilizando melhor os recursos do servidor; e obter tempos de resposta mais rápidos (tanto do banco de dados quanto para seus usuários finais HTTP). Chamando Session.Close() não fecha a conexão subjacente ao servidor, ele apenas coloca a conexão de volta ao pool, pronta para ser captada por outra sessão.

Veja também a pergunta relacionada sobre o uso de Session s:mgo - o desempenho da consulta parece consistentemente lento (500-650ms)