Производительность подсчета MongoDB очень низкая

#performance #mongodb #mongodb-.net-driver #mongodb-query

#Производительность #mongodb #mongodb-.net-driver #mongodb-запрос

Вопрос:

Мы находимся на версии Mongodb: 2.4.9

Похоже, в 2.3.2 была исправлена проблема с подсчетом

https://jira.mongodb.org/browse/SERVER-1752

Но все же моя операция подсчета выполняется очень медленно, я не могу выполнить разбивку на страницы только из-за того, что операция подсчета занимает около 10 секунд для 3,5 миллионов записей.

У кого-нибудь есть идея по этому поводу?

Редактировать

Explain() приводит к:

 {

    "cursor" : "BtreeCursor by_dateCreated",
    "isMultiKey" : false,
    "n" : 143736,
    "nscannedObjects" : 2893069,
    "nscanned" : 2893069,
    "nscannedObjectsAllPlans" : 2904859,
    "nscannedAllPlans" : 2904859,
    "scanAndOrder" : false,
    "indexOnly" : false,
    "nYields" : 135,
    "nChunkSkips" : 0,
    "millis" : 117730,
    "indexBounds" : {
        "DateCreated" : [[ISODate("2014-06-24T13:36:26.952Z"), ISODate("2013-08-28T13:36:26.952Z")]]
    },
}
  

Правка2

Запрос (я использую драйвер C #, предоставленный MongoDB)

 var entities2 = (from e in this.collection.AsQueryable<SocialRecord>()
                 where (e.DateCreated >= fr) amp;amp; (e.DateCreated <= to) 
                 amp;amp; bArray.Contains(e.TermMonitorIds) 
                 amp;amp;(sources.Contains(e.SocialType))
                 select e).OrderByDescending(e => e.DateCreated);
return entities2.Count();
  

Правка3

Структура документа:

 {
    "_id" : ObjectId("53a456b27f781d19f40ac76c"),
    "DateCreated" : ISODate("2014-06-20T15:35:56.000Z"),
    "SocialType" : "facebook",
    "RecordId" : "1474971936_10202431655820767",
    "UserId" : "1474971936",
    "UserProfileUrl" : "",
    "UserProfilePictureUrl" : "/Downloads/v3/432bfeb8-901e-45a4-b739-1f3f48b69d61/facebook/2014-6/1946689/10492432_10202426005479512_740185019259071925_t.jpg",
    "Description" : "",
    "MediaHiResUrl" : "",
    "MediaLowResUrl" : "",
    "MediaMedResUrl" : "",
    "SocialCount" : NumberLong(354),
    "SocialCountType" : "likes",
    "Sentiment" : "",
    "SentimentScore" : "0.0000000",
    "IsLocalContent" : true,
    "IsExactMatch" : true,
    "IsHashTag" : false,
    "IsActive" : false,
    "MediaType" : "image",
    "TermMonitorIds" : [ 
        "432bfeb8-901e-45a4-b739-1f3f48b69d61"
    ],
    "UserName" : "",
    "DisplayName" : "",
    "DirectUrl" : "",
    "IsUk" : true,
    "IsEnglish" : true,
    "Language" : "en",
    "Location" : "GB",
    "DataVersion" : "v3"
}
  

Когда я пытаюсь создать составной индекс для by_dateCreated_termMointerIds_socialType, как показано ниже

 {
    "DateCreated" : -1,
    "SocialType" : 1,
    "TermMonitorIds" : 1
}
  

Это еще больше замедляет выполнение запроса Count.

Datecreated — это поле, которое сильно сужает поиск. Поэтому я оставил его с одним индексом в Datecreated.

Комментарии:

1. Не могли бы вы уточнить, что вы считаете? Все документы в коллекции или есть запрос?

2. Как говорит @PeteGarafano, запрос, пример и объяснение будут иметь большое значение. Но подсчет в MongoDB может быть немного медленным, поскольку btree не ведет подсчет своих частей как таковых, он должен их подсчитывать

3. я пытаюсь выполнить разбивку на страницы, у меня есть IQueryable, который пропускает и принимает данные, но мне нужно знать количество записей, чтобы знать, сколько номеров страниц отображать в представлении.

4. @DheerajPalagiri тогда вам нужно показать нам инструкцию LINQ или вызов . Объясните в запросе. Что-то вроде этого new MongoClient().GetServer().GetDatabase("MyDb").GetCollection("MyCol").Find(new QueryDocument()).Explain() , если вы используете LINQ, вы можете вызвать. Объясните возвращаемый курсор.

5. Насколько я знаю, подсчет записей очень сильно зависит от тактовой частоты вашего процессора.

Ответ №1:

Я использовал монго-драйвер для .net core и мой метод счетчика;

 var result = collection.CountDocuments(_ => true);
  

ссылка на использование: https://docs.mongodb.com/manual/reference/method/db.collection.countDocuments/