2012-04-11 37 views

Trả lời

14

Về Mongo

MongoDB sử dụng bộ nhớ file ánh xạ.

Điều này có nghĩa là hệ điều hành chủ yếu kiểm soát những gì được phân trang vào và ra khỏi bộ nhớ (đến và đi từ đĩa).

Các quy tắc

Nếu chỉ số của bạn + bộ làm việc vượt quá bộ nhớ, các trang sử dụng gần đây nhất (các phần của bộ nhớ) sẽ được flushed vào đĩa. Điều này chỉ để lại dữ liệu được sử dụng gần đây nhất mà vẫn còn phù hợp với bộ nhớ có sẵn.

Hệ điều hành của bạn kiểm soát việc này.

Mặc dù bạn sẽ trải nghiệm hiệu suất khủng khiếp nếu bộ làm việc và chỉ mục thực sự không phù hợp với bộ nhớ, trên thực tế, kích thước bộ làm việc (dữ liệu nóng) nhỏ hơn nhiều so với tổng số liệu của chúng.

Nếu bạn không vi phạm quy tắc này, bạn sẽ có hiệu suất tuyệt vời hầu hết thời gian ngay cả khi chỉ mục của bạn + tổng dữ liệu có thể vượt quá tổng bộ nhớ có sẵn.

Chương trình hoạt động

Nếu một truy vấn được thực hiện mà cần dữ liệu mà không có trong bộ nhớ, nó sẽ được paged vào bộ nhớ (lấy từ đĩa) và sẽ có một buổi biểu diễn hit.

Lưu ý: đây thực chất là tình huống khi cơ sở dữ liệu lần đầu tiên bắt đầu (lạnh).

Không có gì trong bộ nhớ để bắt đầu, lỗi trang xuất hiện khi dữ liệu được yêu cầu và dữ liệu được phân trang vào bộ nhớ khi cần. Khi bạn hết bộ nhớ, các trang được sử dụng gần đây nhất (các khối) được xóa khỏi bộ nhớ để có được dữ liệu nóng hơn (mới được truy cập gần đây).

Cũng cần lưu ý rằng vì các chỉ mục được sử dụng liên tục và do đó luôn được sử dụng gần đây, chúng hầu như không bao giờ được phân trang.

+0

Tôi không đồng ý rằng "bạn vẫn sẽ có hiệu suất tương đối cao". Theo kinh nghiệm của tôi nếu kích thước chỉ mục gần bằng hoặc vượt quá kích thước bộ nhớ RAM thì hiệu năng giảm xuống một cách dứt khoát. MongoDB trang web khuyên bạn nên giữ kích thước chỉ số << Kích thước RAM. –

+0

Đó là lý do khi tôi nói hiệu suất tốt nếu các chỉ mục làm việc trong bộ nhớ là nếu các chỉ mục của bạn thậm chí không vừa trong bộ nhớ thì bạn sẽ không có nhiều chỗ cho bộ làm việc của mình và rơi ra khỏi "bạn sẽ trải nghiệm hiệu suất cao "danh mục hoặc tôi đã bỏ lỡ điều gì đó? –

+0

Câu trả lời của bạn đọc ... "Nếu chỉ mục của bạn + bộ làm việc vượt quá bộ nhớ, ..." và tiếp tục với "Bạn vẫn sẽ có hiệu suất tương đối cao trừ khi bạn liên tục chạm vào từng phần của tập dữ liệu." Đó là phần gây hiểu lầm - bạn không cần phải chạm vào nhiều để có được hiệu suất khủng khiếp khi chỉ mục> RAM. –

6

Nếu chỉ mục của bạn lớn hơn RAM có sẵn thì hiệu suất giảm xuống nhanh chóng. Trang MongoDB đặc biệt khuyên bạn nên "Hãy chắc chắn rằng các chỉ mục của bạn có thể phù hợp với RAM".

Nếu truy vấn của bạn có vẻ chậm chạp, bạn nên xác minh rằng chỉ mục của bạn là đủ nhỏ để vừa với RAM. Ví dụ: nếu bạn đang chạy trên RAM 4GB và bạn có 3 GB chỉ mục thì các chỉ mục của bạn có thể không phù hợp với trong RAM. Bạn có thể cần thêm RAM và/hoặc xác minh rằng tất cả chỉ mục bạn đã tạo thực sự đang được sử dụng.

Các vấn đề liên quan