Objectify - 带范围的filter()和100个记录限制确实总是返回相同的结果?

时间:2014-09-18 12:11:37

标签: google-app-engine google-cloud-datastore objectify

具有范围和100个记录限制的Objectify filter()确实总是返回相同的结果,是否有办法在给定的匹配条件上获得100个随机记录???

示例: 假设我有一个得分字段索引(在GAE实体排行榜中),我想在其中获取记录,其中得分范围为0到10,限制为100个记录我确实得到相同的结果(考虑到那里)数据记录没有变化)。我理解这纯粹与索引的位置有关,在索引中,数据可以按ASC顺序存储和排序,任何时候你查询我们可能会得到相同的结果?

考虑到我们有1000条记录b / w 0-100得分范围,是否有GAE客体化方法可以取出匹配相同条件的随机100条记录???

2 个答案:

答案 0 :(得分:1)

根据您的具体需求,您可以使用GAE内置的__scatter__属性:

https://code.google.com/p/appengine-mapreduce/wiki/ScatterPropertyImplementation

答案 1 :(得分:0)

了解数据存储区的索引,编号

数据存储区读取其索引,索引已预先排序,因此它将始终返回SAME值。

获得这种“随机发生器”效果的唯一方法是获取1000个记录并随机选择其中的100个,或者为您想要的1000个记录创建一个自动递增的数字,然后抓住一个随机间隔为100.

编辑:根据OP的建议,另一种解决方案是预取一个简单的计数,然后随机生成一个偏移数来抓取随机数据。 (为了在一个地方提供所有解决方案而添加到答案中)