2

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;
}

私の質問は、これが効率的な設計なのか、それともどうすれば改善できるのかということです。

どうもありがとう。

4

1 に答える 1

1

Mongo(またはドライバー)が私たちのためにいくつかのことを処理すると信じているので、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ご覧のとおり、必要な接続文字列とDB名を指定するために使用するDTOはほんの少しです。これを機能と組み合わせるとMongoServer.Create、同じ実行コードベースから複数のデータベースへの接続を非常に簡単に処理できます。

public interface IMongoConfig
    {
        string ConnectionString { get; set; }
        string DatabaseName { get; set; }
    }
于 2013-02-15T15:56:58.000 に答える