Что значит вписать "рабочий набор" в оперативную память для MongoDB?


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

2 56

2 ответа:

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

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

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

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

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

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

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

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