假设,在我的应用程序中,我要求用户输入一些字符串。用户可以多次输入字符串。每当任何用户输入一个字符串时,我都会将它与日期一起记录到数据库中。许多字符串可以相同,即使由不同的用户输入。在主页中,我需要提供界面,以便任何用户都可以在任何时间段(例如最近 45 天或 2012 年 1 月 10 日至 2012 年 1 月 30 日之间)查询前 n 个(例如 50 个)字符串。如果是 SQL,我可以编写如下查询:
select string, count(*)
from userStrings where day >= d1 and day <= d2
group by string
order by count(*) desc
limit n
对于每个用户查询,我无法在查询时处理记录 - 可能有数百万条记录。如果时间段限制不存在,我可以做这样的事情 - 为 UserString 创建一个类并为每个不同的用户字符串维护它的唯一对象,为用户输入的字符串检索相应的对象,并增加它的计数 [即使使用方法,我假设数据存储区必须处理所有 UserStrings 对象(~100000)并返回前 n 个 - 所以它本身可能是非常繁重的查询]。
我正在使用 JDO。我的明显目标是最小化应用引擎成本:CPU + 数据。
谢谢,