棘手的1对1无主关系查询

时间:2012-06-20 17:50:56

标签: google-app-engine jdo

我目前正在开发基于GAE / Java的基于位置的服务。我对此很陌生,我需要你对JDO查询部分的帮助。

我有两个持久化的类,Client和ClientGeolocation。第一个用于存储客户端属性(Key clientId,String name,String settings等),第二个用于存储其地理位置更新(Key clientGeolocationId,Key clientId,Long timestamp,Double latitude,Double longitude)。由于一个客户端随着时间的推移有数千个地理位置记录(每个位置更新一个),我决定在ClientGeolocation和Client类之间使用1对1的无主关系。

该服务允许用户查看另一个用户是否在范围内(例如,他们在5分钟步行距离内)。使用每个请求的JDO查询实现这一点将太耗费资源,因此我将用户的最后一个地理位置放在memcache中并从那里进行检查。到目前为止一切都很好。

问题是当App冷启动并且memcache为空时,我想用存储中的数据填充memcache(使用JDO查询),我根本不知道如何查询“每个用户的最后一个地理位置记录谁拥有至少一个不超过180分钟的记录“。

目前我能想出的最佳解决方案是分两部分来完成。首先,要查询最近180分钟内有记录的用户的clientId密钥(这将查询我希望的不同clientIds),然后对我查询最后一个(按时间戳desc排名前1位)地理定位记录的所有clientId执行查询。这意味着如果第一个查询返回10.000个用户,那么我将对最后的地理位置记录执行10.000个查询。我觉得GAE中有更好的解决方案:)。

您能帮我解决一下如何以正确的方式编写此查询吗?

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)