Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

Я понял, что индекс является B-Tree. Если данные превышают размер, который может поместиться в баран, почему это так важно? B-Tree довольно быстр и снижает доступ к диску в очень большой степени. Зачем беспокоиться?