Во-первых, падение labix.org/mgo
(он же gopkg.in/mgo.v2
), это устаревшее, необслуживаемое.Вместо этого используйте поддержку, поддерживаемую сообществом: github.com/globalsign/mgo
.
Далее, чтобы выполнять массовые вставки или обновления, используйте Bulk API, представленный в MongoDB 2.6 .Драйвер mgo
поддерживает массовые операции с использованием типа mgo.Bulk
.
Вы хотите вставить «30 lakhs records».Для тех, кто не знает, «лакх» - это единица в индийской системе счисления, равная ста тысячам (100 000).Таким образом, 30 лакхов равны 3 миллионам.
Используя Bulk API, вы можете эффективно вставить все это:
c := session.DB("Test").C("Indicators")
// BULK, ORDERED
bulk := c.Bulk()
for i := 0; i < len(HeadDet); i++ {
bulk.Insert(HeadDet[i])
}
res, err := bulk.Run()
Обратите внимание, что если вас не волнует порядокиз вставок вы можете перевести массовую операцию в режим неупорядоченный , который может ускорить процесс:
// BULK, UNORDERED
bulk := c.Bulk()
bulk.Unordered()
for i := 0; i < len(HeadDet); i++ {
bulk.Insert(HeadDet[i])
}
res, err := bulk.Run()
Для сравнения, на моем компьютере (клиент-сервер - это та же машина, поэтому нет сетизадержка) цикл с 3 миллионами отдельных вставок занимает 5 минут и 43 секунды.
Заказанная операция Bulk для вставки 3 миллионов документов занимает 18,6 секунды!
Неупорядоченная групповая операция по вставке 3 миллионов документов занимает 18,22 секунды!