Безопасно ли создавать небольшую коллекцию MongoDB так, как будто это все в памяти? - PullRequest
1 голос
/ 18 января 2011

Существует много вариантов использования MongoDB, для которых я хотел бы рассматривать коллекцию так, как будто она находится в памяти. Например, для коллекции пользовательских объектов Session (для веб-сайта). До использования MongoDB я хотел бы хранить такие данные на сервере memcached и т. Д. Но, кажется, глупо запускать оба memcached + MongoDB для подобных случаев.

Достаточно ли безопасно предположить, что для небольшого (небольшая ~ = 1% от общего объема ОЗУ системы) часто доступного объема данных эта коллекция по существу всегда хранится в памяти? Я всегда собираюсь делать прямой поиск по _id, и у меня нет индексов в данных.

Поможет ли это предположение, если коллекция Session будет храниться в собственной базе данных? Я спрашиваю из-за природы схемы отображения памяти на основе буферного кэша MongoDB.

Ответы [ 2 ]

1 голос
/ 19 января 2011

MongoDB не занимается управлением памятью БД, но использует менеджер виртуальной памяти ОС. Так что это очень зависит от ОС. VMM может загружать всю БД в память, даже если она составляет 99% от ее размера, или он может выгружать все это, потому что другие приложения требуют ОЗУ. Так что это также зависит от моделей использования.

Любой приличный VMM будет стараться по возможности хранить данные MRU в памяти, поэтому ваша коллекция Session, вероятно, всегда будет в памяти, независимо от того, находится она в отдельной базе данных или нет - она ​​разбита на страницы (обычно размером 4 КБ).

Вы всегда можете проверить статус подкачки с помощью утилиты mongostat. Он имеет счетчик сбоев страниц, который отображает количество обращений к страницам, которых не было в памяти и которые необходимо было загрузить из файла.

0 голосов
/ 18 января 2011

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

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