经过深思熟虑,我发现这个解决方案效果最好,原因如下。
- 与 Cursor 不同,它不会在单个基础上检索文档进行处理(这可能非常慢)
- 与 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
}