假设记录表中存有用户每次买东西所花的钱,那么问题来了,如何将用户已购买东西花费金额的
累计和(假设此类统计字段有5个),做降序排列?
PHPz2017-04-18 09:38:48
フィルターする必要がある対応するフィールドに対して mongodb のインデックスを有効にします (mongodb は 1 つのコレクションで複数のインデックスをサポートします)。つまり、インデックスはハッシュテーブルを使用するため、はるかに高速になるはずです。また、並べ替えには mongodb 独自の API を使用できます。 、私は 100W
の状況に遭遇したことはありませんが、比較として、1~10W
のサイズは 500ms
の範囲内にあると記憶しています。
さらに、カウントする必要があるデータが非常に重要で呼び出し頻度が高い場合は、別のコレクションを作成し、定期的にキュー キャッシュを呼び出し、時間と引き換えにスペースを確保することをお勧めします。フィールド、ユーザー ID、最近 3 時間の合計購入数、過去 12 時間、過去 24 時間、過去 1 日、過去 1 か月、過去の合計購入量など。これの欠点は、スペースを無駄にし、データをリアルタイムに反映することはできませんが、ユーザーのショッピング量をクエリしたい場合は、ミリ秒単位の応答で簡単なクエリを実行できるというメリットは明らかです。
上記は一家族の意見であり、参考のみです
ringa_lee2017-04-18 09:38:48
Mongodb は複数のコレクションからのデータを処理するのが苦手なので、データ自体を設計するときにそれらをすべて集約するのが最善です。
単一コレクションのクエリのインデックスを作成します。クエリの使用順序は次のとおりです: 基本的なクエリ -> 集計 -> クエリ方法は左から右に向かってますます柔軟になります。どんどん低くなっていきます。
複数のコレクションのクエリを自分で実装し、各コレクションから個別にクエリを実行し、複数のクエリ結果を処理する必要があります。
特に高い適時性要件がある場合は、中間キャッシュ層を使用し、更新戦略を設計します。