MongoDB: подсчет документов в многодокументных транзакциях - PullRequest
0 голосов
/ 31 января 2019

Я видел, что estimatedDocumentCount() может получить противоречивые результаты в определенных случаях.С другой стороны, countDocuments() всегда будет точным, но это также будет стоить дороже.

Итак, какие были бы хорошие варианты использования, в которых estimatedDocumentCount() предпочтительнее, чем countDocuments()?Сколько производительности мы теряем при использовании countDocuments() по сравнению с другим методом?А также, каков «безопасный способ» использования estimatedDocumentCount()?

Я хотел бы сравнить эти два метода в контексте многодокументных транзакций, чтобы решить, какие использовать и в каких сценариях.

1 Ответ

0 голосов
/ 09 февраля 2019

В зависимости от варианта использования «дороже» может означать, к сожалению, «сбой базы данных».

estimatedDocumentCount() просто считывает метаданные из коллекции;это настолько близко к нулевой стоимости, насколько это возможно.countDocuments(), с другой стороны, ну, на самом деле, считает документы, как следует из названия.На данный момент это более точно, если это то, что вам нужно.

Тем не менее, нужно очень хорошо понимать патологическую природу формы без фильтра (то есть, запрос {}) формы countDocuments(),В случае очень большой коллекции, например, миллиардов документов, вы первым делом поймете, что это неправильный выбор, когда кластер баз данных испытывает каскадный сбой, когда серверы сами попадают в землю.

Таким образом,Я бы сказал, что ваш вопрос задом наперед;вызов estimatedDocumentCount() всегда по своей природе безопасен с точки зрения вряд ли поставит ваше окружение на колени , с оговоркой, что вы смотрите на метаданные там, так что в определенных сценарияхкластеры и т. д.), это может быть немного неточно.Однако реально, в среде, где вы развернули Mongo, все всегда будет «немного неточным»;т. е. любой счет, который я получаю в этот момент, в любом случае, скорее всего, будет неточным в данный момент.

Напротив, форма без фильтра countDocuments() по своей сути небезопасна, и при первом вызове еегигантская коллекция станет мощным учебным опытом для O(1) против O(N).

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