Cập nhật (tháng 3 năm 2015): Kể từ bản phát hành 3.0, có nhiều storage engines có sẵn trong MongoDB. Câu trả lời này áp dụng cho công cụ lưu trữ MMAP (vẫn là mặc định trong MongoDB 3.0), câu trả lời cho các công cụ khác (ví dụ như WiredTiger) khá khác nhau và có thể điều chỉnh được và điều chỉnh được. Do đó nếu bạn đang sử dụng một công cụ khác, vui lòng đọc các tài liệu liên quan cho công cụ lưu trữ đó để xác định không gian và tùy chọn sử dụng lại không gian của bạn là gì.
Với công cụ lưu trữ MMAP, khi tài liệu bị xóa, khoảng trống còn lại được đưa vào danh sách miễn phí. Tuy nhiên, để sử dụng không gian sẽ cần phải có các tài liệu có kích thước tương tự được chèn vào sau, và MongoDB sẽ cần phải tìm một không gian thích hợp cho tài liệu đó trong một khung thời gian nhất định (một khi nó lần lượt nhìn vào danh sách, nó sẽ chỉ chắp thêm) không gian tái sử dụng sẽ không xảy ra thường xuyên. Việc xóa này được thực hiện trong các tệp dữ liệu, do đó không có cải tiến không gian đĩa xảy ra ở đây - tất cả điều này được thực hiện bên trong các tệp dữ liệu hiện có.
Nếu sau đó bạn thực hiện repair hoặc resync a secondary từ đầu, các tệp dữ liệu được viết lại và không gian trên đĩa sẽ được khôi phục (mọi phần đệm trên tài liệu cũng bị xóa). Đây là nơi bạn sẽ thấy sự khai hoang không gian thực trên đĩa. Đối với bất kỳ hành động nào khác (bao gồm cả compact), việc sử dụng đĩa sẽ không thay đổi và thậm chí có thể tăng lên.
Với 2,2+ giờ bạn có thể sử dụng tùy chọn collMod command và usePowersOf2Sizes để làm cho việc sử dụng lại không gian đã xóa nhiều khả năng hơn (lưu ý rằng đây là default in 2.6 +). Điều này có nghĩa là phân bổ không gian ban đầu cho một tài liệu ít hiệu quả hơn một chút (512 byte cho một tài liệu 400 byte) nhưng có nghĩa là khi một tài liệu mới được chèn vào, nó có nhiều khả năng tái sử dụng không gian đó. Nếu bạn đang xóa (hoặc đang phát triển và do đó di chuyển) tài liệu rất nhiều, sau đó điều này sẽ có hiệu quả hơn trong dài hạn.
Đối với bất cứ ai quan tâm đến, một trong những người đó đã viết rất nhiều mã lưu trữ (Mathias Stearn) có một bài thuyết trình tuyệt vời về internals lưu trữ, có thể found here
Nguồn
2012-11-15 01:58:23