Запрос MongoDB _id на ограниченную коллекцию без индекса _id, производительность будет низкой - PullRequest
1 голос
/ 02 марта 2012

я создаю ограниченную коллекцию (crawl02) и создаю индекс для этой ограниченной.

> db.system.indexes.find()
{ "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.crawl02", "name" : "_id_" }

при запуске приложения и закрытой коллекции запроса MongoDB Log ВСЕГДА выводит следующий журнал:

[conn2] warning: _id query on capped collection without an _id index, performance will be poor collection: test.crawl02.

мой оператор кода для запроса закрытой коллекции (c #)

 var cursor = this.QueueCollection    //crawl02
           .Find(Query.GT("_id", this._lastId))
           .SetFlags(QueryFlags.AwaitData |QueryFlags.TailableCursor 
                    | QueryFlags.NoCursorTimeout)
           .SetSortOrder(SortBy.Ascending("$natural"));
 return (MongoCursorEnumerator<QueueMessage<T>>)cursor.GetEnumerator();

чтение сообщения о переменной курсора:

while(true){
   if (this._cursor.MoveNext())
      return this._currsor.Current;
   else
      return null
}

Я не понимаю, почему у mongodb crawl02 нет индекса.

=================================== по обновлению

хорошо, я нашел статью о настраиваемых курсорах на веб-сайте офиса MongoDB , сообщение:

Tailable cursors are only allowed on capped collections and can only return objects in natural order. Tailable queries never use indexes.

это из-за предупреждения журнала mongodb?Tailable queries never use indexes.??

=================== обновление 2 извините, я забыл предупреждение журнала mongodb о test.crawl02, я изменился.

1 Ответ

1 голос
/ 06 марта 2012

Ошибка говорит о том, что у вас нет индекса на test.crawl01. Это правильно. Когда ты делаешь db.system.indexes.find() у вас есть индекс в поле _id test.crawl02, а не test.crawl01 Создайте индекс для test.crawl01.

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