Comment effectuer une sélection haute performance de 10 éléments plus ou moins, puis savoir à quel moment l'utilisateur actuel a déjà consulté l'élément dans mongodb ?[fermé]

StackOverflow https://stackoverflow.com//questions/23047119

Question

J'aimerais implémenter une fonctionnalité comme sur YouTube où vous savez quelles vidéos vous avez vues.

J'ai des solutions:

  • Stockez les vidéos lues dans le stockage local et utilisez ces données pour mettre à jour l'interface utilisateur.(Cela nécessitera une charge de données élevée au démarrage si les données ne sont pas déjà dans le stockage et que l'utilisateur a visionné beaucoup de vidéos)
  • Bien sûr, stockez les données dans un tableau et, après avoir obtenu les résultats de la requête, obtenez chaque information vidéo liée à l'utilisateur actuel.Cette façon nécessiterait trop de requêtes à mon avis.

Que pourriez-vous suggérer ?

Était-ce utile?

La solution

Bien sûr, stockez les données dans un tableau et, après avoir obtenu les résultats de la requête, obtenez chaque information vidéo liée à l'utilisateur actuel.Cette façon nécessiterait trop de requêtes à mon avis.

Je ne vois pas en quoi cela nécessite beaucoup de requêtes, il n'en faut que deux :un "régulier", un utilisant $in:

En supposant une collection videos { _id, title, description, uploader, date, ... } et une collection userRecentVideos { userId, videoIds : [1, 912, 234234, ... ] },

cela fera :

var recent = db.userRecentVideos.find({"userId" : myUserId})[0].videoIds;
var videoInfo = db.videos.find({"_id" : {$in : recent}});

Alternativement, vous pouvez exposer un getVideoInfos Point de terminaison HTTP qui accepte une liste d'identifiants et renvoie une liste de méta-informations vidéo.

Le videoIds devrait avoir une taille fixe et devrait être initialisé à 0 ou quelque chose du genre afin que le tableau ne grandisse pas tout le temps.

Si vous voulez vraiment stocker l'intégralité de l'historique, il serait préférable de ne pas utiliser de tableau intégré mais d'en faire une collection d'éditeurs de liens comme ceci :

videoHistory { _id, userId, videoId }

Mettre un index {_id, userId}, et vous pouvez obtenir les n vidéos les plus récemment lues pour chaque utilisateur, en supposant _id est une clé monotone telle qu'un identifiant d'objet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top