Ускорение разбора ОГРОМНЫХ списков словарей - Python - PullRequest
0 голосов
/ 25 июля 2010

Я использую MongoDB базу данных nosql. По сути, в результате запроса у меня есть список диктов, который сам содержит списки словарей ... с которыми мне нужно работать .

К сожалению, обработка всех этих данных в Python может быть доведена до сканирования , когда данных слишком много.


Мне никогда не приходилось сталкиваться с этой проблемой, и было бы здорово, если бы кто-то с опытом мог дать несколько советов. =)

Ответы [ 3 ]

3 голосов
/ 26 июля 2010

Вы действительно хотите, чтобы все эти данные вернулись в вашу программу Python? Если это так, извлекайте его постепенно, но если все, что вам нужно, это суммировать данные, то используйте mapreduce в MongoDB для распределения обработки и просто возвращайте суммированные данные.

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

1 голос
/ 26 июля 2010

Если ЦП является вашим узким местом (и ваша проблема может быть распараллелена), вы также можете рассмотреть возможность использования multiprocessing модуля Python , Диско-проекта или Parallel Python использовать несколько ядер и / или несколько машин.

1 голос
/ 26 июля 2010

Загружаете ли вы все данные в память одновременно? Если это так, вы можете заставить ОС переставлять память на диск, что может привести к сканированию любой системы. Словари являются хеш-таблицами, так что даже пустой dict будет занимать много памяти, и из того, что вы говорите, вы создаете много из них одновременно. Я не знаю API MongoDB, но я предполагаю, что есть способ перебирать результаты по одному за раз вместо чтения всего набора результатов за раз - попробуйте использовать это. Или перепишите запрос, чтобы получить подмножество данных.

Если замена диска не является проблемой, профилируйте код, чтобы увидеть узкое место, или добавьте пример кода в свой вопрос. Без более конкретной информации сложно дать более конкретный ответ.

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