Tout d'abord, cette question est en fait soulevée dans la prochaine version pour 8MB
o 16MB
... mais je pense que pour mettre tout cela en perspective, c'est Eliot de 10gen (qui a développé MongoDB) qui le dit le mieux :
EDITAR: La taille a été officiellement élevé" à 16MB
Donc, sur votre exemple de blog, 4MB est en fait beaucoup Par exemple, le texte complet non compressé de "La guerre des des mondes" est seulement 364k (html) : http://www.gutenberg.org/etext/36
Si ton article de blog est si long avec de commentaires, je ne vais pas le lire ne le lirai pas :)
Pour les trackbacks, si vous leur consacrez 1MB à eux, vous pourriez facilement avoir plus de plus de 10k (probablement plus proche de 20k)
Donc, sauf pour les situations vraiment bizarres des situations vraiment bizarres, ça marchera très bien. Et dans l'exception du cas ou du spam, je n'ai vraiment que vous ne voudriez pas d'un objet de 20mb de toute façon. Je pense que plafonner les trackbacks à 15k ou plus, ça a beaucoup de sens, peu importe quoi que ce soit pour les performances. Ou au moins au moins une enveloppe spéciale si jamais cela arrive.
-Eliot
Je pense que vous aurez du mal à atteindre la limite ... et avec le temps, si vous mettez à niveau ... vous aurez à vous inquiéter de moins en moins.
L'objectif principal de cette limite est de ne pas utiliser toute la mémoire vive de votre serveur (car vous devez charger toutes les données de l MB
du document dans la RAM lorsque vous l'interrogez).
La limite est donc d'un certain pourcentage de la RAM normalement utilisable sur un système commun... qui ne cessera d'augmenter d'année en année.
Note sur le stockage des fichiers dans MongoDB
Si vous avez besoin de stocker des documents (ou des fichiers) plus volumineux que 16MB
vous pouvez utiliser le API GridFS qui décomposera automatiquement les données en segments et vous les transmettra en continu (évitant ainsi le problème des limites de taille/RAM).
Au lieu de stocker un fichier dans un seul document, GridFS divise le fichier en parties, ou chunks, et stocke chaque chunk comme un document séparé.
GridFS utilise deux collections pour stocker les fichiers. Une collection stocke les morceaux de fichiers, et l'autre stocke les métadonnées des fichiers.
Vous pouvez utiliser cette méthode pour stocker des images, des fichiers, des vidéos, etc. dans la base de données, comme vous le feriez dans une base de données SQL. J'ai même utilisé cette méthode pour stocker des fichiers vidéo de plusieurs gigaoctets.
6 votes
Je pense que la question devrait préciser qu'il s'agit d'une limitation de la taille des documents stockés dans MongoDB et non du format BSON.
3 votes
Pourtant, je viens d'essayer d'enregistrer un énorme document qui dépasse très certainement les 4 Mo pour obtenir le message "BSON::InvalidDocument : Document trop grand : Les documents BSON sont limités à 4194304 octets". Si c'est le cas, le message d'avertissement/d'erreur n'est-il pas un peu trompeur ?
25 votes
Vous pouvez facilement trouver la taille maximale de votre document BSON avec
db.isMaster().maxBsonObjectSize/(1024*1024)+' MB'
dansmongo
coquille.9 votes
Quel est le but de nosql sans schéma où vous ne pouvez pas vider les enregistrements de plus de 16 mb et construire une opération crud par dessus !
3 votes
Je pense que la citation initiale dit tout... La limite est en place pour éviter une mauvaise conception des schémas. Si, par exemple, vous avez un article avec de nombreux commentaires, vous voudrez une collection d'articles de blog et une collection de commentaires, ou une collection de modifications. La conception de mongo/nosql permet des choses de taille massive comme des réseaux de documents, mais le développeur doit les décomposer en parties qui ont un sens. Si aucune limite de taille n'est fixée, d'autres problèmes se produiront. Je pense que la limite de 4mb était bien. 16mb, super ! Mais si j'écris un document de 16 mb, c'est un indice que quelque chose d'autre ne va pas dans la conception.