Как улучшить производительность MongoDB при обновлении многих объектов

#node.js #mongodb #performance #import

#node.js #mongodb #Производительность #импорт

Вопрос:

Я пытаюсь прочитать файл JSON, который содержит около 200 000 строк, каждая из которых содержит небольшой документ JSON вида:

 {
   <some key properties>,
   <some 2-3 properties>,   // unimportant for this question
   updateCounter1: -1,
   updateCounter2: 0,
   updateCounter3: 3
}
  

Теперь я хочу вставить это в свой MongoDB, и документы должны иметь следующий вид:

 {
   <some key properties>,
   <some 2-3 properties>,
   counter1: 3748,
   counter2: 722,
   counter3: 2848
}
  

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

В моем коде это выглядит так в настоящее время:

          let item = {
            query: {
               refSpHash: ...,
               gender: ...,
               age: ...,
               state: ...,
               district:  ...
            },
            set: {
               refSp: ...,
               msgSp: ...
            },
            counters: {
               counter1: 1,
               counter2: -2,
               counter3: 4
            }
         };

         // (....)

         let update = { $set: _.assign({}, item.set, item.query), $inc: item.counters };

         collection.updateOne(item.query, update, { upsert: true }, (err) => { ... });
  

Итак, я использую $inc оператор для относительного увеличения / уменьшения значения DB, заданного входным JSON, и $set для остальных свойств.
Приведенный выше фрагмент кода выполняется для каждой отдельной строки во входном файле, и я использую async.eachSeries для импорта каждой строки одну за другой.

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

Может ли кто-нибудь помочь мне улучшить логику импорта, чтобы обработка была быстрее?

Комментарии:

1. Вы думали о потоках JSON?

2. Нет, не знаю, что это такое.

3. github.com/dominictarr/JSONStream

4. Как это поможет вставке объектов в MongoDB? Входной файл обрабатывается в течение 1-2 секунд, но вставка JS-объектов в MongoDB — это то, что занимает здесь больше всего времени.

5. Попробуйте объединить это с mongodb.github.io/node-mongodb-native/2.2/api /… .