MongoDb Find () FullScan с индексом - PullRequest
1 голос
/ 22 августа 2011

In mongo db

> show dbs
admin   (empty)
data    23.9423828125GB
local   (empty)

У меня есть таблица с индексом:

> db.XXX.count();
80089670

C #:

voteCol.EnsureIndex("({ YYY:1 })");

Когда я делаю запрос сдрайвер C #:

MongoCollection<BsonDocument> voteCol = database.GetCollection<BsonDocument>("XXX");
var query = new QueryDocument("YYY", DataUtils.getItemInPollIdList());
MongoCursor<BsonDocument> cursor =      voteCol.Find(query).SetSortOrder(SortBy.Descending("ZZZ")).SetLimit(10).SetSkip(20);

Время выполнения для этой части кода близко к 0.

Тогда, когда я пытаюсь получить размер курсора

cursor.Size();

Я получил тайм-аут.

Невозможно прочитать данные из транспортного соединения: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, так какподключенному хосту не удалось ответить.

В журнале Mongo

Пн 22 августа 10:08:50 [conn9] запрос данных.: 80089670 {ГГГГ: "1482092"} возвращено: 0 48935мс

Что это может быть?Когда запрос действительно выполняется?Почему я не могу получить результаты?

Редактировать 1: Добавлен новый индекс

Пн 22 августа 10:17:38 [conn12] построение нового индекса на {({YYY:-1}): 1} для data.XXX

            4000000/80089670        4%
            7866400/80089670        9%
            11403000/80089670       14%
            15000000/80089670       18%
            19000000/80089670       23%
            22988600/80089670       28%
            26454700/80089670       33%
            30000000/80089670       37%
            33438600/80089670       41%
            37000000/80089670       46%
            40810600/80089670       50%
            44132200/80089670       55%
            48000000/80089670       59%
            52000000/80089670       64%
            55618300/80089670       69%
            59000000/80089670       73%
            62170100/80089670       77%
            66000000/80089670       82%
            70000000/80089670       87%
            74000000/80089670       92%
            77874500/80089670       97%

Даже с новым индексом - та же проблема: оболочка Mongo:

> printjson(db.XXX.findOne({YYY:"1517077"}));

MongoLog

Mon Aug 22 10:33:40 [conn4] query data.XXX ntoreturn:1 reslen:36 nscanned:80089670 { YYY: "1517077" }  nreturned:0 48751ms

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Я сделал ошибку - все чувствительно к регистру в mongoDb.

Я добавил индекс на yyy вместо YYY.

Нет предупреждающего сообщения, даже если у меня нет имениyyy в таблице и индекс был успешно создан: (.

Я заново создал индекс для правильного имени столбца. Теперь все быстро.

1 голос
/ 22 августа 2011

размер курсора возвращает его размер в байтах. Для предотвращения всех проверок вас должно заинтересовать количество документов. Используйте этот фрагмент:

collection.FindAll().Count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...