1) Về độ bền, bạn có thể cho biết trình điều khiển java MongoDB (mà Morphia đang sử dụng), chiến lược nào để sử dụng, hãy xem https://github.com/mongodb/mongo-java-driver/blob/master/src/main/com/ mongodb / WriteConcern.java # L53
. Nó chỉ đơn giản là sự đánh đổi giữa tốc độ:NONE
(thậm chí không phải sự cố kết nối sẽ gây ra lỗi) tối đa FSYNC_SAFE
(dữ liệu chắc chắn được ghi vào đĩa). Để biết chi tiết nội bộ, hãy xem http://www.kchodorow.com/blog/2012/10/04/how-mongodbs-journaling-works/
2) Toàn bộ dữ liệu của bạn được ánh xạ vào bộ nhớ (đó là lý do tại sao phiên bản 32bit có giới hạn kích thước là 2GB), tuy nhiên, nó chỉ được tải thực sự khi được yêu cầu. MongoDB để lại điều đó cho hệ điều hành bằng cách sử dụng mmap. Vì vậy, miễn là có thêm RAM, MongoDB sẽ vui vẻ tải tất cả dữ liệu cần thiết vào RAM để thực hiện các truy vấn rất nhanh chóng. Nếu không còn bộ nhớ nào nữa, việc hoán đổi những thứ cũ là tùy thuộc vào hệ điều hành. Điều này có tác dụng tuyệt vời là dữ liệu của bạn sẽ được lưu trong bộ nhớ ngay cả khi bạn khởi động lại quy trình MongoDB; chỉ khi bạn khởi động lại chính máy chủ, dữ liệu phải được tìm nạp lại từ đĩa. Tôi nghĩ nhược điểm là quy trình cơ sở dữ liệu có thể hiểu rõ hơn một chút về những gì nên được hoán đổi trước so với hệ điều hành. Tôi không sử dụng MongoDB trên Windows và chưa thấy thông báo đó trên Mac hoặc Linux (chưa ), nhưng hệ điều hành sẽ xử lý điều đó cho bạn (và tự động hoán đổi các phần thông tin theo yêu cầu). Bạn đã thử đặt trình điều khiển thành JOURNAL_SAFE
chưa (nên thỏa hiệp tốt giữa bảo mật dữ liệu và tốc độ)? Trong cài đặt đó, không có dữ liệu nào bị mất, ngay cả khi quá trình MongoDB chết.
3) Nói chung MongoDB được xây dựng để sử dụng càng nhiều bộ nhớ khả dụng càng tốt, nhưng bạn có thể hạn chế nó bằng http://captaincodeman.com/2011/02/27/limit-mongodb-memory-use-windows/ - mà tôi chưa thử nghiệm, vì chúng tôi đang sử dụng máy chủ Linux (ảo).