Lưu ý :Câu này được viết vào năm 2013 khi MongoDB vẫn còn khá non trẻ, nó không có các tính năng như ngày nay, trong khi câu trả lời này vẫn đúng với mmap, nó không đúng với các công nghệ lưu trữ khác mà MongoDB hiện đang triển khai, chẳng hạn như WiredTiger, hoặc Percona.
Một nơi tốt để bắt đầu hiểu chính xác là gì một chỉ mục:http://docs.mongodb.org/manual/core/indexes/
Tuy nhiên, sau khi hiểu rõ về điều đó, bạn sẽ hiểu và tại sao chúng lại tốt như vậy, hãy chuyển sang một số câu hỏi phức tạp hơn.
Làm thế nào chúng tôi có thể chắc chắn rằng dữ liệu mà chúng tôi truy vấn sẽ đến từ bộ nhớ hay không?
Một cách là xem yields
trên bất kỳ truy vấn nào explain()
. Điều này sẽ cho bạn biết số lần trình đọc mở khóa do dữ liệu không có trong RAM.
Một cách khác sâu sắc hơn là xem các chương trình như mongostat và các chương trình khác. Các chương trình này sẽ cho bạn biết lỗi trang nào (khi dữ liệu cần được phân trang vào RAM từ đĩa) đang xảy ra trên mongod
của bạn .
Tôi hiểu rằng MongoDB sử dụng bộ nhớ trống để lưu vào bộ nhớ đệm dữ liệu về bộ nhớ đang trống tại thời điểm này, nhưng ai đó có thể giải thích thêm về hành vi chung không?
Điều này thực sự không chính xác. Dễ dàng hơn nếu chỉ nói rằng MongoDB làm được điều này nhưng trên thực tế thì không. Trên thực tế, hệ điều hành và các thuật toán phân trang của riêng nó, thường là LRU, thực hiện điều này cho MongoDB. MongoDB thực hiện kế hoạch chỉ mục bộ nhớ cache trong một khoảng thời gian nhất định để nó không phải liên tục kiểm tra và thử nghiệm các chỉ mục.
Trong trường hợp nào, có thể tốt hơn nếu sử dụng một biến trong máy chủ nút của chúng tôi để lưu trữ dữ liệu hơn là tin tưởng vào hệ thống bộ nhớ cache MongoDB?
Không chắc bạn mong đợi điều đó hoạt động như thế nào ... Ý tôi là cả hai làm những việc khá khác nhau và nếu bạn định đọc dữ liệu của mình từ MongoDB vào ứng dụng của mình khi khởi động vào var đó thì tôi chắc chắn sẽ không khuyên bạn nên làm điều đó.
Bên cạnh đó, các thuật toán hệ điều hành để quản lý bộ nhớ cực kỳ thuần thục và nhanh chóng, vì vậy nó rất ổn.
Bạn khuyên toàn cầu nên sử dụng MongoDB như thế nào để có lượng truy cập lớn?
Hmm, đây là một câu hỏi rất lớn. Thực sự tôi muốn giới thiệu cho bạn Google một chút về chủ đề này nhưng như tài liệu cho biết bạn cần đảm bảo bộ làm việc của mình phù hợp với RAM cho một bộ nhớ.
Đây là một điểm khởi đầu tốt:Việc lắp "bộ làm việc" vào RAM cho MongoDB có nghĩa là gì?