2

次のことを最もよく達成する方法についてのアイデアを探しています。

Google App Engine のデータストアに 10,000 個のエンティティ (Java オブジェクト) を保存しています。エンティティには多くのフィールドがあり、そのうちの 1 つは "Sales" で、個人の販売金額を表します。

売上ランキングの 2 つのテーブルを表示する Web ページを作成しています。このサイトでは、Java オブジェクト、Java サーブレット、および JSP を使用しています。

最初のテーブルには、個人のリストとその売上ランキングが表示されます。人物のリストは、サイトにログインした人物のチームに所属する特定の人物のセットになります。たとえば、店舗のマネージャーであるジュリーがサイトにログインし、5 人の販売員がいるとします。彼女は、5 人の従業員と、データストア内の全従業員の売上ランキングを表示するテーブルを確認します。例えば:

ランク、名前、売上高 23、Alea Goodmanson、$1,875 37、Tom Jones、$1,550 77、Jasmine Johnson、$1,325 283、Chris Mowles、$1,100 643、Nancy Klipper、$650

このページには、下の表で 1 から 250 にランク付けされた全員を示す 2 番目の表も表示されます。一度に 250 レコードの結果の完全なリスト間を前後に移動するためのリンクを表示します。たとえば、「前の 250」と「次の 250」のリンクが利用可能になります。リストの最大値まで、「1,250-1,500」や「1,750-2,000」などの特定の範囲のレコードにジャンプするリンクもあります。

Web ページに「売上」データ ポイント以上のものを表示する必要があります。また、取得したオブジェクトから他の 12 個のフィールドも表示します。したがって、データストアから返された完全なオブジェクトが必要です。

データストアは新しいデータで毎晩更新されますが、ユーザーがページを表示する日中は更新されません。

トップ テーブルの特定のアソシエイトのランキングを決定する最も効率的な方法は何ですか?

個人のランキングを決定するには、Sales でソートされたすべてのレコードに対してクエリを実行し、特定の人々がその順序でどこに該当するかを見つける必要があります。

どのクエリを実行する必要がありますか? キャッシュに何を配置することを検討する必要がありますか? 個人のサブセットのランキングを決定する必要があるたびに、すべてのレコードを照会する必要がないようにしたいと考えています。

Sales でソートされたすべての個人 ID を照会し、結果をループして、個人 ID の 1 つが一致する場合は、ループのインデックスをその個人のランクとして保存する必要がありますか? 次に、最初の 250 個の完全なオブジェクトに対して追加のクエリを発行しますか? また、トップ テーブルの特定の人物の完全なオブジェクトをクエリする必要があります。

ありがとう!

4

1 に答える 1

2

ソートされたリストのトップスコアラーを取得したい...幸いなことに、誰かがすでにそれを構築しています。

Java 実装

Python 実装

于 2013-08-21T17:11:53.597 に答える