MongoDB 3.0 với WiredTiger giới thiệu một tính năng mới có tên là 'Index Prefix Compression' giúp giảm đáng kể bộ nhớ do các chỉ mục sử dụng. Bộ nhớ ít hơn được sử dụng bởi các chỉ mục có nghĩa là nhiều bộ nhớ hơn để lưu trữ tài liệu hoặc các chỉ mục khác ngụ ý hiệu suất tốt hơn.
Để có hiệu suất tốt nhất trong MongoDB, bạn nên lưu các chỉ mục của mình trong bộ nhớ. Lỗi trang trên một chỉ mục là một lỗi kép - một lỗi trang để đưa trang chỉ mục thực vào bộ nhớ và một lỗi trang khác sau đó đưa trang dữ liệu vào bộ nhớ.
Công nghệ
Nén tiền tố chỉ mục không sử dụng tính năng nén khối (như zlib, snappy, v.v.) mà là một kỹ thuật khác để lưu trữ các chỉ mục trong bộ nhớ. Nó làm giảm mức sử dụng bộ nhớ bằng cách lưu trữ các tiền tố giống hệt nhau chỉ một lần. “Nén tiền tố khóa” là một cách nén dữ liệu theo miền cụ thể và đề cập đến định dạng lưu trữ khóa trong WiredTiger. Để biết thêm chi tiết, bạn có thể tham khảo tài liệu WiredTiger về các định dạng tệp.
Kiểm tra hiệu suất
Đối với các bài kiểm tra hiệu suất của chúng tôi, chúng tôi sử dụng cấu trúc tài liệu như chi tiết bên dưới:
{ employeeID: <long>, firstName: <string>, lastName: <string>, income: <long>, supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;} }
Chúng tôi đã thêm các chỉ mục sau vào thiết lập này:
Index 1: db.ensureIndex({'employeeID':1}); Index 2: db.ensureIndex({'lastName':1, 'firstName':1}); Index 3: db.ensureIndex({'income':1}); Index 4: db.ensureIndex({'supervisor.lastName':1, 'supervisor.firstName':1})
Kết quả
Trong quá trình chạy thử nghiệm của mình, chúng tôi đã chèn dữ liệu giống hệt nhau (khoảng 10 triệu bản ghi) vào hai cụm - một nhóm bản sao 2,6.x và cụm còn lại là MongoDB 3.0 với WiredTiger. Sau đó, chúng tôi đã thêm các chỉ mục trên trên cả hai cấu hình cụm. Kết quả khá đáng kinh ngạc - trong một số trường hợp, có sự khác biệt về độ lớn trong kích thước chỉ mục!
Tên chỉ mục | Kích thước chỉ mục MMAP (MB) | Kích thước chỉ mục WT (MB) | % giảm kích thước |
{ID nhân viên:1} | 230,7 | 94 | 59% |
{lastName:1, firstName:1} | 1530 | 36 | 97% |
{thu nhập:1} | 230 | 94 | 59% |
{‘supervisor.lastName’:1, ‘supervisor.firstName’:1} | 1530 | 35 | 97% |
Tất cả bộ nhớ được lưu trên các chỉ mục là bộ nhớ có thể được sử dụng để lưu dữ liệu vào bộ nhớ đệm, các chỉ mục khác, v.v. Số dặm của bạn có thể thay đổi - hãy nhớ kiểm tra cấu trúc chỉ mục cụ thể của bạn. Việc giảm kích thước chỉ mục là một cải tiến chưa từng có trong Mongo 3.0 và có thể tạo ra sự khác biệt to lớn cho hiệu suất của bạn!