CẬP NHẬT: với compact
lệnh và WiredTiger có vẻ như dung lượng đĩa bổ sung sẽ thực sự được giải phóng cho hệ điều hành.
CẬP NHẬT: kể từ v1.9 + có compact
lệnh.
Lệnh này sẽ thực hiện một nén "trong dòng". Nó sẽ vẫn cần thêm một số dung lượng, nhưng không nhiều.
MongoDB nén các tệp bằng cách:
- sao chép các tệp đến một vị trí mới
- lặp lại các tài liệu và sắp xếp lại / giải quyết lại chúng
- thay thế các tệp gốc bằng các tệp mới
Bạn có thể thực hiện việc "nén" này bằng cách chạy mongod --repair
hoặc bằng cách kết nối trực tiếp và chạy db.repairDatabase()
.
Trong cả hai trường hợp, bạn cần không gian ở đâu đó để sao chép tệp. Bây giờ tôi không biết tại sao bạn không có đủ dung lượng để thực hiện nén, tuy nhiên, bạn có một số tùy chọn nếu bạn có một máy tính khác có nhiều dung lượng hơn.
- Xuất cơ sở dữ liệu sang một máy tính khác có cài đặt Mongo (sử dụng
mongoexport
) và sau đó bạn có thể Nhập cùng một cơ sở dữ liệu đó (sử dụngmongoimport
). Điều này sẽ dẫn đến một cơ sở dữ liệu mới được nén nhiều hơn. Bây giờ bạn có thể dừngmongod
ban đầu thay thế bằng các tệp cơ sở dữ liệu mới và bạn đã sẵn sàng. - Dừng mongod hiện tại và sao chép các tệp cơ sở dữ liệu sang một máy tính lớn hơn và chạy sửa chữa trên máy tính đó. Sau đó, bạn có thể di chuyển các tệp cơ sở dữ liệu mới trở lại máy tính ban đầu.
Hiện không có cách tốt để "thu gọn tại chỗ" bằng Mongo. Và Mongo chắc chắn có thể hút rất nhiều dung lượng.
Chiến lược tốt nhất hiện tại để nén là chạy thiết lập Master-Slave. Sau đó, bạn có thể thu gọn Slave, để nó bắt kịp và chuyển đổi chúng. Tôi biết vẫn còn một chút lông. Có thể nhóm Mongo sẽ đưa ra cách nén tại chỗ tốt hơn, nhưng tôi không nghĩ nó cao trong danh sách của họ. Dung lượng ổ đĩa hiện được cho là rẻ (và thường là như vậy).