#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 /… .