1

私は現在、GAE/Java でロケーションベースのサービスを開発しています。私はこれにまったく慣れていないので、JDO クエリの部分であなたの助けが必要です。

Client と ClientGeolocation という 2 つの永続クラスがあります。1 つ目はクライアント属性 (キー clientId、文字列名、文字列設定など) を格納するためのもので、2 つ目は地理位置情報の更新 (キー clientGeolocationId、キー clientId、長いタイムスタンプ、二重緯度、二重経度) を格納するためのものです。1 つのクライアントが何千もの地理位置情報レコード (場所の更新ごとに 1 つ) を長期にわたって保持しているため、ClientGeolocation クラスと Client クラスの間に 1 対 1 の非所有関係を使用することにしました。

このサービスにより、ユーザーは別のユーザーが範囲内にいるかどうかを確認できます (たとえば、徒歩 5 分の距離にいるなど)。リクエストごとに JDO クエリを使用してこれを実現すると、リソースが消費されたり遅くなったりするため、ユーザーの最後の地理位置情報を memcache に入れ、そこからチェックを行います。ここまでは順調ですね。

問題は、アプリがコールド スタートし、memcache が空である場合です。memcache をストレージからのデータでいっぱいにしたい (JDO クエリを使用) のに、「アクセスしている各ユーザーの最後の地理位置情報レコード」をクエリする方法がわかりません。 180 分以内の少なくとも 1 つのレコード」。

現時点で思いつく最善の解決策は、これを 2 つの部分に分けて行うことです。最初に、過去 180 分以内にレコードを持つユーザーの clientId キーを照会し (これにより、異なる clientId を照会します)、すべての clientId に対して照会を実行し、最後 (タイムスタンプの降順で上位 1 位) のジオロケーション レコードを照会します。つまり、最初のクエリで 10.000 人のユーザーが返された場合、最後のジオロケーション レコードに対して 10.000 件のクエリを実行することになります。GAEにはこれに対するより良い解決策があると感じています:)。

このクエリを適切な方法で記述する方法を教えてください。

ご助力ありがとうございます!

4

1 に答える 1

0

これは役に立ちますか? http://www.datanucleus.org/products/accessplatform_3_0/jdo/jdoql_subquery.html

于 2012-06-29T07:59:44.097 に答える