2011-06-07 15 views
13

मेरे पास एक ऐसा एप्लिकेशन है जो छोटे जीवित डेटा को संग्रहीत करने के लिए मोंगो का उपयोग करता है। सभी डेटा 45 मिनट से अधिक उम्र की तरह स्क्रिप्ट कुछ द्वारा हटा दिया जाता:मोंगोडीबी - फ़ाइल का आकार बड़ा और बढ़ रहा है

oldSearches = [list of old searches] 
connection = Connection() 
db = connection.searchDB 
res = db.results.remove{'search_id':{"$in":oldSearches}}) 

मैं वर्तमान स्थिति देख लिया है -

>db.results.stats() 
{ 
     "ns" : "searchDB.results", 
     "count" : 2865, 
     "size" : 1003859656, 
     "storageSize" : 29315124464, 
     "nindexes" : 1, 
     "ok" : 1 
} 

तो, डेटा के इस 1GB के अनुसार भंडारण के 29GB पर है। डेटा फ़ोल्डर की तरह इस (आप कि कई फाइलों बहुत पुराने हैं देख सकते हैं - पिछले मई के बीच में पहुँचा) दिखता है:

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 

के अनुसार "टॉप" mongod आभासी स्मृति के 29G (और राष्ट्रीय स्वयंसेवक संघ के 780Mb) का उपयोग करता

मेरे पास ऐसे असामान्य मूल्य क्यों हैं? क्या मुझे पुराने मानों से डेटाबेस को साफ करने के लिए .remove() फ़ंक्शन में कुछ अतिरिक्त चलाने की आवश्यकता है?

+2

, तो आप इस तरह की समस्या के लिए छाया हुआ संग्रह का उपयोग कर जांच की है यह यह सब बताते हैं? यह डिस्क स्थान की समस्याओं को हटा देगा, हटाने की स्क्रिप्ट की आवश्यकता को हटा देगा और ऐप को तेज़ी से बना सकता है ... – Rich

+1

एक sidenote के रूप में: ऐसे अल्पकालिक डेटा के लिए मैं रेडिस का उपयोग करूंगा जो किसी भी डेटा पर समय-समय पर समाप्त होने का समर्थन करता है। –

+1

मोंगो सिर्फ सादा भंडारण भारी है। बीएसओएन बहुत सारी जगह लेता है क्योंकि यह दस्तावेज़ में प्रत्येक फ़ील्ड के लिए पूर्ण कुंजी नाम के साथ-साथ मूल्य भी संग्रहीत करता है। जैसा कि अन्य ने कहा है, कामकाज हैं, लेकिन यदि आप MongoDB का उपयोग करते हैं तो आपको बड़ी फ़ाइल सिस्टम उपयोग को स्वीकार करने की आवश्यकता होगी। –

उत्तर

23

आभासी स्मृति आकार और निवासी आकार mongod प्रक्रिया के लिए बहुत बड़ी होने के लिए दिखाई देगा। यह सौम्य है: वर्चुअल मेमोरी स्पेस डेटाफाइल के आकार और मैप किए गए आकार के आकार से बड़ा होगा; निवासी आकार मशीन पर अन्य प्रक्रियाओं द्वारा उपयोग की जाने वाली स्मृति की मात्रा के आधार पर अलग-अलग होगा।

http://www.mongodb.org/display/DOCS/Caching

जब आप MongoDB संग्रह से एक वस्तु निकालने के लिए, अंतरिक्ष यह कब्जा कर लिया स्वचालित रूप से कचरा एकत्र और नए रिकॉर्ड केवल डेटा फ़ाइलों के अंत में जोड़ा जाता है, उन्हें बड़ा और बड़ा हो जाना नहीं बना है।

http://www.mongodb.org/display/DOCS/Excessive+Disk+Space

शुरुआत के लिए, बस का उपयोग करें::

db.repairDatabase() 
ब्याज में से
+0

जहां तक ​​मैंने पढ़ा - मरम्मत पूरी तरह से थोड़ी देर के लिए mongodb ब्लॉक करेगा - सही? क्या आपकी कोई उम्मीद है - इसमें कितना समय लगेगा? – Andrew

+4

@Andrew: आप डेटाबेस फ़ाइलों की प्रतिलिपि बना सकते हैं और यह देखने के लिए कि यह कितना लेगा, किसी भी उत्पादन सर्वर पर 'db.repairDatabase() 'चलाएं। –

+5

मुझे पता है कि यह टिकट पुराना है, लेकिन ऐसा लगता है कि मोंगो व्यवहार तब से नहीं बदला है; क्या अंतरिक्ष को साफ करने के लिए वास्तव में कोई बेहतर तरीका नहीं है, अन्यथा आपके पूरे उत्पादन उदाहरण को लॉक करना? क्या यह सिर्फ मुझे यह परेशान लगता है? – JMac

संबंधित मुद्दे