HOWTO · MongoDB
Taille maximale des documents MongoDB
Ce tutoriel décrit la limite de taille de document maximale dans MongoDB. Il indique également comment utiliser efficacement la limite de taille BSON par défaut et stocker les données si elle dépasse la limite de stockage des documents.
Sur cette page
MongoDB limite chaque document BSON à 16 MB. Si un enregistrement dépasse cette taille, réduisez sa taille une fois encodé ou répartissez certaines données dans d’autres documents. Pour les fichiers volumineux, envisagez GridFS. Cette limite s’applique à chaque document, et non à la taille totale d’une collection ni à un fichier représenté par plusieurs documents GridFS.
Taille maximale d’un document BSON dans MongoDB
MongoDB stocke les enregistrements au format BSON, un format binaire pour les documents de type JSON. BSON prend en charge des types de données supplémentaires, comme les dates et les données binaires. La documentation de MongoDB sur les limites indique qu’un document BSON peut mesurer jusqu’à 16 MB et que la profondeur d’imbrication maximale est de 100 niveaux. Les tableaux et les documents imbriqués contribuent à cette profondeur.
La limite porte sur le document BSON encodé, y compris les noms des champs, les marqueurs de type, les longueurs et les autres éléments structurels. La taille d’une chaîne JSON ou le nombre de valeurs ne suffit donc pas à déterminer si un document respectera la limite. Lors de la conception de vos enregistrements, prévoyez une marge sous le maximum et mesurez des documents représentatifs à l’aide des outils BSON du pilote de votre application avant de vous fier à une estimation.
Comment GridFS stocke les fichiers qui dépassent la limite de taille d’un document
GridFS est une spécification MongoDB permettant de stocker et de récupérer des fichiers plus volumineux que la limite d’un document unique. Une implémentation de GridFS divise le fichier en fragments stockés dans des documents distincts. Par défaut, les métadonnées du fichier sont stockées dans la collection fs.files et les données des fragments dans la collection fs.chunks. Un document de fichier identifie le fichier, et chaque fragment y fait référence au moyen de files_id.
Cette structure permet de traiter un fichier volumineux par morceaux ; elle n’autorise pas un document BSON unique à dépasser la limite. Pour téléverser, récupérer ou diffuser un fichier, utilisez la prise en charge de GridFS fournie par votre pilote MongoDB. La taille des fragments et les détails de l’API varient selon l’implémentation et la configuration : consultez donc la documentation du pilote utilisé.
Comment respecter la limite de taille d’un document BSON
Commencez par repérer les champs qui représentent la plus grande part de la taille encodée. Supprimez les données qui peuvent être calculées, évitez de répéter de grandes valeurs et privilégiez des représentations compactes lorsqu’elles restent claires et faciles à maintenir. La compression d’une chaîne dans le code de l’application n’est utile que si celle-ci peut stocker et interpréter les données binaires obtenues ; elle ajoute aussi des contraintes de traitement et de compatibilité.
Lorsqu’un champ contient un petit ensemble de chaînes répétées, l’encodage par dictionnaire permet de stocker chaque chaîne distincte une seule fois et de représenter ses occurrences par un index. L’exemple Python suivant illustre cette transformation en mémoire ; il ne calcule pas la taille BSON et ne se connecte pas à MongoDB.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
values = ["pending", "complete", "pending", "pending"]
dictionary = list(dict.fromkeys(values))
indexes = [dictionary.index(value) for value in values]
print(dictionary)
print(indexes)
L’encodage par dictionnaire peut réduire la quantité de texte répétée, mais les index rendent les enregistrements plus difficiles à lire et nécessitent que le dictionnaire reste disponible et cohérent. Cette méthode peut être inefficace si les valeurs sont majoritairement uniques, et la structure ajoutée a elle aussi un coût. Mesurez des documents BSON représentatifs au lieu de supposer qu’une transformation suffira à respecter la limite.
Choisir une stratégie de stockage lorsque les données dépassent la limite
Choisissez un document plus petit lorsque les données vont ensemble et peuvent être représentées plus compactement sans perte d’informations nécessaires. Répartissez-les entre des documents liés lorsque certaines parties ont leur propre cycle de vie ou sont lues indépendamment. Conservez un identifiant stable ou une référence pour que l’application puisse retrouver les enregistrements associés. Cette approche peut nécessiter des lectures supplémentaires lors des requêtes et demande de gérer avec soin les mises à jour liées.
Utilisez GridFS pour les fichiers volumineux, comme des images, des fichiers audio ou des vidéos, lorsque l’application a besoin des fonctions de stockage et de récupération de fichiers de MongoDB. Conservez les attributs consultables ou fréquemment interrogés dans des documents ordinaires et stockez une référence vers le fichier GridFS. GridFS n’est pas la solution par défaut à tout enregistrement trop volumineux : déterminez d’abord s’il s’agit d’un fichier, de données structurées liées ou simplement d’un document qui peut être réduit.