Как выполнить операцию вставки в MongoDB с помощью GoLang? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть массив, в котором хранятся огромные данные, и мне нужно вставить эти данные в MongoDB.

Я могу добиться этого с помощью приведенного ниже кода.Но это займет 1,5 минуты.Мне нужно нажать в течение доли секунды.Есть ли другой способ отправить огромные массивы данных в MongoDB?

HeadDet является массивом и имеет 3 миллиона записей.

session, err := mgo.Dial(“localhost”)
if err != nil {
  panic(err)
}
defer session.Close()
// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)

c := session.DB("Test").C("Indicators")

for i := 0; i < len(HeadDet); i++ {
  err = c.Insert(HeadDet[i])
}
if err != nil {
  log.Fatal(err)
}

Я упомянул эту ссылку

1 Ответ

0 голосов
/ 04 октября 2018

Во-первых, падение 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 секунды!

...