首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy gmongo批处理

Groovy gmongo批处理
EN

Stack Overflow用户
提问于 2019-01-21 12:53:23
回答 2查看 266关注 0票数 0

我目前正尝试用Gmongo驱动程序在groovy中运行一个批处理作业,这个集合大约是8g我的脚本试图加载内存中的所有东西,理想情况下,我希望能够批量处理这个任务,就像Spring批处理一样,但是在groovy脚本中。

我已经尝试过batchSize(),但是这个函数仍然将整个集合检索到内存中,只是将它应用到批处理中的逻辑中。

这是我的例子

代码语言:javascript
复制
momngoDb.collection.find().collect() it -> {
  //logic
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-01 16:05:05

经过深思熟虑,我发现这个解决方案最好的原因如下。

  1. 与游标不同的是,它不会在单一的基础上检索文档以进行处理(这可能非常慢)。
  2. 与Gmongo批处理功能不同的是,它也不尝试将整个集合上传到内存中,而是以批方式进行处理,这往往会占用机器资源。

下面的代码是有效和轻的资源,这取决于您的批处理大小。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-01-21 15:04:39

据官方医生说:

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

代码语言:javascript
复制
def myCursor = db.collection.find()

while (myCursor.hasNext()) {
   print( myCursor.next() }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54290453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档