0

Appleアプリのデータをデータベースに保存します(http://www.apple.com/itunes/affiliates/resources/documentation/itunes-enterprise-partner-feed.html)。

1つのタイプのクエリに対して最適化する必要があります。いくつかの条件を満たすすべてのアプリを検索します。基準:(1)アプリの平均評価。(2)アプリの評価数。(3)アプリでサポートされているデバイス。(4)アプリが販売されている国。(5)アプリの現在の価格。(6)アプリが無料になった日付。クエリは可能な限り高速である必要があります。クエリの例:「評価が600を超え、平均5つ星で、iPadとiPhoneをサポートし、米国で販売され、2日前に価格を0.00ドルに下げたすべてのアプリを検索します。」

アップルのスキーマに基づいて、すべての国の価格情報があります。アップルが100か国をサポートしていると仮定すると、各アプリの価格は国ごとに1つずつ、100になります。また、各アプリの過去の価格を保存する必要があります。つまり、価格が10回変更されたアプリの価格は1000になります(100か国を想定)。

3つの質問:

1)クエリを高速化するために、価格データをmongoに保存することをどのようにアドバイスしますか?現在、価格をオブジェクトの配列として保存することを考えています。各オブジェクトは次の3つの要素で構成されています。(1)日付。(2)国; (3)価格。

2)価格データをオブジェクトとして配列に格納する場合、価格データに対する検索を非常に高速にするために何をする必要がありますか。繰り返しになりますが、一般的な価格検索は、「米国のストアで2日後に価格が0.00ドルに下がったすべてのアプリを検索する」のようなものです。

3)データを保存する際に注意すべき落とし穴はありますか?

4

1 に答える 1

3

個人的には、毎日の価格データを個別に収集します。アプリごとに1日あたり1レコード(複合自然キー)を使用し、その日のアプリの100個の数値を設定します。このようにして、レコードを拡大したり再配置したりする必要がなくなります。これは大きなメリットです。適切なインデックスを使用すると、このコレクションに対するほとんどのクエリを適切に実行できます。より効率的なストレージのために、フィールド名は小さくしてください。

アプリの「マスターデータ」用に個別のコレクションを保持します。アプリごとに1つのレコードです。これらのレコードでは、アプリが解放された最新の日付、最新の国別価格ベクトルのスナップショット、およびアプリ検索の選択基準を形成する可能性のある他の「要約」データの同様のスナップショット値をメモできます。このような値を計算して記録するための集計は、コストがかかる可能性がある場合は、都合のよいときにバックグラウンドで実行できます。

それが助けになることを願っています!これらの質問を前もって行っているのは素晴らしいことです。:)

于 2013-02-26T22:47:45.790 に答える