Một số chiến lược cần lưu ý:
1) Sử dụng một bộ sưu tập / cơ sở dữ liệu riêng biệt cho các tài liệu 'nóng'.
Sau đó, nếu bạn biết tài liệu nào nằm trong bộ nóng, thì việc chuyển chúng vào một bộ sưu tập riêng biệt sẽ hữu ích. Điều này sẽ đảm bảo rằng các tài liệu nóng được cùng cư trú trên cùng phạm vi / trang. Nó cũng sẽ làm cho chỉ mục cho những tài liệu đó có nhiều khả năng nằm hoàn toàn trong bộ nhớ. Điều này là do nó nhỏ hơn và được (hoàn toàn?) Sử dụng thường xuyên hơn.
Nếu các tài liệu nóng được trộn ngẫu nhiên với các tài liệu khác thì bạn có thể sẽ phải mắc lỗi trong nhiều phần tử lá của chỉ mục B-Tree khi tải một tài liệu vì xác suất tài liệu khác đã tải hoặc truy cập khối chỉ mục gần đây là nhỏ.
2) Rút ngắn các giá trị được lập chỉ mục .
Giá trị chỉ mục càng ngắn thì càng có nhiều giá trị phù hợp với một khối B-Tree. (Lưu ý:Các khóa không được bao gồm trong chỉ mục.) Càng nhiều mục nhập trong một nhóm có nghĩa là ít nhóm hơn và tổng bộ nhớ cần thiết cho chỉ mục càng ít. Điều đó dẫn đến xác suất cao hơn / thời gian tồn tại lâu hơn mà các khối sẽ lưu lại trong bộ nhớ. Trong ví dụ của bạn, giảm 20-> 8 ký tự là tốt hơn tiết kiệm 50%. Nếu bạn có thể chuyển đổi 8 byte đó thành dài thì sẽ tiết kiệm hơn một chút vì long không có tiền tố độ dài (4 byte) và null ở cuối (tổng cộng 5 byte).
3) Rút gọn các tên khóa.
Tên trường càng ngắn thì mỗi tài liệu chiếm ít không gian hơn, điều này có tác dụng phụ đáng tiếc là làm giảm khả năng đọc.
4) Mảnh
Đây thực sự là cách duy nhất để duy trì hiệu suất khi đọc trên toàn bộ kho dữ liệu làm cạn kiệt bộ nhớ và băng thông đĩa cuối cùng. Nếu bạn chia nhỏ, bạn vẫn muốn chia nhỏ bộ sưu tập 'nóng'.
5) Điều chỉnh đọc trước trên đĩa thành một giá trị nhỏ.
Vì các lần đọc 'không nóng' đang tải một tài liệu ngẫu nhiên từ đĩa, chúng tôi thực sự chỉ muốn đọc / lỗi vào bộ nhớ tài liệu đó và càng ít tài liệu xung quanh nó càng tốt. Hầu hết các hệ thống sẽ thử và đọc trước một khối dữ liệu lớn sau khi người dùng đọc từ một phần của tệp. Điều này hoàn toàn ngược lại với những gì chúng tôi muốn.
Nếu bạn thấy hệ thống của mình bị lỗi nhiều nhưng bộ nhớ thường trú cho quá trình mongod không tiếp cận bộ nhớ có sẵn của hệ thống, bạn có thể thấy ảnh hưởng của việc hệ điều hành đọc dữ liệu vô ích.
6) Cố gắng sử dụng các giá trị tăng đơn điệu cho các phím.
Điều này sẽ kích hoạt tối ưu hóa (đối với các chỉ mục dựa trên ObjectId) mà khi khối chỉ mục phân tách, nó sẽ làm như vậy ở 90/10 thay vì 50/50. Kết quả là hầu hết các khối trong chỉ mục của bạn sẽ gần hết dung lượng và bạn sẽ cần ít khối hơn.
Nếu bạn chỉ biết 50.000 tài liệu 'nóng' sau thực tế thì việc thêm chúng vào bộ sưu tập riêng biệt theo thứ tự chỉ mục cũng sẽ kích hoạt tối ưu hóa này.
Cướp.