検索

ホームページ  >  に質問  >  本文

mongodb - Python中mongo 高效排序

1.如何使用python对mongodb中的多个collection中的数据分析后做排序?

2.具体的使用场景是这样的,假设有如下model: 用户表,用户购买记录表。

假设记录表中存有用户每次买东西所花的钱,那么问题来了,如何将用户已购买东西花费金额的
累计和(假设此类统计字段有5个),做降序排列?

3.场景为我为了说明问题虚构的,事实上有很多统计字段,假设用户表中有100w条记录,记录表100w条数据,服务器4核8线程,能否做到每20条数据的等待时间不超过3s?

4.假设在统计完每个用户的所有数据后用sorted进行排序,是否效率真的会很低?

PHP中文网PHP中文网2810日前470

全員に返信(3)返信します

  • PHPz

    PHPz2017-04-18 09:38:48

    フィルターする必要がある対応するフィールドに対して mongodb のインデックスを有効にします (mongodb は 1 つのコレクションで複数のインデックスをサポートします)。つまり、インデックスはハッシュテーブルを使用するため、はるかに高速になるはずです。また、並べ替えには mongodb 独自の API を使用できます。 、私は 100W の状況に遭遇したことはありませんが、比較として、1~10W のサイズは 500ms の範囲内にあると記憶しています。

    さらに、カウントする必要があるデータが非常に重要で呼び出し頻度が高い場合は、別のコレクションを作成し、定期的にキュー キャッシュを呼び出し、時間と引き換えにスペースを確保することをお勧めします。フィールド、ユーザー ID、最近 3 時間の合計購入数、過去 12 時間、過去 24 時間、過去 1 日、過去 1 か月、過去の合計購入量など。これの欠点は、スペースを無駄にし、データをリアルタイムに反映することはできませんが、ユーザーのショッピング量をクエリしたい場合は、ミリ秒単位の応答で簡単なクエリを実行できるというメリットは明らかです。

    上記は一家族の意見であり、参考のみです

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:38:48

    すべての収集データをメモリにロードして処理できます。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 09:38:48

    Mongodb は複数のコレクションからのデータを処理するのが苦手なので、データ自体を設計するときにそれらをすべて集約するのが最善です。

    単一コレクションのクエリのインデックスを作成します。クエリの使用順序は次のとおりです: 基本的なクエリ -> 集計 -> クエリ方法は左から右に向かってますます柔軟になります。どんどん低くなっていきます。

    複数のコレクションのクエリを自分で実装し、各コレクションから個別にクエリを実行し、複数のクエリ結果を処理する必要があります。

    特に高い適時性要件がある場合は、中間キャッシュ層を使用し、更新戦略を設計します。

    返事
    0
  • キャンセル返事