2013-04-15 6 views
0

J'ai une base de données GridFS MongoDB dont j'ai besoin pour gérer la taille de. Il fonctionne très bien depuis sa création, mais je n'ai jamais vraiment regardé sa taille de disque jusqu'à maintenant.Comment puis-je gérer la taille de disque d'une base de données GridFS MongoDB?

A en juger par cette outout de la commande db.stats()

> db.stats() 
{ 
    "db" : "documents", 
    "collections" : 4, 
    "objects" : 10967, 
    "avgObjSize" : 52491.573994711405, 
    "dataSize" : 575675092, 
    "storageSize" : 595255296, 
    "numExtents" : 24, 
    "indexes" : 4, 
    "indexSize" : 686784, 
    "fileSize" : 2080374784, 
    "nsSizeMB" : 16, 
    "ok" : 1 
} 

il semble que la base de données elle-même est à peu près 600Mo. Cette taille a du sens pour moi car elle est la même taille que les sauvegardes de base de données que je reçois de mongodump. La taille du fichier est beaucoup plus grand que, et il y a pire quand je regarde dans le répertoire de données lui-même dans /var/lib/mongodb:

[email protected]:/var/lib/mongodb# ls -la 
total 2474036 
drwxr-xr-x 5 mongodb mongodb  4096 Apr 15 09:28 . 
drwxr-xr-x 62 root root   4096 Mar 4 07:48 .. 
drwxr-xr-x 2 mongodb mongodb  4096 Apr 13 11:48 documents 
-rw------- 1 mongodb mongodb 67108864 Apr 15 09:16 documents.0 
-rw------- 1 mongodb mongodb 134217728 Apr 13 11:48 documents.1 
-rw------- 1 mongodb mongodb 268435456 Apr 13 11:48 documents.2 
-rw------- 1 mongodb mongodb 536870912 Apr 15 09:16 documents.3 
-rw------- 1 mongodb mongodb 1073741824 Apr 13 11:50 documents.4 
-rw------- 1 mongodb mongodb 16777216 Apr 15 09:16 documents.ns 
drwxr-xr-x 2 mongodb mongodb  4096 Apr 13 11:50 journal 
-rwxr-xr-x 1 mongodb mongodb   5 Apr 13 11:46 mongod.lock 
drwxr-xr-x 2 mongodb mongodb  4096 Apr 15 09:28 _tmp 
-rw------- 1 mongodb mongodb 67108864 Apr 15 09:28 -v.0 
-rw------- 1 mongodb mongodb 67108864 Apr 15 09:28 v.0 
-rw------- 1 mongodb mongodb 134217728 Apr 15 09:28 -v.1 
-rw------- 1 mongodb mongodb 134217728 Apr 15 09:28 v.1 
-rw------- 1 mongodb mongodb 16777216 Apr 15 09:28 -v.ns 
-rw------- 1 mongodb mongodb 16777216 Apr 15 09:28 v.ns 

Et ceci /var/lib/mongodb/journal:

[email protected]:/var/lib/mongodb/journal# ls -la 
total 3145752 
drwxr-xr-x 2 mongodb mongodb  4096 Apr 13 11:50 . 
drwxr-xr-x 5 mongodb mongodb  4096 Apr 15 09:28 .. 
-rw------- 1 mongodb mongodb 1073741824 Apr 15 09:28 j._2 
-rw------- 1 mongodb mongodb   88 Apr 15 09:28 lsn 
-rw------- 1 mongodb mongodb 1073741824 May 5 2012 prealloc.1 
-rw------- 1 mongodb mongodb 1073741824 May 5 2012 prealloc.2 

Maintenant, corrigez-moi si je me trompe , mais je regarde essentiellement à la taille de disque de 5,5 Go pour une base de données de 600 Mo. C'est plutôt inefficace.

Comment puis-je réduire la taille du disque? Y a-t-il une commande similaire à OPTIMIZE TABLE dans MySQL?

Je ne sais pas si GridFS est une bête différente d'une base de données régulière, mais j'ai essayé d'exécuter compact mais cela n'a rien changé à la taille du disque.

Et les fichiers journaux? Puis-je réduire la taille du disque de tous les fichiers journaux?

+1

cela n'a rien à voir avec GridFS. Le journal est là pour fournir une durabilité, et MongoDB préalloue toujours les fichiers avant qu'ils en aient besoin. Quand tu mongodump tu n'obtiens pas les fichiers pré-alloués ni le journal. Si vous voulez avoir une plus petite DB, regardez les options --smallfiles et --noprealloc à mongod. Je ne recommande pas de courir sans journalisation jamais. –

+0

Asya: à la fois '--smallfiles' et' --noprealloc' sont pour le journalisation à droite? Je vais essayer le premier et pas le dernier car je veux toujours la journalisation. Que diriez-vous des fichiers de base de données eux-mêmes Si je suis moins loin la journalisation je regarde encore> 2 Go pour une base de données de 600 Mo ... – c00kiemonster

+2

ni - ils sont pour les fichiers de données. c'est seulement si les fichiers sont alloués au besoin ou à l'avance et s'ils sont toujours plus gros. ne pas désactiver la journalisation la seule façon de le faire est --nojournal. –

Répondre

1

Le problème avec les fichiers volumineux n'est pas spécifique à GridFS.

Le journal est là pour fournir une durabilité, et MongoDB préalloue toujours les fichiers avant qu'ils en aient besoin. Je recommande de ne rien modifier ici, c'est-à-dire de continuer à utiliser la journalisation pour protéger vos fichiers en cas de blocage inattendu du serveur.

Vous voyez des fichiers beaucoup plus petits avec mongodump car vous n'obtenez pas les fichiers de données pré-alloués ni les fichiers journaux.

Si vous voulez avoir un plus petit répertoire DB, je recommande d'examiner les options --smallfiles et --noprealloc pour mongod. Les deux affectent un lorsque l'espace est alloué et combien est alloué à la fois.

+0

J'ai trouvé un certain nombre de personnes demandant sur la stabilité etc en utilisant '--smallfiles'.Dans mon exemple relativement petit tout fonctionne parfaitement bien, avec une utilisation du disque plus petite exactement comme annoncé. Je ne peux pas vraiment remarquer de différence du tout. – c00kiemonster

+0

Cela n'a aucun rapport avec la stabilité - la seule différence sera la performance car une fois que vous remplissez un fichier, vous devrez attendre l'allocation du fichier suivant (avec --noprealloc) et avec --smallfiles vous devrez attendre les fichiers plus souvent. –

Questions connexes