1. 程式人生 > 其它 >MongoDB 建立索引 及 Count查詢 C#

MongoDB 建立索引 及 Count查詢 C#

十年河東,十年河西,莫欺少年窮

學無止境,精益求精

MongoDB 建立索引,需要引入第三方DLL檔案:mongocsharpdriver ,這個可以通過NuGet來完成

Mongodb 在百萬條資料時,查詢效能就會很低,我公司的資料庫當資料量達到400萬條資料時,查詢大概需要10秒左右時間,這顯然是不能接收的,那麼我們通過建立MongoDB 索引來解決。

實戰的結果是:加了索引後,查詢效能顯著提高,提高了幾十倍,由原來的10秒變成了400毫秒不到。

當然,如果你的資料表中只有很少的資料。例如十萬條資料。或者十萬級以下,在這種情況下建立索引對效能的提升不大顯著。

C# 建立索引程式碼如下:

        [Obsolete]
        
public static void CreateBatteryHeartIndex() { var DatabaseName = new Battery2gHeartService().GetBatteryHeartDataBaseName(); LogstoreDatabaseSettings settings = new LogstoreDatabaseSettings() { LogsCollectionName = CommEnum.MongoDb2gBatteryEnm.BatteryHeart2gData.ToString(), DatabaseName = DatabaseName };
var client = new MongoClient(settings.ConnectionString); MongoDatabase mongoDatabase = client.GetServer().GetDatabase(settings.DatabaseName); var datacollection = mongoDatabase.GetCollection(settings.LogsCollectionName); var allindex = datacollection.GetIndexes();
///BatterySN_1_BmsStatus_1_CreateTime_-1_SOC_1 if (!datacollection.IndexExistsByName("BatterySN_1_BmsStatus_1_CreateTime_-1_SOC_1")) { var as_index = new IndexKeysBuilder(); as_index.Ascending("BatterySN"); as_index.Ascending("BmsStatus"); as_index.Descending("CreateTime"); as_index.Ascending("SOC"); datacollection.CreateIndex(as_index); } }

執行上述程式碼,建立的索引如下:

該方法針對建立的索引的命名規則為:名稱加下劃線加正序/倒序

其中正序為1 倒序為-1

因此:上述程式碼中的索引名稱為:BatterySN_1_BmsStatus_1_CreateTime_-1_SOC_1

除了建立查詢索引,它還支援建立其他索引,譬如:唯一性索引:unique,等

具體可參考:https://blog.csdn.net/chym18845095620/article/details/101033765https://www.cnblogs.com/chenzibai/p/14719430.html

下面簡單看下MongoDB linq查詢的計數問題

這個沒什麼好說的,程式碼如下:

        public BaseResponse<ExbatModel> SearchExbatPercentage(ReadCabinetIotLogModel data)
        {
            CabinetIotLogModel cabinet = new CabinetIotLogModel();
            LogstoreDatabaseSettings settings = new LogstoreDatabaseSettings() { LogsCollectionName = CommEnum.MongoDbnameEnm.IotLogs.ToString(), DatabaseName = DatabaseName + DateTime.Now.ToString("yyyyMMdd") };
            if (!string.IsNullOrEmpty(data.TbDate))
            {
                settings.DatabaseName = DatabaseNamePrefix + Convert.ToDateTime(data.TbDate).ToString("yyyyMMdd");
            }
            var client = new MongoClient(settings.ConnectionString);
            var database = client.GetDatabase(settings.DatabaseName);

            var Mongo = database.GetCollection<IotLogs>(settings.LogsCollectionName);
            ExbatModel model = new ExbatModel();
            model.TotalExbattRequest = Mongo.AsQueryable().Count(A => A.MethodName == "exbattrequest");
            model.SuccessExbatt = Mongo.AsQueryable().Count(A => A.MethodName == "exbatt" && A.Rst == 0);
            model.ExbattCmdFiled = Mongo.AsQueryable().Count(A => A.MethodName == "exbatt" && A.Rst != 0);
            return CommonBaseResponse.SetResponse<ExbatModel>(model,true);
        }

計數Count的效能在此不多說。

@天才臥龍的部落格

付婷,你還那麼胖嗎?如果胖,就減肥肥吧。