Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IllegalArgumentException:拆分提供的查询需要在内存中合并太多子查询_Java_Google App Engine - Fatal编程技术网

Java IllegalArgumentException:拆分提供的查询需要在内存中合并太多子查询

Java IllegalArgumentException:拆分提供的查询需要在内存中合并太多子查询,java,google-app-engine,Java,Google App Engine,我查找了一组模型ID: List<Long> ids = lookupIds(searchCriteria); 当idsArrayList很小时,这可以正常工作 但超过一定尺寸(可能是40?)时,我会出现以下错误: IllegalArgumentException: Splitting the provided query requires that too many subqueries are merged in memory. 有没有办法解决这个问题,或者这是GAE中的一

我查找了一组模型ID:

List<Long> ids = lookupIds(searchCriteria);
ids
ArrayList很小时,这可以正常工作

但超过一定尺寸(可能是40?)时,我会出现以下错误:

IllegalArgumentException: Splitting the provided query requires 
that too many subqueries are merged in memory.

有没有办法解决这个问题,或者这是GAE中的一个固定限制?

这是一个固定限制。但是,如果您是按ID查找实体,那么首先不应该执行查询,而应该执行按键抓取。如果您使用外键进行查询,如果您想超过40的限制,您需要自己进行单独的查询-但是您可能应该重新考虑您的设计,因为这是非常低效的。

我无法使用GAE的文档验证这一点,因此我的答案可能不完整。但是我发现“ORDER BY createdDateTime desc”设置了这个限制,顺便说一下,这个限制是30。我的假设是,如果gae不需要对它进行排序,它就不需要在内存中处理查询

如果您确实需要对其进行“排序”,请执行以下操作(这是GAE中使用定时内容的方式):

向查询中添加一个字段“week”或“month”或其他内容,该字段包含一个唯一分隔周/月的整数(因此您需要0..52或0..11的其他内容,因为它们在多年中也必须是唯一的)。然后,你提出你的问题,并声明你只对本周,甚至上个星期(或上个月)的事情感兴趣。因此,如果我们在第4353周,您的查询类似于“[435352]中的周”。您应该有一个相对较小的查询集。然后过滤掉太旧的帖子,并在内存中进行排序

Compiling "SELECT FROM com.foo.FooModel WHERE 
:p.contains(id) ORDER BY createdDateTime desc RANGE 0,10"
IllegalArgumentException: Splitting the provided query requires 
that too many subqueries are merged in memory.