J'ai une application qui utilise mongo pour stocker des données de vie de courte durée. Toutes les données de plus de 45 minutes est supprimé par le script quelque chose comme:MongoDB - la taille du fichier est énorme et en croissance
oldSearches = [list of old searches]
connection = Connection()
db = connection.searchDB
res = db.results.remove{'search_id':{"$in":oldSearches}})
J'ai vérifié l'état actuel -
>db.results.stats()
{
"ns" : "searchDB.results",
"count" : 2865,
"size" : 1003859656,
"storageSize" : 29315124464,
"nindexes" : 1,
"ok" : 1
}
Ainsi, selon cette 1Go de données de stockage occupe 29FR. dossier de données ressemble à ceci (Vous pouvez voir que de nombreux fichiers sont très anciens - dernier accès au milieu de mai):
ls -l /var/lib/mongodb/
total 31506556
-rwxr-xr-x 1 mongodb nogroup 6 2011-06-05 18:28 mongod.lock
-rw------- 1 mongodb nogroup 67108864 2011-05-13 17:45 searchDB.0
-rw------- 1 mongodb nogroup 134217728 2011-05-13 14:45 searchDB.1
-rw------- 1 mongodb nogroup 2146435072 2011-05-20 20:45 searchDB.10
-rw------- 1 mongodb nogroup 2146435072 2011-05-28 00:00 searchDB.11
-rw------- 1 mongodb nogroup 2146435072 2011-05-27 13:45 searchDB.12
-rw------- 1 mongodb nogroup 2146435072 2011-05-29 16:45 searchDB.13
-rw------- 1 mongodb nogroup 2146435072 2011-06-07 13:50 searchDB.14
-rw------- 1 mongodb nogroup 2146435072 2011-06-06 01:45 searchDB.15
-rw------- 1 mongodb nogroup 2146435072 2011-06-07 13:50 searchDB.16
-rw------- 1 mongodb nogroup 2146435072 2011-06-07 13:50 searchDB.17
-rw------- 1 mongodb nogroup 2146435072 2011-06-06 09:07 searchDB.18
-rw------- 1 mongodb nogroup 268435456 2011-05-13 14:45 searchDB.2
-rw------- 1 mongodb nogroup 536870912 2011-05-11 00:45 searchDB.3
-rw------- 1 mongodb nogroup 1073741824 2011-05-29 23:37 searchDB.4
-rw------- 1 mongodb nogroup 2146435072 2011-05-13 17:45 searchDB.5
-rw------- 1 mongodb nogroup 2146435072 2011-05-18 17:45 searchDB.6
-rw------- 1 mongodb nogroup 2146435072 2011-05-16 01:45 searchDB.7
-rw------- 1 mongodb nogroup 2146435072 2011-05-17 13:45 searchDB.8
-rw------- 1 mongodb nogroup 2146435072 2011-05-23 16:45 searchDB.9
-rw------- 1 mongodb nogroup 16777216 2011-06-07 13:50 searchDB.ns
-rw------- 1 mongodb nogroup 67108864 2011-04-23 18:51 test.0
-rw------- 1 mongodb nogroup 16777216 2011-04-23 18:51 test.ns
Selon « top » mongod utilise 29G de mémoire virtuelle (et 780Mb de RSS)
Pourquoi ai-je de telles valeurs anormales? Ai-je besoin d'exécuter quelque chose de supplémentaire à la fonction .remove() pour nettoyer la base de données des anciennes valeurs?
Sur intérêt, avez-vous enquêté sur l'utilisation des collections plafonnés pour ce genre de problème? Cela supprimerait les problèmes d'espace disque, supprimerait le besoin d'un script de suppression et pourrait rendre l'application plus rapide ... – Rich
En tant que sidenote: Pour ces données de courte durée, j'utiliserais Redis qui prend en charge expire-timeout sur toutes les données. –
Mongo est juste lourd de stockage. BSON prend beaucoup de place car il stocke le nom complet de la clé ainsi que la valeur de chaque champ dans un document. Comme d'autres l'ont dit, il existe des solutions de contournement, mais vous devrez accepter l'utilisation d'un système de fichiers volumineux si vous utilisez MongoDB. –