MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB có sử dụng lại dung lượng đã xóa không?

Cập nhật (tháng 3 năm 2015): Kể từ bản phát hành 3.0, có nhiều công cụ lưu trữ 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ụ:WiredTiger) khá khác và có thể có thể điều chỉnh 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 tài liệu liên quan cho công cụ lưu trữ đó để xác định các tùy chọn và mặc định tái sử dụng 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, không gian còn lại sẽ được đưa vào danh sách miễn phí. Tuy nhiên, để sử dụng không gian, sẽ cần phải chèn các tài liệu có kích thước tương tự vào sau này 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 xem danh sách, nó sẽ chỉ thêm vào). việc tái sử dụng không gian sẽ không diễn 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ó việc thu hồi dung lượng ổ đĩa xảy ra ở đây - tất cả điều này được thực hiện nội bộ trong các tệp dữ liệu hiện có.

Nếu sau đó bạn thực hiện sửa chữa hoặc đồng bộ hóa lại tệp thứ cấp từ đầu, các tệp dữ liệu sẽ được ghi lại và dung lượng trên đĩa sẽ được lấy lại (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ự cải tạo dung lượng thực tế trên đĩa. Đối với bất kỳ hành động nào khác (bao gồm nhỏ gọn), mức sử dụng trên đĩa sẽ không thay đổi và thậm chí có thể tăng lên.

Với 2.2+, giờ đây bạn có thể sử dụng lệnh collMod và tùy chọn usePowersOf2Sizes để giúp việc sử dụng lại không gian đã xóa có nhiều khả năng hơn (lưu ý rằng đây là mặc định trong 2.6+). Điều này có nghĩa là phân bổ không gian ban đầu cho tài liệu kém hiệu quả hơn một chút (ví dụ:512 byte cho 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, nhiều khả năng sẽ có thể sử dụng lại không gian đó. Nếu bạn đang xóa (hoặc đang phát triển và do đó phải di chuyển) nhiều tài liệu, thì điều này sẽ hiệu quả hơn về lâu dài.

Đối với bất kỳ ai quan tâm, 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ề nội bộ lưu trữ, có thể tìm thấy tại đây




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB sort ()

  2. Mô hình tốt nhất để biểu diễn nhiều mối quan hệ với các thuộc tính trong MongoDB

  3. Tạo chỉ mục văn bản với các trọng lượng trường khác nhau trong MongoDB

  4. chuyển đổi ngày iso thành dấu thời gian trong truy vấn mongo

  5. java.lang.Incomp Tương thíchClassChangeError:Triển khai lớp Mongo