MongoDB 建立索引 及 Count查詢 C#
阿新 • • 發佈:2021-07-18
十年河東,十年河西,莫欺少年窮
學無止境,精益求精
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/101033765 和https://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的效能在此不多說。
@天才臥龍的部落格
付婷,你還那麼胖嗎?如果胖,就減肥肥吧。