2012-06-20 34 views
1

我目前正在GAE/Java上開發基於位置的服務。我對此很新,我需要你對JDO查詢部分的幫助。棘手的1對1無主關係查詢

我有兩個持久類,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中,並從那裏進行檢查。到現在爲止還挺好。

問題是,當應用程序冷啓動並且memcache爲空時,我想用存儲器中的數據填充memcache(使用JDO查詢),而我根本不知道如何查詢「每個地址的最後一個地理位置記錄至少有一個不超過180分鐘的記錄的用戶「。

我現在想出的最好的解決方案是分兩部分來完成。首先,查詢最近180分鐘內有記錄的用戶的clientId密鑰(這將查詢不同的clientIds,我希望),然後對所有clientId執行一個查詢,其中我查詢最後一個(timestamp desc的前1個訂單)地理位置記錄。這意味着如果第一個查詢返回10.000個用戶,那麼我將爲最後的地理位置記錄執行10.000個查詢。我有一種感覺,在GAE中有更好的解決方案:)。

你能幫我一下,如何以適當的方式寫這個查詢?

非常感謝您的幫助!

回答