我目前正在 GAE/Java 上开发基于位置的服务。我对此很陌生,我需要您对 JDO 查询部分的帮助。
我有两个持久类,Client 和 ClientGeolocation。第一个用于存储客户端属性(密钥 clientId、字符串名称、字符串设置等),第二个用于存储其地理位置更新(密钥 clientGeolocationId、密钥 clientId、长时间戳、双纬度、双经度)。由于一个客户随着时间的推移有数千条地理位置记录(每个位置更新一个),我决定在 ClientGeolocation 和 Client 类之间使用一对一的无主关系。
该服务允许用户查看其他用户是否在范围内(例如,他们在 5 分钟的步行距离内)。对每个请求使用 JDO 查询来实现这一点会太耗费资源/太慢,所以我将用户的最后一个地理位置放在 memcache 中并从那里进行检查。到目前为止,一切都很好。
问题是当应用程序冷启动并且 memcache 为空时,我想用存储中的数据填充 memcache(使用 JDO 查询),我根本不知道如何查询“每个用户的最后一个地理位置记录”至少一条不超过 180 分钟的记录”。
目前我能想到的最好的解决方案是分两部分进行。首先,要查询在过去 180 分钟内有记录的用户的 clientId 键(这将查询我希望的不同 clientId),然后对所有 clientId 执行查询,在其中我查询最后一个(按时间戳降序排列的前 1 个顺序)地理位置记录。这意味着如果第一个查询返回 10.000 个用户,那么我将对最后的地理位置记录进行 10.000 个查询。我有一种感觉,在 GAE 中有一个更好的解决方案:)。
你能帮我如何以正确的方式编写这个查询吗?
非常感谢您的帮助!