Arhn - архитектура программирования

100 миллионов документов это много?

Что ж, я новичок в 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})
            }
        }
    }
}

Однако все пошло не так, как я ожидал:

  1. На выполнение запроса ушло 45 минут.
  2. Он создал 16 ГБ данных на моем жестком диске.
  3. Он использовал 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 ГБ.

08.06.2013

Ответы:


1

На выполнение запроса ушло 45 минут.

Не удивлен.

Он создал 16 ГБ данных на моем жестком диске.

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

Кажется, что размер данных составляет около 7,2 ГБ, в то время как средний размер объекта составляет 72 байта, кажется, это работает отлично (поскольку 72 байта умещаются в 7,2 ГБ) с накладными расходами 3 ГБ индекса _id кажется, что размер хранилища 10 ГБ вполне подходит.

Хотя я обеспокоен тем, что он использовал на 6 ГБ больше, чем нужно по статистике, это может потребовать дополнительного изучения. Я предполагаю, что это из-за того, как MongoDB писала в файлы данных, это может быть даже потому, что вы не использовали огонь и забыли о записи (w>0), в общем; хм.

Он использовал 80% моей оперативной памяти (всего 8 ГБ) и не освободит их, пока я не перезапущу свой компьютер.

MongoDB попытается занять столько оперативной памяти, сколько позволит ОС. Если ОС позволит ему занять 80%, то 80% займет. На самом деле это хороший знак, он показывает, что MongoDB имеет правильные значения конфигурации для эффективного хранения вашего рабочего набора.

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

08.06.2013

2

Это ожидаемое поведение, файлы mongo db начинаются с размера файла 16 МБ ( test.0 ) и увеличиваются до 2 ГБ, а затем 2 ГБ являются постоянными.

100 миллионов (16 ГБ) документов впустую. Вы можете запустить sureIndex, это не займет много времени.

Вам не нужно перезагружать компьютер, в тот момент, когда другому процессу потребуется ОЗУ, mongod освободит ОЗУ.

К вашему сведению: test.12 полностью пуст.

Я предполагаю, что вас не беспокоит размер 16 ГБ только для 100 миллионов документов?

08.06.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..