Назад | Перейти на главную страницу

MongoDB - уровень фрагментации БД / коллекции

Недавно у меня возникла проблема с производительностью одной из моих коллекций.
По прихоти (и благодаря Эта статья), Решил попробовать уплотнить (как написано в официальная документация).
Это сработало блестяще. Однако теперь мне интересно, как часто мне следует это делать.
Поскольку уплотнение не является полностью интерактивной задачей (я могу делать это только на пассивных узлах), я не могу решить делать это каждую ночь и забывать об этом.

Я не смог найти никакой документации о том, что БД / коллекция имеет высокую скорость фрагментации. Есть ли у вас опыт определения уровня фрагментации БД (кроме бенчмаркинга)?

Заметка: Я говорю о «внутренней» фрагментации, как о пробелах внутри файла, а не о «внешней» фрагментации, как о распространении файла по диску.

Уровень сжатия можно определить, сравнив размер данных в коллекции через db.stats. dataSize дает вам, сколько данных находится в коллекции, где storageSize сообщает вам, насколько велики файлы. dataSize <= storageSize, но то, насколько велика разница, должно сказать вам, какой выигрыш вы получите за счет сжатия.

Mongo не позволяет объектам полностью совмещаться, поэтому вы не получите случаев, когда объект разбросан по файлам данных. Когда это вступает в игру, если объект расширяется за пределы своего свободного распределения, весь объект должен быть переписан в большее место.

Когда я играл с базами данных Mongo, все, что нам было нужно, - это уплотнение в период ежеквартального обслуживания. Но в нашем наборе данных не так много удалений, поэтому мы не так часто создавали пустоты. Чтобы определить свой рейтинг, проследите эти два значения dbStats и посмотрите, как они меняются с течением времени.