0

私のアプリで、ユーザーに文字列を入力するように頼んだとします。ユーザーは文字列を複数回入力できます。ユーザーが文字列を入力するたびに、その日と一緒にデータベースに記録します。異なるユーザーが入力したとしても、多くの文字列は同じである可能性があります。ホームページでは、ユーザーが任意の期間 (過去 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 + データ) を最小限に抑えることです。

ありがとう、

4

1 に答える 1

0

App Engine タスク キューを使用して、文字列をオフラインで処理できます。リアルタイムの回答が必要な場合は、memcache を使用して、1 日にその単語が入力された回数の一時的な記録を保存し、処理をバックグラウンドで行うことができます。

于 2012-06-26T17:39:00.643 に答える