Mongoose: массовая вставка через Model.collection.insert приводит к сбою Node.js с ошибкой сегментации 11

У меня есть 10 000 000 документов, которые я хочу вставить в MongoDB.

Я использую mongoose для создания документов проанализированного JSON (JSON создается путем преобразования содержимого множества текстовых файлов).

Я начал использовать Model.create для каждого документа, но это было слишком медленно, и для завершения операции требовалось несколько дней. Поэтому я переключаюсь на Model.collection.insert, чтобы ускорить процесс.

Это моя функция saveToDB (написанная на TypeScript):

private saveToDB(hand: Hand): void {
    this.bulkHands.push(new HandHistory(hand));

    if(this.bulkHands.length >= 10000) {
        HandHistory.collection.insert(this.bulkHands, (err): void => {
            if(err) {
                console.log('error', err);
            }

            this.bulkHands = [];
        });
    }
}

Я попробовал код, и мой парсер создает массив до 10 000 документов, а затем пытается вставить их в базу данных. Но Node всегда падает с Segmentation fault: 11.

Даже когда я устанавливаю ограничение на 1 (вставка одного документа за раз), это происходит. Так что я предполагаю, что это как-то связано с функцией Model.collection.insert. Но мои знания о базовой структуре недостаточно глубоки, чтобы понять, что здесь происходит.

Кто-нибудь сталкивался с такой проблемой? И что я могу сделать, чтобы решить это?


person Johannes Klauß    schedule 05.06.2015    source источник


Ответы (2)


Нашел ответ. Проблема в том, что я помещаю экземпляры модели мангуста в массив. Но допускаются только простые объекты.

person Johannes Klauß    schedule 05.06.2015

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

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

{ '0': 
   { [MongoError: key $__ must not start with '$']
     name: 'MongoError',
     message: 'key $__ must not start with \'$\'' },
  '1': undefined }

Как видите, сообщение об ошибке совсем не помогло.

Я прошел в моделях монго вместо простого старого JSON. Спасибо за помощь.

person Quy    schedule 10.07.2015