Массовое чтение в петле пимонго - PullRequest
0 голосов
/ 25 октября 2019

в настоящее время, используя pymongo, я перебираю очень большую коллекцию mongodb, например:

client = MongoClient(config.get('db','url'))
db=client.mydatabase
incomings = db.incoming.find()

for incoming in incomings:
    do something with incoming

Вместо этого, при каждой итерации цикла я хотел бы прочитать определенное количество диктов / документов водин раз, так что я не буду получать диктат после диктата из базы данных, а скорее набор диктов, как это: [{...},{...},{...},...]

Я стремлюсь уменьшить нагрузку на базу данных. Если с использованием курсора это уже идеально, то я согласен с моим текущим решением.

Кстати, входящая коллекция обрабатывается сотнями документов в секунду, она служит постоянным буфером для входящих сообщений zmq.

Можете ли вы дать мне какие-либо соображения по улучшению производительности, особенно для моего случая, когда поступает и выходит много данных?

При хранении данных я уже буферизую, используя insert_many вместо отдельных вставок, и, конечно, данные покидают коллекцию с помощью delete_many.

1 Ответ

1 голос
/ 25 октября 2019

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

...