Nói chung, nếu bạn không cần phải thu nhỏ các tệp dữ liệu của mình, bạn không nên thu nhỏ chúng chút nào. Điều này là do "phát triển" các tệp dữ liệu của bạn trên đĩa là một hoạt động khá tốn kém và càng nhiều dung lượng mà MongoDB có thể phân bổ trong các tệp dữ liệu thì bạn sẽ có ít phân mảnh hơn.
Vì vậy, bạn nên cố gắng cung cấp nhiều không gian đĩa nhất có thể cho cơ sở dữ liệu.
Tuy nhiên nếu bạn phải thu nhỏ cơ sở dữ liệu, bạn nên ghi nhớ hai điều.
-
MongoDB phát triển các tệp dữ liệu của nó bằng cách nhân đôi để các tệp dữ liệu có thể là 64 MB, sau đó là 128 MB, v.v. lên đến 2GB (tại thời điểm đó, nó ngừng tăng gấp đôi tệp lưu trữ cho đến 2GB.)
-
Như với hầu hết bất kỳ cơ sở dữ liệu nào ... các thao tác todo như thu nhỏ, bạn sẽ cần phải lên lịch cho một công việc riêng để làm như vậy, không có "autoshrink" trongMongoDB. Trên thực tế, các cơ sở dữ liệu noSQL chính (ghét cái tên đó) chỉ có Riakwill autoshrink. Vì vậy, bạn sẽ cần tạo một công việc bằng cách sử dụng OS'sscheduler của mình để chạy thu nhỏ. Bạn có thể sử dụng tập lệnh bash hoặc yêu cầu công việc chạy tập lệnh php, v.v.
Javascript phía máy chủ
Bạn có thể sử dụng Javascript phía máy chủ để thực hiện việc thu nhỏ và chạy JS đó thông qua trình bao của mongo trên cơ sở thông thường thông qua một công việc (như cron hoặc dịch vụ lập lịch cửa sổ) ...
Giả sử một bộ sưu tập có tên foo bạn sẽ lưu javascript bên dưới vào một tệp có tên bar.js và chạy ...
$ mongo foo bar.js
Tệp javascript sẽ trông giống như ...
// 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));
Điều này sẽ chạy và trả về một cái gì đó giống như ...
MongoDB shell version: 1.6.4
connecting to: foo
Storage Size: 51351
TotalSize: 79152
-----------------------
Running db.repairDatabase()
-----------------------
Storage Size: 40960
TotalSize: 65153
Chạy chương trình này theo lịch trình (không có giờ cao điểm) và bạn đã sẵn sàng.
Bộ sưu tập có giới hạn
Tuy nhiên, có một tùy chọn khác, bộ sưu tập giới hạn .
Về cơ bản, bạn có thể giới hạn kích thước của (hoặc số lượng tài liệu trong) một bộ sưu tập .. 20GB và khi đạt đến giới hạn đó, MongoDB sẽ bắt đầu loại bỏ các bản ghi cũ nhất và thay thế chúng bằng các mục mới hơn khi chúng xuất hiện.
Đây là một cách tuyệt vời để giữ một lượng lớn dữ liệu, loại bỏ dữ liệu cũ hơn theo thời gian và giữ nguyên dung lượng ổ đĩa được sử dụng.