我意识到这里已经有很多关于查询App Engine数据存储区的问题,但我想就我的具体案例得到意见。
我正在查询分数以建立一个高分表,所以我希望它们按分数降序排列。现在,两个分数可能具有相同的分数值,因此无法基于此值进行分页,因为您最终可能会根据页面的过滤器跳过分数。
我想围绕动态日期构建查询。例如,过去一个月的前10名。最好的方法是什么?
我显然不希望每次都能分页。我是否需要将这些分数加载到内存缓存中并在提交的分数大于前10中的分数时进行更新?这没有意义,因为我必须提前定义我的时间范围,但是设置一个cron来每天刷新它以获得已经达到时间限制的分数是可行的。 这可以有效地动态完成吗?另一个选择是每隔N小时或者某个时间让一个cron运行所有分数,但我真的更愿意远离需要这样做。
那里有文献可以帮助我做出这些决定吗?
答案 0 :(得分:0)
所以这是我开始工作的一个解决方案,但可能不是首选的方法。
在我的Score课程中,我添加了一个Long变量。当我设置日期时,我会删除小时,分钟,秒和毫秒并执行getTime()。
当请求发生N天或N个月的分数时,我将在查询字符串上生成相当多的平等检查:“dateAsLong == N天前|| dateAsLong == N - 1天前”等等等。
在尝试.execute()之前我遇到“非法争论”之前,这个请求最多可以工作29天。我假设我在查询长度或过滤器数量方面遇到了某种最大限度。任何更长的时间都需要拆分查询,这是非常可行的。然后可以获取并附加列表。
这样做的限制是请求所花费的时间和CPU。查询过去29天时,请求大约需要550毫秒和750毫秒的CPU时间。
答案 1 :(得分:0)
三个选项: