Je recherche des conseils sur la manière d'améliorer les performances de la base de données dans la situation suivante.
En tant qu'application exemple, j'ai écrit une application assez simple aujourd'hui qui utilise l'API de streaming Twitter pour rechercher certains mots-clés, puis je Je stocke les résultats dans MongoDB. L'application est écrite avec node.js. P>
Je stocke 2 collections. On stocke le mot-clé et un tableau d'identifiant Tweet's cette référence chaque tweet a été trouvé mentionné sur ce mot-clé. Celles-ci sont ajoutées à la base de données à l'aide de .update () avec {upsert: true} de sorte que les nouveaux identifiants sont ajoutés à la matrice 'IDS'. P>
Un exemple de document de cette collection ressemble à ceci: p>
{ "_ID": ObjecteID ("4E00645EF58A7AD3FC9FD9F9"), "IDS": ["ID1", "ID2", "ID3"], "mot-clé": "#chocolate" } p>
code de mise à jour: p> La 2e collection ressemble à ceci et ajoute simplement à l'aide de .save () P> {
"twt_id": "id1",
"tweet": { //big chunk of json that doesn't need to be shown }
}
3 Réponses :
Vous êtes sur le bon chemin. La partie de requête de votre mise à jour a besoin d'un index, sinon il exécute une analyse de table. Un index indexé sur le mot-clé et vous verrez de manière significative la performance de la mise à jour. p>
Si vous prévoyez non seulement hors ligne de traitement de la numérisation de la table complète, vous devez ajouter tous vos index pour les recherches, vous devez donc mesurer la performance pratique des inserts.
Merci Brendan. M'a pris quelques jours pour revenir à cela. J'ai couru l'application pendant une bonne heure pour que la CPU soit sauvegardée. J'ai arrêté l'application, ajouté l'index et redémarré. Maintenant, Mongo utilise 1,0-1,4% de processeur. Je dois le laisser courir pendant un moment pour voir quelle est la performance à long terme, mais c'était un avantage énorme. Merci.
Il est très probable que vous frappiez un cou de bouteille très courant à MongoDB. Depuis que vous mettez à jour les documents très fréquemment en ajoutant des chaînes, vous risquez de courir de l'espace pour ce document et de forcer la base de données pour déplacer constamment ce document dans un espace différent de la mémoire \ Disque en la réécrivez à la fin de la queue. du fichier de données. P>
L'ajout d'index ne peut blesser les performances de l'écriture que de manière à ne pas aider à améliorer les performances à moins que vous ne soyez lu lourd. P>
Je envisagerais de changer votre logique d'application pour le faire: P>
IDS CODE> en ajoutant un tas de fausses chaînes dans la matrice. Ensuite, immédiatement après l'avoir inséré, supprimez tout l'identifiant de ce tableau. Cela causera que Mongodb affecte une place supplémentaire pour tout le document afin que lorsque vous commencez à ajouter des identifiants au champ IDS, il aura beaucoup de place à cultiver. Li>
- Insérez l'ID du Tweet dans le champ CODE> IDS CODE> LI>
ol>
Je suivrais la recommandation sur le champ de mots-clés et je tiens également aux avertissements de la relocalisation des documents. Dans les versions modernes, vous pouvez spécifier le facteur de rembourrage dans la collection, afin de créer automatiquement plus de place pour chaque entrée.
@ Pestilence669 Je pensais que le facteur de rembourrage est calculé de manière dynamique - vous ne pouvez pas la définir. Savez-vous un moyen?
@Spektom Droite, que je suggérais de simuler un facteur de rembourrage personnalisé avec des espaces blancheurs ou de ces données indésirables
https://docs.mongodb.com/ Manuel / Référence / Opérateur / Mise à jour / Positionnelle / # Up. s em> p>
J'espère vous aider! p>
L'opérateur de positionnement $ identifie un élément dans une matrice à mettre à jour sans spécifier explicitement la position de l'élément dans la matrice. HTTPS: //gevideo.pro/watch/mongodb-querying-sub-documents-and-Un-the-pérator-in-projection-vid-fevykbdw0iw ou: https://gevideo.pro/watch/MONGODB -A-to-Z-Video-18-Mise à jour-Multiple-documents-avec-la positionnée-opérateur-Vid-Z2DTXBKTTEQ P>
Un macbook avec un disque lent est peu probable le bon choix pour effectuer des points de repère et parler de problèmes de performance..ven avec le nouveau matériel MacBook
@Blackmoon La réponse acceptée suggère autrement.