Saya baru-baru ini memadatkan koleksi saya menggunakan perintah:
db.<collectionName>.runCommand( "compact" )
Dan sekarang ukuran koleksi saya tampaknya lebih besar dari ukuran pada disk!
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
}
Saya tidak mengerti bagaimana ini mungkin. Bukankah semua koleksi mongodb didukung oleh disk setiap saat?
Adakah yang bisa menjelaskan hasil ini?
validate
?Jawaban:
storageSize
adalah jumlah dari semua luasan untuk data itu, tidak termasuk indeks.Sehingga koleksi membutuhkan 2 extents, masing-masing ~ 2GB, karenanya ~ 4GB.
size
termasuk indeks dan saya percaya beberapa hal lain yang meningkatkan jumlahnya. Tidak ada yang benar-benar mewakili ukuran pada disk yang tepat. Untuk ukuran disk,db.stats()
memiliki bidang filesize yang lebih dekat dengan apa yang Anda inginkan. Saya pikir Anda sedang mencari.Manual ini agak lebih baik dalam menguraikan arti berbagai bidang, lihat di sini untuk koleksi:
http://docs.mongodb.org/manual/reference/collection-statistics/
Dan di sini untuk statistik basis data:
http://docs.mongodb.org/manual/reference/database-statistics/
Beberapa informasi lain yang berpotensi relevan:
Perintah ringkas tidak menyusutkan file data apa pun; itu hanya men-defrag ruang yang dihapus sehingga objek yang lebih besar dapat menggunakannya kembali. Perintah ringkas tidak akan pernah menghapus atau mengecilkan file database, dan secara umum membutuhkan ruang ekstra untuk melakukan tugasnya, biasanya minimal satu tingkat tambahan.
Jika Anda memperbaiki database itu pada dasarnya akan menulis ulang file data dari awal, yang akan menghapus padding dan menyimpannya di disk seefisien yang akan Anda dapatkan. Namun Anda harus memiliki ~ 2x ukuran pada disk untuk melakukannya (sebenarnya kurang, tapi ini panduan yang layak).
Satu hal lagi yang perlu diingat di sini - perbaikan dan padding pelepas yang kompak. Faktor padding bervariasi antara 1 (tidak ada gerakan dokumen yang disebabkan oleh pertumbuhan dokumen), hingga 2 (banyak gerakan yang disebabkan oleh pertumbuhan dokumen). Faktor padding ~ 1,67 Anda akan menunjukkan Anda tumbuh (dan karenanya menyebabkan gerakan) sedikit.
Saat Anda memadatkan atau memperbaiki basis data, Anda menghapus lapisan tersebut - pertumbuhan dokumen selanjutnya akan memicu lebih banyak gerakan dari sebelumnya. Karena gerakan adalah operasi yang relatif mahal, ini dapat berdampak serius pada kinerja Anda. Info lebih lanjut di sini:
http://www.mongodb.org/display/DOCS/Padding+Factor
sumber
Untuk mongodb> 3.x
Untuk db.getCollection ('name'). Stats ()
Untuk db.stats ()
Kami dapat menghapus ruang atau lubang yang tidak digunakan dengan ini
Setelah menjalankan perintah kompak atau perbaikan, kita bisa mendapatkan ukuran penyimpanan yang tepat dan perbedaan ukuran data.
Teknik Kompresi di mongodb wiredTiger:
sumber