8

soy muy nuevo en MongoDB y NoSQL en general y Acabo de comenzar la construcción de un sitio con MongoDB/Norma/ASP.NET MVC 3.¿Cuándo debería abrir y cerrar las conexiones de MongoDB?

Me pregunto cómo yo debería ser la determinación del alcance de las conexiones a mi base de datos Mongo .

Ahora tengo un controlador de base que instancia MongoSession y onActionExecuted lo desecho para que todos mis controladores derivados tengan acceso a mi MongoSession. La clase MongoSession abre una conexión en su constructor y la descarta en Dispose(), la forma en que está funcionando hoy.

private IMongo _mongo; 

public MongoSession() 
{   
    _mongo = Mongo.Create("connString");  
} 

public void Dispose() 
{ 
    _mongo.Dispose(); 
} 

Estoy un poco preocupado de que pueda estar manteniendo las conexiones abiertas demasiado tiempo si estoy haciendo otras cosas también en los controladores.

¿Es ese enfoque suficiente para no arriesgar la celebración de demasiadas conexiones abiertas o debería hacer algo más como el siguiente método de ejemplo?

public void Add<T>(T item) where T : class, new() 
    { 
     using (var mongo = Mongo.Create("connString")) 
     { 
     mongo.GetCollection<T>().Insert(item); 
     } 
    } 

Otra seguimiento pregunta es:

se están abriendo y cerrando las conexiones a través de MongoDB Norma operaciones "caros"?

+0

Norma apenas se mantiene más, si quieres soporte LINQ ir con conductor mongo funcionario de FluentMongo en la parte superior de la misma. –

+0

Además de esta cuestión de abrir y cerrar conexiones en el código, tuve problemas con las conexiones de cierre del proveedor de Internet, entonces mi código tenía EndOfStreamException. Lo resolví usando settings.MaxConnectionIdleTime = TimeSpan.FromSeconds (30); https://stackoverflow.com/a/44606284/194717 – Tony

Respuesta

8

Dejaría la conexión abierta ya que volver a crear la conexión es costoso. Mongo está bien, con muchas conexiones abiertas durante mucho tiempo. Lo que idealmente debería hacer es compartir la conexión con todas las partes de su aplicación como una conexión persistente. El controlador C# debe ser lo suficientemente inteligente como para hacerlo por sí mismo, de modo que no cree demasiadas conexiones, ya que internamente utiliza "agrupación de conexiones" que lo hace incluso reutilizar las conexiones. Los documentos dicen: "Las conexiones con el servidor se manejan automáticamente detrás de las escenas (un grupo de conexiones se usa para aumentar la eficiencia)".

aplausos, Derick

+1

De acuerdo. De hecho, ni siquiera necesita escribir una clase MongoSession: sería apropiado almacenar una instancia de MongoServer en el ámbito de la aplicación. Casi con certeza debe llamar a Disconnect() en esta instancia solo una vez, cuando la aplicación MVC se cierre. –

+0

@Sean Gracias por la información sobre cuándo cerrar las conexiones. El enlace –

2

usted no necesita llamar a conectar o desconectar

El controlador C# tiene un pool de conexiones a utilizar conexiones al servidor de manera eficiente. No es necesario llamar a Connect o Disconnect; simplemente deje que el controlador se encargue de las conexiones (llamar a Connect es inofensivo, pero llamar a Disconnect es malo porque cierra todas las conexiones en el conjunto de conexiones).

http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/

+0

(ahora) no menciona nada, es solo una página principal de varios otros. – danio

Cuestiones relacionadas