Что ж, я новичок в mongo
, и сегодня утром у меня появилась (плохая) идея. Я игрался с индексами из оболочки и решил создать большую коллекцию с большим количеством документов (100 миллионов). Поэтому я выполнил следующую команду:
for (i = 1; i <= 100; i++) {
for (j = 100; j > 0; j--) {
for (k = 1; k <= 100; k++) {
for (l = 100; l > 0; l--) {
db.testIndexes.insert({a:i, b:j, c:k, d:l})
}
}
}
}
Однако все пошло не так, как я ожидал:
- На выполнение запроса ушло 45 минут.
- Он создал 16 ГБ данных на моем жестком диске.
- Он использовал 80% моей оперативной памяти (всего 8 ГБ) и не освободит их, пока я не перезапущу свой компьютер.
Как видно на фото ниже, по мере роста количества документов внутри коллекции росло и время вставки документов. Я предполагаю, что ко времени последней модификации файлов данных:
Это ожидаемое поведение? Я не думаю, что 100 миллионов простых документов — это слишком много.
P.S. Теперь я действительно боюсь запускать команду ensureIndex
.
Изменить:
Я выполнил следующую команду:
> db.testIndexes.stats()
{
"ns" : "test.testIndexes",
"count" : 100000000,
"size" : 7200000056,
"avgObjSize" : 72.00000056,
"storageSize" : 10830266336,
"numExtents" : 28,
"nindexes" : 1,
"lastExtentSize" : 2146426864,
"paddingFactor" : 1,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 3248014112,
"indexSizes" : {
"_id_" : 3248014112
},
"ok" : 1
}
Таким образом, индекс по умолчанию для _id
имеет размер более 3 ГБ.