Groovy Gmongo пакетной обработки - PullRequest
0 голосов
/ 21 января 2019

В настоящее время я пытаюсь запустить пакетную обработку в Groovy с драйвером Gmongo, коллекция составляет около 8 гигабайт. Моя проблема в том, что мой скрипт пытается загрузить все в памяти, в идеале я хотел бы иметь возможность обрабатывать это в пакетном режиме похоже на то, что делает Spring Boot Batch, но в отличных сценариях

Я пробовал batchSize (), но эта функция по-прежнему извлекает всю коллекцию в память только для применения ее к моей логике в пакетном процессе.

вот мой пример

momngoDb.collection.find().collect() it -> {
  //logic
}

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

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

  1. В отличие от курсора, он не извлекает документы для обработки в единственном числе (что может быть очень медленным)
  2. В отличие от пакетной функции Gmongo, он также не пытается загружать всю коллекцию в память только для того, чтобы разрезать ее на партии для обработки, это имеет тенденцию загружать машинные ресурсы.

приведенный ниже код эффективен и не требует много ресурсов в зависимости от размера партии.

def skipSize = 0
def limitSize = Integer.valueOf(1000) batchSize (if your going to hard code the batch size then you dont need the int convertion)
def dbSize = Db.collectionName.count()

def dbRunCount = (dbSize / limitSize).round()

dbRunCount.times { it ->
    dstvoDsEpgDb.schedule.find()
            .skip(skipSize)
            .limit(limitSize)
            .collect { event ->
            //run your business logic processing
            }

    //calculate the next skipSize   
    skipSize += limitSize

}
0 голосов
/ 21 января 2019

в соответствии с официальным документом:

https://docs.mongodb.com/manual/tutorial/iterate-a-cursor/#read-operations-cursors

def myCursor = db.collection.find()

while (myCursor.hasNext()) {
   print( myCursor.next() }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...