मानगो संग्रह `आकार`` स्टोरेजाइज़` से * बड़ा * है?


9

मैंने हाल ही में कमांड का उपयोग करके अपने संग्रह को संकुचित किया है:

 db.<collectionName>.runCommand( "compact" )

और अब मेरा संग्रह आकार डिस्क पर आकार से बड़ा प्रतीत होता है!

SECONDARY> db.<collectionName>.stats()
{
"ns" : "<databaseName>.<collectionName>",
"count" : 2937359,
"size" : 5681676492,                   # 5.6 GB
"avgObjSize" : 1934.2805874256433,
"storageSize" : 4292853728,            # 4.2 GB
"numExtents" : 2,
"nindexes" : 2,
"lastExtentSize" : 2146426864,
"paddingFactor" : 1.669999999836597,
"flags" : 1,
"totalIndexSize" : 220735648,
"indexSizes" : {
    "_id_" : 162326304,
    "e_1_" : 58409344
},
"ok" : 1

}

मुझे समझ नहीं आता कि यह कैसे संभव है। हर समय सभी मोंगोडब संग्रह समर्थित-बाय-डिस्क नहीं हैं?

क्या कोई इन परिणामों की व्याख्या कर सकता है?


मैंने पहले भी ऐसे आँकड़े देखे हैं, लेकिन स्पष्टीकरण नहीं है। एक चलाने की कोशिश करो validate?
ईव फ्रीमैन

जवाबों:


6

storageSize इंडेक्स को छोड़कर, उस डेटा के सभी विस्तार का योग है।

ताकि संग्रह में 2 अतिरिक्त लगें, वे हैं ~ 2GB प्रत्येक, इसलिए ~ 4GB। sizeइंडेक्स शामिल हैं और मेरा मानना ​​है कि कुछ अन्य चीजें हैं जो संख्या को बढ़ाती हैं। न तो वास्तव में डिस्क पर उचित आकार का प्रतिनिधित्व करता है। डिस्क आकार के लिए, db.stats()एक फ़ाइल क्षेत्र है जो आपके इच्छित के करीब है मुझे लगता है कि आप ढूंढ रहे हैं।

विभिन्न क्षेत्रों का मतलब क्या है, यह जानने के लिए मैनुअल कुछ बेहतर है, संग्रह के लिए यहां देखें:

http://docs.mongodb.org/manual/reference/collection-statistics/

और यहाँ डेटाबेस आँकड़े के लिए:

http://docs.mongodb.org/manual/reference/database-statistics/


कुछ अन्य संभावित प्रासंगिक जानकारी:

कॉम्पैक्ट कमांड किसी भी डेटाफ़ाइल्स को सिकोड़ नहीं पाता है; यह केवल हटाए गए स्थान को डीफ़्रैग्मेन्ट करता है ताकि बड़ी वस्तुएं इसका पुन: उपयोग कर सकें। कॉम्पैक्ट कमांड डेटाबेस फ़ाइलों को कभी भी हटा या सिकोड़ नहीं पाएगी, और सामान्य तौर पर इसके काम करने के लिए अतिरिक्त स्थान की आवश्यकता होती है, आमतौर पर एक अतिरिक्त सीमा तक।

यदि आप डेटाबेस की मरम्मत करते हैं तो यह अनिवार्य रूप से डेटा फ़ाइलों को स्क्रैच से फिर से लिखेगा, जो पैडिंग को हटा देगा और उन्हें डिस्क पर स्टोर कर लेगा जैसा कि आप कुशलतापूर्वक प्राप्त करने जा रहे हैं। हालाँकि आपको ऐसा करने के लिए डिस्क पर आकार को ~ 2x करना होगा (वास्तव में कम, लेकिन यह एक अच्छा मार्गदर्शक है)।

