Есть ли инструменты для оценки размера индекса в MongoDB? - PullRequest
9 голосов
/ 22 декабря 2011

Я ищу инструмент, чтобы получить достойную оценку того, насколько большой индекс MongoDB будет основан на нескольких сигналах, таких как:

  • Сколько документов в моей коллекции
  • Размер индексированного поля (полей)
  • Размер _id, который я использую, если не ObjectId
  • Geo / Non-geo

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

Это не должно быть точным до конца, но с некоторыми предположениями о B-деревьях и реализации индекса, я уверен, что это может быть достаточно разумно, чтобы быть полезным.

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

Ответы [ 3 ]

21 голосов
/ 23 декабря 2011

Я только что говорил с некоторыми из инженеров 10gen, и нет никакого инструмента, но вы можете сделать обратный расчет конверта, который основан на этой формуле:

2 * [n * (служебные данные 18 байтов + средний размер индексируемого поля + 5 или около того байтов коэффициента преобразования)]

Где n - количество документов, которое у вас есть.

Накладные расходы и заполнение преобразования зависят от монго, но 2x происходит из-за структуры данных b-дерева, наполовину заполненной (но выделившей 100% пространства, которое потребуется для полного дерева) в худшем случае.

Я бы объяснил больше, но сейчас я узнаю об этом сам. Эта презентация будет иметь более подробную информацию: http://www.10gen.com/presentations/mongosp-2011/mongodb-internals

4 голосов
/ 09 мая 2013

Размеры индексов в коллекции можно проверить с помощью команды:

db.collection.stats()

Подробнее здесь: http://docs.mongodb.org/manual/reference/method/db.collection.stats/#db.collection.stats

1 голос
/ 06 августа 2014

Еще один способ вычислить - это вставить ~ 1000 или около того документов в каждую коллекцию, другими словами, построить мелкомасштабную модель того, что вы собираетесь получить в производстве, создать индексы или что у вас есть и вычислитьокончательные числа основаны на среднем db.collection.stats().

Имеет ли это смысл?:)

...