Quand devrais-je être d'ouverture et de fermeture MongoDB connexions?
je suis très nouveau à MongoDB et NoSQL, en général, et je viens de commencer la construction d'un site avec MongoDB /Norme /ASP.NET MVC 3.
Je me demande comment je doit être portée aux connexions à ma base de données Mongo.
Droit maintenant, j'ai un Basecontroller instanciant la MongoSession et onActionExecuted-je me débarrasser d'elle de sorte que tous mes découlant des contrôleurs auront accès à mon MongoSession. Le MongoSession classe ouvre une connexion à son constructeur et l'envoie sur Dispose(), la façon dont il fonctionne aujourd'hui.
private IMongo _mongo;
public MongoSession()
{
_mongo = Mongo.Create("connString");
}
public void Dispose()
{
_mongo.Dispose();
}
Je suis un peu inquiet, il pourrait être tenue de connexions ouvertes trop longtemps si je fais d'autres trucs aussi dans les contrôleurs.
Est cette approche assez pour ne pas risquer de portefeuille trop grand nombre de connexions ouvertes ou devrais-je faire quelque chose de plus comme l'exemple de la méthode ci-dessous?
public void Add<T>(T item) where T : class, new()
{
using (var mongo = Mongo.Create("connString"))
{
mongo.GetCollection<T>().Insert(item);
}
}
Une autre question de suivi est:
Sont l'ouverture et la fermeture MongoDB connexions grâce à la Norme "cher" opérations?
- La norme est guère plus maintenu, si vous voulez le support LINQ aller avec officiel mongo pilote avec FluentMongo sur le dessus de cela.
- À côté de cette question de l'ouverture et de la fermeture des connexions sur le code, j'ai eu des problèmes avec le fournisseur d'accès internet fermeture des connexions, puis mon code EndOfStreamException. Je l'ai résolu en utilisant les paramètres.MaxConnectionIdleTime = TimeSpan.FromSeconds(30); stackoverflow.com/a/44606284/194717
Vous devez vous connecter pour publier un commentaire.
Je voudrais laisser la connexion ouverte comme la re-création de la connexion est coûteux. Mongo est très bien avec beaucoup de connexions, ouvert pendant une longue période. Ce qu'idéalement, vous devriez faire est de partager la connexion avec toutes les parties de votre application comme une connexion persistante. Le C#, le conducteur devrait être assez intelligents pour le faire lui-même, afin de ne pas créer un trop grand nombre de connexions, en interne, il utilise la connexion "mise en commun", ce qui en fait re-utiliser des connexions. Les docs disent: "Les connexions au serveur sont gérés automatiquement en coulisses (un pool de connexion est utilisée pour augmenter l'efficacité)."
cheers,
Derick
Vous N'avez PAS Besoin d'Appeler Connecter ou de Déconnecter
Le C# pilote a un pool de connexion à utiliser des connexions au serveur de manière efficace. Il n'est pas nécessaire d'appeler Connecter ou de Déconnecter; il suffit de laisser le pilote de prendre soin de connexions (appel Connect est inoffensif, mais en l'appelant Débranchez est mauvais parce qu'il ferme toutes les connexions dans le pool de connexion).
http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/