Mongo $dans le rendement de l'opérateur
Est-il lent /pauvres utiliser le formulaire de dollars dans l'opérateur dans MongoDB avec un large éventail de possibilités?
posts.find({
author : {
$in : ['friend1','friend2','friend3'....'friend40']
}
})
App Engine, par exemple, ne vous laissera pas utiliser plus de 30 parce qu'ils se traduisent directement à une requête par l'élément dans le tableau, et donc au lieu de vous forcer à utiliser leur méthode pour le traitement fan. Alors que c'est probablement la méthode la plus efficace de Mongo trop, le code est beaucoup plus complexe donc je préfère le il suffit d'utiliser cette méthode générique.
Sera Mongo exécuter ces $dans les requêtes de manière efficace pour raisonnable de la taille d'ensembles de données?
- Avez-vous quelque indice sur votre champ d'auteur ?
- Bonjour @Derek Dahmer , pourriez-vous résoudre ce problème? J'ai du faire avec ce problème. Cet architecte nommé Bord de la Collecte par MongoDB aujourd'hui 🙂 Moi aussi souhaitez utiliser $en paramètre avec d'énormes tableaux. Mais je méfiez-vous de l'impact sur les performances! image.slidesharecdn.com/socialitept2-140724104718-phpapp01/95/...
Vous devez vous connecter pour publier un commentaire.
Il peut être assez efficace avec de petites listes (difficile de dire ce qui est petit, mais au moins dans les dizaines/centaines) de $dans. Il ne fonctionne pas comme app-engine depuis mongodb a index btree et n'est pas une colonne magasin comme bigtable.
Avec $en il va sauter dans l'index pour trouver les documents correspondants, ou à pied à travers l'ensemble de la collection, s'il n'y a pas un indice à utiliser.
En supposant que vous avez créé index sur la
author
champ, de l'algorithmique point de vue, la complexité du temps de$in
opération:$(N*log(M))
, oùN
est la longueur du tableau d'entrée etM
est la taille de la collection.La complexité du temps de
$in
opération pas changer sauf si vous modifiez une base de données (Bien que je ne pense pas que toute db peut briserO(N*log(M))
).Cependant, du point de vue technique, si
N
va à un grand nombre, il est préférable de laisser votre logique métier de serveur pour simuler la$in
opération, soit par lot ou un par un.C'est tout simplement parce que: la mémoire dans les serveurs de base de données, c'est bien plus précieuse que celle de la mémoire dans une logique d'entreprise serveurs.
Si vous créez un index (ensureIndex) sur l'élément de la liste, il devrait être assez rapide.
Avez-vous essayé d'expliquer (le)? Ses un bon moyen intégré de profil de vos requêtes:
http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ#IndexingAdviceandFAQ-Use%7B%7Bexplain%7D%7D.