एक और बात यहाँ ध्यान में रखना है - मरम्मत और कॉम्पैक्ट पैडिंग को हटा दें। पैडिंग फैक्टर 1 के बीच भिन्न होता है (दस्तावेजों के बढ़ने के कारण दस्तावेजों की कोई चाल नहीं), 2 तक (दस्तावेजों के बढ़ने से बहुत सारी चालें)। ~ 1.67 का आपकी गद्दी का कारक आपको बढ़ने का संकेत देगा (और इस कारण चालें) काफी बढ़ गया है।

जब आप किसी डेटाबेस को कॉम्पैक्ट या मरम्मत करते हैं तो आप उस पैडिंग को हटा देते हैं - बाद की दस्तावेज़ वृद्धि इसलिए पहले से भी अधिक चालों को ट्रिगर करने वाली है। चूँकि चालें बहुत अधिक महंगी होती हैं, इससे आपके प्रदर्शन पर गंभीर प्रभाव पड़ सकता है। अधिक जानकारी यहाँ:

http://www.mongodb.org/display/DOCS/Padding+Factor


आपकी प्रतिक्रिया के लिए धन्यवाद @ अदम, मैं गद्दी कारकों और कॉम्पैक्टिंग से कुछ हद तक परिचित हूं, इस उदाहरण में मुझे क्या भ्रमित करता है, कोई फर्क नहीं पड़ता कि हम कितने प्रभावी संघनन हैं, डेटाबेस में अधिक डेटा स्टोर करने में सक्षम नहीं होना चाहिए। हार्ड डिस्क! यानी, आप 4.2GB डिस्क में 5.6GB मोंगो डेटा कैसे फिट करते हैं?
क्रिस डब्ल्यू

4.2GB डिस्क सिर्फ डेटा है, 5.6GB डेटा प्लस इंडेक्स है, और फिर वास्तविक डिस्क आकार के लिए आपको संभवतः डेटाबेस स्तर के आंकड़ों को देखना होगा
एडम सी

मैं उसी चीज में भाग गया! क्या अजीब बात है कि उनके डॉक्टर में यह कहा गया है कि आकार सूचकांकों के लिए जिम्मेदार नहीं है: "इसके अतिरिक्त आकार में संग्रह से जुड़े किसी भी इंडेक्स का आकार शामिल नहीं है, जो कि टोटल इंडेक्सएक्ससाइज फील्ड रिपोर्ट है।"
MatijaSh

कारण यह हो सकता है कि आकार असंपीड़ित डेटा आकार प्रदर्शित करता है, जबकि भंडारण आकार खाते में संपीड़न लेता है। यह यहाँ db स्तर पर वर्णित है, लेकिन संग्रह के लिए भी लागू होता है: docs.mongodb.com/manual/reference/command/dbStats/…
MatijaSh

1

मोंगोडब के लिए> 3.x

For MMAPv1: 
datasize < storageSize

but For wiredTiger
datasize > storageSize (most cases due to compression but may be
                        storageSize greater, it varies on condition like
                        compression technique, whether compact/repair 
                        command run or not)

Db.getCollection ('नाम') के लिए। आँकड़े ()

size = total size in memory of all records in a collection + padding (excluded index size + record header which is 16 byte per header, header means  = field name)        
avgObjSize = avg size of obj + padding
storageSize =  total amount of storage allocated to this collection for document storage. (totalIndex size excluded)
totalIndexSize : totalIndexSize (compressed in case of wiredTiger)

Db.stats () के लिए

dataSize = document + padding
storageSize = document + padding + deleted space
fileSize = document + padding extents +  index extents + yet-unused space

हम इसके द्वारा अप्रयुक्त स्थान या छेद को हटा सकते हैं

db.getCollection('name').runCommand( "compact" )

कॉम्पैक्ट या मरम्मत कमांड चलाने के बाद हम सटीक भंडारण आकार और डेटा आकार अंतर प्राप्त कर सकते हैं।

मंगोलियाई वायर्डटाइगर में संपीड़न तकनीक:

- snappy : good compression, low overhead
- zlib: better compression, more CPU
- none (we can disable compression, by default its enable in WT)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.