壓縮 MongoDB 的資料檔案

2021-09-08 10:13:29 字數 1457 閱讀 8451

mongodb採用了磁碟空間預分配的機制,為了避免磁碟碎片以及使用mmap後造成的近一步的記憶體碎片,但是隨著資料的增刪除改操作,資料檔案不可避免的會產生空洞,造成磁碟空間和記憶體的浪費。本文說的是這方面的壓縮,資料使用某些壓縮演算法進行壓縮的討論不在此範圍。

在mongodb 中,大概有兩種方法可以解決這種問題,但是都不是**方式,所以並不推薦使用。

repair

database 是mongodb 內建的乙個db 上的方法,呼叫這個方法,mongodb 會掃瞄db中的所有資料,並將通過重新插入來重新整理資料集合。

這種方法的代價是對這個 db 的讀寫操作會變得非常之慢,甚至會出現寫操作丟失的情況。所以這個時候最好直接停掉客戶端的寫操作。

可以建立 bar.js 檔案,寫入如下**:

// get a the current collection size.

var storage = db.foo.storagesize();

var total = db.foo.totalsize();

print('storage size: ' + tojson(storage));

print('totalsize: ' + tojson(total));

print('-----------------------');

print('running db.repairdatabase()');

print('-----------------------');

// run repair

db.repairdatabase()

// get new collection sizes.

var storage_a = db.foo.storagesize();

var total_a = db.foo.totalsize();

print('storage size: ' + tojson(storage_a));

print('totalsize: ' + tojson(total_a));

然後執行:

$ mongo foo bar.js
執行結果:

mongodb shell version: 1.6.4

connecting to: foo

storage size: 51351

totalsize: 79152

-----------------------

running db.repairdatabase()

-----------------------

storage size: 40960

totalsize: 65153

參考資料:

事實上使用 replication 相關的功能也可以實現以上說的資料壓縮

,具體過程比較麻煩,還會涉及到客戶端的切換等操作。有興趣的同學可以自己研究一下。同時歡迎有更好的方法提供。

文章**:

mongodb 資料檔案太大

問題 開發伺服器mongodb資料檔案太大。占用近80g,其中某個db占用最大 運營環境這個db的資料只有3g大小 分析 開發環境有大量測試的 增加 刪除 修改 操作,長期以來會導致資料檔案非常大,但 實際儲存資料並不是很多.129m db name.1 2.1g db name.10 2.1g d...

mysql 壓縮 壓縮MySQL資料檔案的妙招

mysql資料檔案如果過大,能否進行壓縮呢?答案是肯定的。下面就教您乙個壓縮mysql資料檔案的方法,希望對您能有所幫助。mysql使用一段時間後,mysql資料檔案ibdata會增長得很大 主要是針對innodb的儲存方式,有大量插入刪除操作的資料庫 有沒有很好的辦法可以收縮 shrink mys...

MongoDB資料檔案備份與恢復

mongodb資料檔案備份與恢復 備份與恢復資料對於管理任何資料儲存系統來說都是非常重要的。1 冷備份與恢復 建立資料檔案的副本 前提是要停止mongodb伺服器 也就是直接copy mongodb將所有資料都儲存在資料目錄下,預設是 data db windows下是c data db 啟動mon...