相关疑难解决方法(0)

我什么时候应该打开和关闭MongoDB连接?

我对MongoDB和NoSQL很新,我刚刚开始使用MongoDB/Norm/ASP.NET MVC 3构建一个站点.

我想知道我应该如何确定与Mongo数据库的连接.

现在我有一个Basecontroller,它实现了MongoSession和onActionExecuted我处理它所以我所有的派生控制器都可以访问我的MongoSession.MongoSession类在其构造函数中打开一个连接,并将它放在Dispose()上,就像它今天的工作方式一样.

private IMongo _mongo;

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

public void Dispose()
{
    _mongo.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

如果我在控制器中做其他事情,我有点担心它可能会持续打开太长时间.

这种方法是否应该不会冒太多连接的风险,或者我应该做更像下面的示例方法?

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

另一个跟进问题是:

通过Norm"昂贵"操作打开和关闭MongoDB连接?

database-connection scoping mongodb norm mongodb-.net-driver

11
推荐指数
1
解决办法
1万
查看次数

MongoDB是线程安全的吗?

我在Windows上运行MongoDB.我有一个或多个线程删除并重新创建一个集合.

使用mongo.exeshow collections()命令,我看到名称相同的多个集合(超过1000个集的同名!).

当我运行验证时:

> db.MY_COLLECTION.validate()
Run Code Online (Sandbox Code Playgroud)

我明白了:

{ "errmsg" : "ns not found", "ok" : 0, "valid" : false }
Run Code Online (Sandbox Code Playgroud)

size()命令返回0,并且不find()返回任何内容.

我的问题是:MongoDB线程安全吗?接下来的问题将是"我是否正确地执行此操作(删除和重新创建),还是有更好的方法来刷新集合的整个内容?"

concurrency multithreading thread-safety mongodb document-database

9
推荐指数
2
解决办法
1万
查看次数

Web API 2.0 方法中的内存泄漏

我们的项目中有一个webAPI,它非常简单,但它在执行后不会释放内存,每次执行时都会增加使用的内存。

我使用 webAPI 2.0 和 MongoDB 作为后端服务器。

public class LogsController:ApiController
{
    BsonDocument __docs;
    IMongoDatabase __db;
    IMongoCollection<BsonDocument> __docsColl;
    [Route("api/Logs")]
    public async Task<int> Post(RequestData logs)
    {
        if (logs.Token == "I")
        {
            __db = new MongoClient(new MongoClientSettings
            {
                Server = new MongoServerAddress("serverIP", 27017),
                Credentials = new[] { MongoCredential.CreateCredential("database", "user name", "password") }
            }).GetDatabase("connect_database");

            __docs = new BsonDocument()
            {
                { "Customer",logs.Customer}
            };
            __docsColl = __db.GetCollection<BsonDocument>("InsertData");
            await __docsColl.InsertOneAsync(__docs);
        }
        logs = null;
        return 1;
    }

    protected override void Dispose(bool disposing)
    {
        __docs = null;
        __db …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-4 asp.net-web-api asp.net-web-api2 mongodb-.net-driver

2
推荐指数
1
解决办法
3167
查看次数