Как MonogoDB работает с очень большими наборами данных, где только часть данных является изменчивой

Я работаю над проектом, в котором мы периодически собираем большие объемы электронной почты через IMAP или POP, проведите анализ (например, объедините в разговоры, извлечение важных предложений и т. д.), а затем представить просмотры через Интернет конечному пользователю.

Основным представлением будет страница профиля в стиле facebook для каждого контакта из самых последних (около 20) разговоров, которые каждый из них вел из полученного нами электронного письма.

Для нас это важно. чтобы иметь возможность часто и быстро получать страницу профиля и последние 20 элементов. Мы также можем часто вставлять в эту ленту недавние электронные письма. Для этого довольно привлекательными выглядят хранилище документов и недорогие атомарные записи MongoDB.

Однако у нас также будет БОЛЬШОЙ объем старых электронных писем, к которым не будет часто обращаться (поскольку они не будут отображаться в последние 20 элементов, люди будут видеть их только в том случае, если они будут искать их, что будет относительно редко). Более того, размер этих данных со временем будет расти быстрее, чем размер хранилища контактов.

Судя по тому, что я читал, MongoDB более или менее требует, чтобы весь набор данных оставался в ОЗУ, и это единственный способ обойти это заключается в использовании виртуальной памяти, которая может нести значительные накладные расходы. В частности, если Mongo не может различать изменчивые данные (профили / каналы) и энергонезависимые данные (старые электронные письма), это может оказаться довольно неприятным (и, поскольку кажется, что распределение виртуальной памяти передается ОС, Я не понимаю, как это может сделать Монго).

Казалось бы, единственный выбор - либо (а) купить достаточно оперативной памяти для хранения всего, что нормально для изменчивых данных, но вряд ли рентабельно для сбора ТБ электронных писем, или (b) использовать виртуальную память и увидеть, как чтение / запись наших изменчивых данных замедляется до сканирования.

Это правильно, или я что-то упускаю? Подойдет ли MongoDB для этой конкретной проблемы? Если да, то как будет выглядеть конфигурация?

8
задан Community 22 September 2017 в 17:57
поделиться