【问题标题】:Grails list() - handling Out of memory and restricting list resultsGrails list() - 处理内存不足和限制列表结果
【发布时间】:2014-06-12 11:54:56
【问题描述】:

我在 Grails 中面临以下问题。

这是我的代码,我试图在其中获取所有可能数据的列表并显示它。

def c = Abc.createCriteria()
def results = c.list(){
  eq("A", "a")
  eq("B", "b")    
}

由于结果很大,它会继续获取它们并死掉。 我想限制列表获取或为其设置最大大小。

我尝试使用maxResults(),但它充当了后期过滤器。

我想放一个

  1. 超时
  2. 限制抓取
  3. 如果可能,处理所有数据时不要遇到内存不足错误。

【问题讨论】:

    标签: grails grails-orm hibernate-criteria


    【解决方案1】:

    我不确定您所说的“后期过滤器”是什么意思,但据我所知,条件查询中的以下内容

    maxResults(10)
    

    等同于

    LIMIT 10
    

    在 SQL 查询中。您可以通过打开 SQL 日志记录来验证这一点。换句话说,maxResults(X) 将限制查询本身返回的记录数。

    【讨论】:

    • 嗨,Donal,我的意思是后期过滤器可能是它获取所有数据列表,然后选择 maxResults(x) 指定的最大值。我什至尝试过同样的方法,但最终出现内存不足的问题。
    • 我想在大量数据出现内存不足或超时错误之前对其进行限制。或者以任何方式,我可以在 list() 中处理这些数据,如示例所示。
    • @AmyPrIce 正如我在回答中所说,maxResults 不会执行您所谓的“后期过滤器”。它限制了查询本身返回的结果的大小
    • 我明白这一点,但仍然不确定为什么当我们必须搜索大文件时查询会超时,即使我只将 maxResults(10) 设为 10。
    【解决方案2】:

    你可以使用分页然后

    params.max = Math.min(params.int('max') ?: 10, 100)
    def c = Abc.createCriteria()
    def results = c.list(params){
        eq("A", "a")
        eq("B", "b")    
    }
    

    查看:

    <g:paginate controller="myController" action="myAction" total="${results.totalCount}" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-01
      • 2010-12-04
      • 2016-08-13
      • 2013-01-10
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多