Tại sao sau khi xóa bộ sưu tập 110 GB, thư mục / var / lib / mongodb của tôi vẫn có cùng kích thước?


12

Tôi gặp một số rắc rối với MongoDB và việc sử dụng không gian. Đặc biệt, tôi đã từng có một bộ sưu tập lớn khoảng 600 triệu bản ghi với tổng số hơn 110 GB trên đĩa. Gần đây tôi quyết định bỏ nó đi vì dữ liệu đã lỗi thời, để làm như vậy tôi đã bỏ bộ sưu tập qua giao diện web của rockmongo. Theo đó, rockmongo không cho tôi xem bộ sưu tập nữa, tuy nhiên việc sử dụng đĩa của tôi đã không thay đổi chút nào.

Có bất kỳ hoạt động sạch mà tôi không biết, phải được chạy để đồng bộ hóa cơ sở dữ liệu với các tệp cơ sở dữ liệu trên đĩa?

Tôi đã cố gắng thực hiện "sửa chữa" nhưng hệ thống phàn nàn rằng không có đủ dung lượng trên đĩa ... đó là vì tất cả đều được MongoDB sử dụng.

Câu trả lời:


19

Như với hầu hết các hệ thống cơ sở dữ liệu, các tệp cơ sở dữ liệu không co lại khi bạn xóa dữ liệu, dữ liệu chỉ bị xóa / đánh dấu là đã xóa và không gian được sử dụng lại.

Bạn sẽ cần phải chạy db.repairDatabase()đến không gian nhỏ gọn như đã lưu ý ở đây


2
Dung lượng đĩa cứng quá thấp để làm điều đó. Tuy nhiên tôi giải quyết theo cách này: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
tunnuz

4

Mặc dù cách tiếp cận mongodump / drop / mongorestore ở trên sẽ hoạt động tốt từ góc độ kỹ thuật, nó sẽ yêu cầu bạn lấy cơ sở dữ liệu ngoại tuyến trong khi bạn làm như vậy, đây sẽ là một sự kiện ảnh hưởng đến dịch vụ.

Nếu bạn muốn làm điều này mà không có thời gian chết VÀ nếu bạn đang sử dụng Bộ bản sao MongoDB [1], bạn có thể làm như vậy:

  1. Chọn một thành viên và dừng MongoDB ở đó (dịch vụ mongodb dừng). Nếu đây là CHÍNH HÃNG, hãy đợi một thành viên khác được bầu là CHÍNH.
  2. Xóa các tệp dữ liệu trên thành viên này (cd / var / lib / mongodb; rm *).
  3. Khởi động lại dịch vụ MongoDB một lần nữa (dịch vụ mongodb bắt đầu).
  4. Đợi cho thành viên đồng bộ lại với CHÍNH (rs.status ()).
  5. Điều này sẽ chỉ xây dựng lại các tệp dữ liệu cần thiết (nhỏ hơn).

Sau đó lặp lại các bước trên cho từng thành viên khác trong Bộ bản sao.

[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set )


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.