Maison  >  Questions et réponses  >  le corps du texte

mongodb - Python中mongo 高效排序

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

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

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

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

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

PHP中文网PHP中文网2741 Il y a quelques jours422

répondre à tous(3)je répondrai

  • PHPz

    PHPz2017-04-18 09:38:48

    Activez l'index de mongodb pour les champs correspondants que vous devez filtrer (mongodb prend en charge plusieurs index sous une seule collection), c'est-à-dire l'index puisqu'il utilise une table de hachage, il devrait être beaucoup plus rapide et vous pouvez utiliser la propre API de mongodb pour le tri. . , je n'ai jamais rencontré la situation de 100W, mais je me souviens que la taille de 1~10W semble être dans 500ms À titre de comparaison, sans ouvrir l'index, je ne peux pas vivre ma propre vie.

    De plus, si les données que vous devez compter sont très importantes et que la fréquence des appels est élevée, il est recommandé de créer une collection distincte, d'appeler régulièrement le cache de file d'attente et d'échanger de l'espace contre du temps. Cette collection peut avoir les éléments suivants. champs, identifiant utilisateur, récent Le nombre total d'achats au cours des 3 heures, les 12 dernières heures, les dernières 24 heures, la journée passée, le mois dernier, le volume total des achats dans le passé, etc. L'inconvénient est que cela gaspille de l'espace et ne peut pas refléter les données en temps réel, mais les avantages sont évidents. Si vous souhaitez interroger le volume d'achats d'un utilisateur, vous pouvez simplement l'interroger, avec une réponse en millisecondes

    .

    Ce qui précède n'est que l'opinion d'une famille et est à titre de référence seulement

    répondre
    0
  • 巴扎黑

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

    Vous pouvez charger toutes les données de la collection en mémoire, puis les traiter.

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 09:38:48

    Mongodb n'est pas doué pour traiter les données de plusieurs collections, il est donc préférable de les regrouper toutes ensemble lors de la conception des données elles-mêmes.

    Créez un index pour la requête d'une seule collection. L'ordre d'utilisation de la requête est : requête de base->agrégation->mapreduce. devenant de plus en plus bas.

    L'interrogation de plusieurs collections doit être mise en œuvre par vous-même, en interrogeant chaque collection séparément et en traitant plusieurs résultats de requête.

    Pour ceux qui ont des exigences de rapidité particulièrement élevées, utilisez une couche de cache intermédiaire et concevez une stratégie de mise à jour.

    répondre
    0
  • Annulerrépondre