2016-10-25 1 views
0

У меня есть функция, которая работает с одной коллекцией, рекурсивно выполняя две агрегации, а затем обновляя документы. Все мои индексы верны.Любой способ «дросселировать» функцию Python/Mongo

На данный момент я не могу реорганизовать этот код, и когда функция запускается, он мошенничает Mongo в течение 10 минут для обработки данных. Кажется, растет на основе размера коллекции, составляя в среднем около 60 секунд для каждого дополнительного 3k документов. Эта коллекция может вырасти до сотен тысяч документов. (Документы невелики - около 10 клавиш с очень маленькими значениями каждый.)

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

Вопрос в том, есть ли способ сообщить mongo, чтобы ограничить процессор, который он предоставляет для операции? Или я должен обратиться к дросселю в Python, используя sleep или какой-либо другой метод?

ответ

0

рекурсивно делает два агрегирование, то обновление документов

Похоже, что вы должны рассмотреть повторно модель вашей схемы. Гибкость схемы документов MongoDB - это то, что нужно для оптимизации вашего процесса. См. MongoDB: Data Modeling для получения дополнительной информации, примеров и шаблонов.

Вопрос в том, есть ли способ сказать mongo ограничить процессор, который он предоставляет для операции?

Компания MongoDB не имеет возможности ограничить использование ЦП на операцию. Эта функция может не иметь смысла в распределенной форме. Например, предел 1 CPU для операции, которая охватывает несколько осколков, может быть не такой простой и желательной.

В качестве альтернативы, в зависимости от вашего варианта использования, если функция не должна быть в режиме реального времени, вы можете использовать вторичный read-preference. По существу, направляя запланированные отчеты второму члену, позволяя первичному обрабатывать другие данные.

Обязательно прочитайте pros и cons этой дополнительной информации.

См. Также MongoDB Replication