Что значит вписать «рабочий набор» в оперативную память для MongoDB? - PullRequest
61 голосов
/ 23 июня 2011

MongoDB работает быстро, но только тогда, когда ваш рабочий набор или индекс могут уместиться в ОЗУ. Итак, если мой сервер имеет 16 ГБ ОЗУ, означает ли это, что размеры всех моих коллекций должны быть меньше или равны 16 ГБ? Как можно сказать «хорошо, это мой рабочий набор, остальное можно« заархивировать »?

Ответы [ 2 ]

69 голосов
/ 23 июня 2011

«Рабочий набор» - это, в основном, количество данных И индексов, которые будут активны / используются вашей системой.

Например, предположим, у вас есть данные за 1 год. Для простоты каждый месяц относится к 1 ГБ данных, что в сумме составляет 12 ГБ, а для покрытия данных за каждый месяц у вас снова есть индексы на 1 ГБ, что составляет 12 ГБ за год.

Если вы всегда обращаетесь к данным за последние 12 месяцев, то ваш рабочий набор: 12 ГБ (данные) + 12 ГБ (индексы) = 24 ГБ.

Однако, если вы фактически получаете доступ только к данным за последние 3 месяца, то ваш рабочий набор: 3 ГБ (данные) + 3 ГБ (индексы) = 6 ГБ. В этом случае, если у вас было 8 ГБ ОЗУ, а затем вы начали регулярно получать доступ к данным за последние 6 месяцев, то ваш рабочий набор начнет превышать объем доступной ОЗУ и оказывать влияние на производительность.

Но, как правило, если у вас достаточно ОЗУ для покрытия объема данных / индексов, к которым вы часто обращаетесь, то все будет в порядке.

Редактировать: Ответ на вопрос в комментариях
Я не уверен, что полностью понимаю, но я попробую ответить. Во-первых, расчет для рабочего набора представляет собой «фигуру шарикового парка». Во-вторых, если у вас есть (например) 1 ГБ индекс для user_id, то только часть этого индекса, к которой обычно обращаются, должна быть в ОЗУ (например, если 50% пользователей неактивны, то 0,5 ГБ индекса будет чаще требуется / необходимо в оперативной памяти). В общем, чем больше у вас ОЗУ, тем лучше, особенно если рабочий набор будет расти со временем из-за увеличения использования. Вот где возникает разделение - разделите данные по нескольким узлам, и вы сможете эффективно сократить расходы. Ваш рабочий набор затем распределяется по нескольким машинам, что означает, что больше можно хранить в оперативной памяти. Нужно больше оперативной памяти? Добавьте еще одну машину для осколка.

6 голосов
/ 23 июня 2011

Рабочий набор - это, по сути, материал, который вы используете чаще всего. Если вы используете индекс A для коллекции B для поиска подмножества документов, то вы можете считать, что ваш рабочий набор. До тех пор, пока наиболее часто используемые части этих структур могут помещаться в памяти, все будет очень быстро. Поскольку детали больше не вписываются в ваш рабочий набор, как, например, многие документы, это может замедлить работу. Обычно все становится намного медленнее, если ваши индексы превышают вашу память.

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

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