Mặc dù công cụ lưu trữ này đã không được chấp nhận kể từ phiên bản MongoDB 4.0, nhưng có một số tính năng quan trọng trong đó. MMAPv1 là công cụ lưu trữ gốc trong MongoDB và dựa trên các tệp được ánh xạ. Chỉ kiến trúc 64-bit Intel (x86_64) mới hỗ trợ công cụ lưu trữ này.
MMAPv1 thúc đẩy hiệu suất tuyệt vời ở khối lượng công việc với ...
- Các bản cập nhật lớn
- Lần đọc âm lượng lớn
- Chèn âm lượng lớn
- Sử dụng cao bộ nhớ hệ thống
Kiến trúc MMAPv1
MMAPv1 là một hệ thống dựa trên cây B, cung cấp nhiều chức năng như tương tác lưu trữ và quản lý bộ nhớ cho hệ điều hành.
Đây là cơ sở dữ liệu mặc định cho MongoDB cho các phiên bản trước 3.2 cho đến khi công cụ lưu trữ WiredTiger được giới thiệu. Tên của nó xuất phát từ thực tế là nó sử dụng các tệp được ánh xạ bộ nhớ để truy cập dữ liệu. Nó thực hiện điều này bằng cách trực tiếp tải và sửa đổi nội dung tệp trong bộ nhớ ảo thông qua phương pháp luận syscall mmap ().
Tất cả các bản ghi nằm liền nhau trên đĩa và trong trường hợp tài liệu trở nên lớn hơn kích thước bản ghi được cấp phát, thì MongoDB sẽ phân bổ một bản ghi mới. Đối với MMAPv1, điều này là thuận lợi cho việc truy cập dữ liệu tuần tự nhưng đồng thời cũng là một hạn chế vì nó đi kèm với chi phí thời gian vì tất cả các chỉ mục tài liệu cần được cập nhật và điều này có thể dẫn đến phân mảnh lưu trữ.
Kiến trúc cơ bản của công cụ lưu trữ MMAPv1 được hiển thị bên dưới.
Như đã đề cập ở trên, nếu kích thước tài liệu vượt quá kích thước bản ghi được phân bổ, nó sẽ dẫn đến việc phân bổ lại không phải là một điều tốt. Để tránh điều này, công cụ MMAPv1 sử dụng Power of 2 Sized Allocation để mọi tài liệu được lưu trữ trong một bản ghi có chứa chính tài liệu đó (bao gồm một số khoảng trống thừa được gọi là padding). Sau đó, phần đệm được sử dụng để cho phép bất kỳ sự tăng trưởng tài liệu nào có thể do cập nhật trong khi nó làm giảm cơ hội phân bổ lại. Mặt khác, nếu việc phân bổ lại xảy ra, bạn có thể bị phân mảnh bộ nhớ. Padding trao đổi thêm không gian để cải thiện hiệu quả do đó giảm phân mảnh. Đối với khối lượng công việc có khối lượng chèn, cập nhật hoặc xóa lớn, sức mạnh của 2 phân bổ nên được ưu tiên nhất trong khi phân bổ phù hợp chính xác là lý tưởng cho các bộ sưu tập không liên quan đến bất kỳ cập nhật hoặc xóa khối lượng công việc nào.
Sức mạnh của 2 Phân bổ Kích thước
Để tăng trưởng tài liệu suôn sẻ, chiến lược này được sử dụng trong công cụ lưu trữ MMAPv1. Mọi bản ghi đều có kích thước tính bằng byte là lũy thừa của 2, tức là (32, 64, 128, 256, 512 ... 2MB). 2MB là giới hạn lớn hơn mặc định cho bất kỳ tài liệu nào vượt quá mức này, bộ nhớ của nó được làm tròn thành bội số gần nhất của 2MB. Ví dụ:nếu một tài liệu là 200MB, kích thước này sẽ được làm tròn thành 256MB và 56MB dung lượng sẽ có sẵn cho bất kỳ sự tăng trưởng bổ sung nào. giới hạn của không gian có sẵn.
Các phân bổ có kích thước theo kích thước của Power 2
- Tái sử dụng các bản ghi đã giải phóng để giảm phân mảnh: Với khái niệm này, các bản ghi được lượng tử hóa bộ nhớ để có kích thước cố định đủ lớn để chứa các tài liệu mới phù hợp với không gian được phân bổ do xóa hoặc di dời tài liệu trước đó tạo ra.
- Giảm việc di chuyển tài liệu: Như đã đề cập trước đây, theo mặc định MongoDB chèn và cập nhật làm cho kích thước tài liệu lớn hơn kích thước bản ghi đã đặt cũng sẽ dẫn đến việc cập nhật các chỉ mục. Điều này đơn giản có nghĩa là các tài liệu đã được di chuyển. Tuy nhiên, khi có đủ không gian để phát triển trong tài liệu, tài liệu sẽ không bị chuyển đi do đó ít cập nhật hơn cho các chỉ mục.
Sử dụng bộ nhớ
Tất cả bộ nhớ trống trên máy trong công cụ lưu trữ MMAPv1 được sử dụng làm bộ nhớ đệm. Bộ làm việc có kích thước chính xác và hiệu suất tối ưu đạt được thông qua bộ làm việc phù hợp với bộ nhớ. Bên cạnh đó, cứ sau 60 giây, MMAPv1 sẽ chuyển các thay đổi đối với dữ liệu vào đĩa do đó lưu vào bộ nhớ đệm. Giá trị này có thể được thay đổi để việc xả nước có thể được thực hiện thường xuyên. Vì tất cả bộ nhớ trống đều được sử dụng làm bộ nhớ đệm, đừng ngạc nhiên rằng các công cụ giám sát tài nguyên hệ thống sẽ chỉ ra rằng MongoDB sử dụng nhiều bộ nhớ vì việc sử dụng này là động.
Điểm mạnh của Công cụ lưu trữ MMAPv1
- Giảm phân mảnh trên đĩa khi sử dụng chiến lược phân bổ trước.
- Đọc rất hiệu quả khi nhóm làm việc đã được định cấu hình để vừa với bộ nhớ.
- Cập nhật tại chỗ, tức là cập nhật từng trường có thể dẫn đến nhiều dữ liệu được lưu trữ hơn, do đó cải thiện việc cập nhật tài liệu lớn với tối thiểu người viết đồng thời.
- Với số lượng người ghi đồng thời thấp, hiệu suất ghi có thể được cải thiện thông qua khái niệm chuyển dữ liệu vào đĩa thường xuyên.
- Khóa ở mức bộ sưu tập tạo điều kiện cho các hoạt động ghi. Lược đồ khóa là một trong những yếu tố quan trọng nhất trong hoạt động của cơ sở dữ liệu. Trong trường hợp này, chỉ có 1 máy khách có thể truy cập cơ sở dữ liệu tại một thời điểm. Điều này tạo ra một tình huống sao cho các hoạt động diễn ra nhanh hơn so với khi được trình bày theo cách nối tiếp bởi bộ máy lưu trữ.
Hạn chế của Công cụ lưu trữ MMAPv1
- Sử dụng không gian cao khi thực hiện lặp lại. MMAPv1 thiếu chiến lược nén cho hệ thống tệp do đó phân bổ quá mức dung lượng bản ghi.
- Hạn chế truy cập bộ sưu tập đối với nhiều khách hàng khi thực hiện thao tác ghi. MMAPv1 sử dụng chiến lược khóa mức bộ sưu tập có nghĩa là 2 hoặc nhiều máy khách không thể truy cập cùng một bộ sưu tập cùng một lúc do đó một khối ghi tất cả các lần đọc đối với bộ sưu tập này. Điều này dẫn đến đồng thời thô khiến không thể mở rộng công cụ MMAPv1.
- Sự cố hệ thống có thể dẫn đến mất dữ liệu nếu tùy chọn ghi nhật ký không được bật. Tuy nhiên, ngay cả khi có, cửa sổ quá nhỏ nhưng ít nhất có thể giúp bạn an toàn trước tình huống mất dữ liệu lớn.
- Sử dụng bộ nhớ không hiệu quả. Khi sử dụng chiến lược phân bổ trước, một số tài liệu sẽ chiếm nhiều dung lượng trên đĩa hơn so với bản thân dữ liệu.
- Nếu kích thước bộ làm việc vượt quá bộ nhớ được cấp phát, hiệu suất sẽ giảm xuống mức lớn. Bên cạnh đó, việc ghi lại sự tăng trưởng đáng kể sau khi lưu trữ ban đầu có thể kích hoạt thêm I / O, do đó gây ra vấn đề về hiệu suất.
So sánh Công cụ lưu trữ MMAPv1 và WiredTiger
Tính năng chính | MMAPv1 | WiredTiger |
---|---|---|
Hiệu suất CPU | Rất tiếc, việc thêm nhiều lõi CPU không tăng hiệu suất | Hiệu suất được cải thiện với các hệ thống đa lõi |
Mã hóa | Do các tệp ánh xạ bộ nhớ đang được sử dụng, nó không hỗ trợ bất kỳ mã hóa nào | Mã hóa cho cả dữ liệu đang chuyển và dữ liệu còn lại đều khả dụng trong cả bản cài đặt MongoDB Enterprise và bản Beta |
Khả năng mở rộng | Ghi đồng thời kết quả từ khóa cấp bộ sưu tập khiến không thể mở rộng quy mô. | Khả năng mở rộng cao vì mức khóa ít nhất là bản thân tài liệu. |
Điều chỉnh | Rất ít cơ hội điều chỉnh công cụ lưu trữ này | Có thể thực hiện nhiều điều chỉnh xung quanh các biến như kích thước bộ nhớ cache, khoảng thời gian điểm kiểm tra và vé đọc / ghi |
Nén dữ liệu | Không nén dữ liệu do đó có thể sử dụng nhiều dung lượng hơn | Các phương pháp nén nhanh và zlib có sẵn, do đó tài liệu có thể chiếm ít dung lượng hơn trong MMAPv1 |
Giao dịch nguyên tử | Chỉ áp dụng cho một tài liệu duy nhất | Như từ phiên bản 4.0, giao dịch nguyên tử trên nhiều tài liệu được hỗ trợ. |
Bộ nhớ | Tất cả bộ nhớ trống trên máy được sử dụng làm bộ nhớ đệm | Bộ nhớ cache của hệ thống tệp và bộ nhớ cache bên trong được sử dụng |
Cập nhật | Hỗ trợ cập nhật tại chỗ do đó vượt trội về khối lượng công việc với tính năng chèn khối lượng lớn, đọc và cập nhật tại chỗ | Không hỗ trợ cập nhật tại chỗ. Toàn bộ tài liệu phải được viết lại. |
Kết luận
Khi đến phần lựa chọn công cụ lưu trữ cho cơ sở dữ liệu, nhiều người không biết nên chọn công cụ nào. Sự lựa chọn thường phụ thuộc vào khối lượng công việc mà nó sẽ phải chịu. Trên một tiêu chí chung, MMAPv1 sẽ là một lựa chọn không tốt và đó là lý do tại sao MongoDB đã thực hiện rất nhiều cải tiến đối với tùy chọn WiredTiger. Tuy nhiên, nó vẫn có thể vượt trội hơn một số công cụ lưu trữ khác tùy thuộc vào trường hợp sử dụng, chẳng hạn như khi bạn chỉ cần thực hiện khối lượng công việc đã đọc hoặc cần lưu trữ nhiều bộ sưu tập riêng biệt với các tài liệu lớn, theo đó 1 hoặc 2 trường được cập nhật thường xuyên.