2013-02-15 157 views
2

我想知道創建/關閉MongoDb連接的最有效方法。MongoDb創建高效連接

我有一組RESTful服務(使用C#創建的),他們中的一些獲得的數據形成的MongoDB和一些POST數據。

public static MongoDatabase GetDatabase() 
    { 
     MongoServerSettings settings = new MongoServerSettings(); 
     settings.Server = new MongoServerAddress("localhost", 27017); 
     MongoServer server = new MongoServer(settings); 
     var database = server.GetDatabase("RapidDataStream"); 
     return database; 
    } 

我用上面的連接形成我的每一個服務,爲例如一個列出所有傳感器的服務。

public List<Sensor> getPublicSensors() 
{ 
      List<Sensor> sensors = new List<Sensor>(); 
      MongoDatabase mySensor = GetDatabase(); 
      var query = Query.And(Query.EQ("User", BsonValue.Create("Public"))); 
      var mySensorRecords = mySensor.GetCollection("sensor_meta_data").Find(query); 
      DataSet ds = new DataSet(); 

      foreach (var rec in mySensorRecords) 
      { 
       Sensor sensor = new Sensor(); 
       sensor.sensorId = rec["EnvId"].ToString(); 

       for (int i = 2; i < rec.ElementCount; i++) 
       { 
        SensorObject so = new SensorObject(); 
        so.fieldName = rec.GetElement(i).Name.ToString(); 
        so.value = rec.GetElement(i).Value.ToString(); 
        sensor.sensorObject.Add(so); 
       } 
       sensors.Add(sensor); 
      } 
      return sensors; 
} 

我的問題是,這是否是一種有效的設計,否則我該如何改進?

很多謝謝。

+0

其中之一,我沒有看到任何處置。我不知道MongoDB,但是安全嗎? – usr 2013-02-15 15:52:31

+1

如果答案有幫助,並且您認爲它有道理,請考慮將其標記爲答案;) – baldric 2013-02-15 17:29:39

回答

1

我相信蒙戈(或驅動程序)處理一些事情對我們來說,所以我使用Create方法:

MongoServer.Create(....) 

,而不是創建一個新的實例。 Create方法將創建一個新實例或返回一個現有實例(每個服務器設置都是唯一的)。

事實上,就在向你展示實際的方法我目前使用的:

internal static MongoDatabase DB(IMongoConfig config) 
{ 
    return MongoServer 
      .Create(config.ConnectionString) //This bit is getting the MongoServer 
      .GetDatabase(config.DatabaseName); //This bit gets the Database, which is returned 
} 

IMongoConfig只是一個小DTO我來指定,你可以看到,連接字符串和數據庫的名字,我需要 - 這結合MongoServer.Create的工作,可以很容易地處理來自同一個運行代碼庫的多個數據庫的連接。

public interface IMongoConfig 
    { 
     string ConnectionString { get; set; } 
     string DatabaseName { get; set; } 
    } 
+0

感謝您的答覆.Doesnt MongoServer.Create返回MongoServer對象? – DafaDil 2013-02-15 16:27:29

+0

是的,我特別提到它,因爲(如果我正確理解Mongo文檔)是善良發生的地方。您可能會對我的第二個代碼塊更感興趣,我使用它返回實際的MongoDatabase - 在一天結束時,我們的代碼與所有意圖和用途非常相似,主要區別在於MongoServer如何實現化簡 – baldric 2013-02-15 16:32:00

+0

對不起但我還是不明白的是,你的函數如何返回一個MongoDatabase類型並返回一個MongoServer對象(你的第二個代碼塊) – DafaDil 2013-02-15 16:38:49