Công cụ lưu trữ MongoDB MMAPv1 vs WiredTiger


25

Trong mongoDB3 xuất hiện một công cụ lưu trữ mới: WiredTiger . Tuy nhiên, MMAPv1 vẫn là lựa chọn mặc định trong Mongo .

Người ta có thể không giỏi hơn người kia, đó thường là vấn đề sử dụng và chọn công cụ phù hợp cho công việc. Nhưng động cơ nào phù hợp với công việc gì?

Trên thực tế, trong khi MMAPv1 là công cụ mặc định, WiredTiger có vẻ tốt hơn trong hầu hết mọi lĩnh vực. Nó có các tính năng tương tự như MMAPv1 plus:

  • hiệu suất viết tốt hơn,
  • đồng thời cấp tài liệu,
  • nén,
  • ảnh chụp nhanh và hệ thống điểm kiểm tra.

Tôi đã tìm thấy một bảng so sánh trên blog của MongoDB :

So sánh WiredTiger và MMAPv1

Vì vậy, ngoại trừ nếu bạn đang ở trên Solaris, có lý do gì để không chọn WiredTiger không?


CHỈNH SỬA

Dưới đây là hai video giải thích chi tiết nội bộ của WiredTigerMMAPv1 .


Tất cả người dân nơi đây ... bạn có thể truy cập blog.clevertap.com/... cho một lời giải thích rất tốt về đề tài này
therealprashant

Câu trả lời:


26

Cá nhân, tôi thích công cụ lưu trữ mmapv1 hơn bây giờ vì ba lý do.

Lý do 1: đáo hạn

Không phải là WiredTiger chưa trưởng thành. Nhưng mmapv1 được hiểu rõ và trận chiến đã được thử nghiệm tất cả các cách lên xuống, qua lại và trên và trên và ngoài. WiredTiger đã có một số vấn đề nghiêm trọng (xem http://jira.mongodb.com để biết chi tiết) gần đây và tôi không sẵn sàng để khách hàng của mình tìm thấy vấn đề tiếp theo một cách khó khăn.

Lý do 2: Tính năng

Cho, WT có một số tính năng tuyệt vời. Vấn đề là: Tôi chưa thấy ai được hưởng lợi từ họ. Nén? Dù bằng cách nào, bạn hy sinh khá khó khăn để đạt được hiệu suất cho không gian đĩa khá rẻ. Thiếu vấn đề di chuyển tài liệu để mở rộng tài liệu? Chà, chúng tôi vẫn có giới hạn kích thước 16 MB và thêm độ phức tạp cho các tài liệu nhúng, đặc biệt là khi nhúng quá mức.

Có những tính năng khác, nhưng nhìn chung: Tôi không thấy đến nhiều lợi ích từ họ như bây giờ .

Lý do 3: Tổng chi phí sở hữu

Đối với các dự án mới, WT có thể ổn, đặc biệt là từ 3.2, vì những điều sau đây không được áp dụng.

Thực hiện di chuyển dữ liệu là tốn kém. Nó cần phải được lên kế hoạch, kế hoạch cần phải được sự đồng ý của tất cả các bên liên quan, kế hoạch dự phòng khẩn cấp phải được tạo ra và thống nhất, việc di chuyển cần phải được chuẩn bị, thực hiện và xem xét. Bây giờ nhân thời gian cần thiết với các bên liên quan là một phần của quá trình này và chi phí cho việc di chuyển dữ liệu tăng vọt. Mặt khác, lợi tức đầu tư có vẻ khá nhỏ. Bạn có thể mở rộng quy mô khá một chút thay vì thực hiện di chuyển nếu bạn tính đến các yếu tố đó. Để tạo cho bạn một ấn tượng: Tôi ước tính khoảng một "tuần-tuần" cho mỗi bên liên quan nếu việc di chuyển được lên kế hoạch, thực hiện và xem xét đúng. Với chi phí 100 đô la mỗi giờ mỗi người và chỉ có ba người tham gia (người quản lý, DBA và nhà phát triển), số tiền đó lên tới 12.000 đô la. Lưu ý rằng đây là một ước tính bảo thủ.

Phần kết luận

Tất cả những yếu tố trên đã đưa tôi đến kết luận không sử dụng WT gì. Hiện tại.


Cập nhật

Bài viết này đã được vài tháng tuổi, vì vậy nó xứng đáng được cập nhật

Khi trưởng thành

Nhận xét ban đầu của tôi về sự trưởng thành là loại lỗi thời. WiredTiger đã không có bất kỳ vấn đề lớn nào trong một thời gian và đã trở thành công cụ lưu trữ mặc định kể từ MongoDB 3.2

Về tính năng

Nhận xét ban đầu của tôi vẫn còn một số giá trị, imho.

Nén

Tuy nhiên, khi eo hẹp về ngân sách hay nói chung hơn, hiệu suất không phải là mối quan tâm chính, sự đánh đổi hiệu suất khá nhỏ và về cơ bản bạn giao dịch các tác động hiệu suất nhẹ (khi so sánh với WT không nén) cho không gian đĩa, sử dụng những gì khác sẽ nhàn rỗi xung quanh: CPU.

Mã hóa

MongoDB 3.2 Enterprise giới thiệu khả năng mã hóa kho lưu trữ WiredTiger. Đối với dữ liệu có nhu cầu bảo mật nâng cao, đây là một tính năng giết người và làm cho WT trở thành công cụ lưu trữ duy nhất được lựa chọn, cả về mặt kỹ thuật (MMAPv1 không hỗ trợ mã hóa) và về mặt khái niệm. Dĩ nhiên, bỏ qua khả năng phân vùng đĩa được mã hóa, mặc dù bạn có thể không có tùy chọn đó trong một số môi trường.

Khóa cấp độ tài liệu

Tôi phải thừa nhận rằng về cơ bản tôi đã bỏ qua tính năng đó của WT trong phân tích ở trên, chủ yếu là vì nó không áp dụng cho tôi hoặc khách hàng của tôi khi tôi viết câu trả lời ban đầu.

Tùy thuộc vào thiết lập của bạn, chủ yếu là khi bạn có nhiều máy khách viết đồng thời, tính năng này có thể cung cấp một hiệu suất tuyệt vời.

Trên tổng chi phí sở hữu

Làm di cư vẫn còn tốn kém. Tuy nhiên, tính đến các thay đổi về thời gian đáo hạn và quan điểm đã thay đổi về các tính năng, việc di chuyển có thể đáng để đầu tư nếu:

  • Bạn cần mã hóa (Chỉ phiên bản doanh nghiệp!)
  • Hiệu suất không phải là mối quan tâm chính tuyệt đối của bạn và bạn có thể tiết kiệm tiền trong thời gian dài (tính toán một cách bảo thủ) bằng cách sử dụng nén
  • Bạn có rất nhiều quy trình viết đồng thời, vì việc tăng hiệu suất có thể giúp bạn tiết kiệm được tỷ lệ dọc hoặc ngang.

Cập nhật kết luận

Đối với các dự án mới, tôi sử dụng WiredTiger ngay bây giờ. Do việc di chuyển từ bộ nén sang bộ lưu trữ WiredTiger không nén khá dễ dàng, tôi có xu hướng bắt đầu với việc nén để tăng cường việc sử dụng CPU ("kiếm được nhiều tiền hơn cho buck"). Nếu việc nén có tác động rõ rệt đến hiệu suất hoặc UX, tôi chuyển sang WiredTiger không nén.

Đối với các dự án có nhiều nhà văn đồng thời, câu trả lời cho việc di chuyển hay không hầu như luôn luôn là "Có" - trừ khi ngân sách của dự án cấm đầu tư. Về lâu dài, việc tăng hiệu suất sẽ tự chi trả, nếu việc triển khai được lên kế hoạch hợp lý. Tuy nhiên, bạn cần thêm một số thời gian phát triển vào tính toán, vì trong một số trường hợp, trình điều khiển cần được cập nhật và có thể có vấn đề cần được xử lý.

Đối với các dự án có ngân sách eo hẹp và không thể dành nhiều dung lượng đĩa hơn vào lúc này, việc di chuyển sang WiredTiger có thể là một tùy chọn, nhưng việc nén sẽ gây ra một chút tải cho CPU, một điều chưa từng thấy với MMAPv1. Hơn nữa, chi phí di chuyển có thể rất tốn kém cho một dự án như vậy.


Cảm ơn Markus cho anwser của bạn. Tôi hiểu lập luận của bạn. Bạn thậm chí có thể khuyên mặc định quay lại MMAPv1 cho các dự án mới không? Ý tôi là, nếu hiệu suất là một mối quan tâm, nén cũng có thể bị vô hiệu hóa hoàn toàn. Dung lượng ổ đĩa rẻ, nhưng nén có thể giúp thiết lập hoạt động phù hợp với RAM, và do đó đạt được sự hoàn hảo. Hoặc là tôi sai?
Buzut

1
Theo tôi biết, nén chỉ được áp dụng cho các tệp dữ liệu. Đối với các dự án mới, hãy để tôi nói theo cách đó: Tôi sẽ gọi cho một quyết định quản lý, hiển thị ưu và nhược điểm. Cá nhân tôi sử dụng WT trong một trong các dự án của mình và chưa gặp vấn đề gì, nhưng có thể có các yếu tố khác như SLA (tôi có thể tính toán khá tốt dựa trên kinh nghiệm với mmapv1), ngân sách chặt chẽ (sẽ gọi cho WT được nén tiết kiệm không gian đĩa) và rất nhiều yếu tố khác. Cân nhắc rủi ro và cơ hội không phải là quyết định của DBA. Một DBA phải cung cấp thông tin cần thiết để thực hiện cuộc gọi.
Markus W Mahlberg

1
Bài viết này dường như chỉ ra rằng cách lưu trữ các chỉ mục là một lợi ích khá lớn vì nó có thể giảm dung lượng mà các chỉ mục của bạn chiếm tới 10 lần: ilearnasigoalong.blogspot.com/2015/03/ . Dung lượng đĩa rẻ, nhưng ram thì không.
BT

Tôi hơi bối rối về quan điểm của bạn về Tính năng, bạn có nói rằng có những tính năng MMAPv1 mà WiredTiger không có? Sẽ thật tuyệt nếu phần đó rõ ràng hơn một chút.
BT

@BT Không hề. Điều tôi đã cố gắng nói là WT có một số tính năng khá hay mà đối với một số trường hợp sử dụng có thể hữu ích, nhưng nói chung không phải là như vậy. Tôi thích một công cụ lưu trữ được thử nghiệm chiến đấu hơn là tiên tiến khi lưu trữ dữ liệu. Theo bài viết: Có, có thể với nén tiền tố để tiết kiệm RAM và đây có thể là một ý tưởng tốt nếu không có mối quan tâm nào khác. Hãy tưởng tượng bạn có thể được tin cậy cho các vấn đề mất dữ liệu hoặc hiệu suất.
Markus W Mahlberg

5

Hai xu của tôi:

Ghi nhật ký trong WiredTiger có thể mất các bản cập nhật trong các lần tắt cứng vì nó sử dụng bộ đệm trong bộ nhớ để lưu trữ các bản ghi nhật ký.

Ở giữa các thao tác ghi, trong khi các bản ghi nhật ký vẫn nằm trong bộ đệm WiredTiger, các bản cập nhật có thể bị mất sau khi tắt máy mongod.

Ghi nhật ký trong MMAPv1 ghi các thay đổi trong tệp nhật ký trên đĩa.

Nếu trường hợp mongod gặp sự cố mà không áp dụng ghi vào tệp dữ liệu, tạp chí có thể phát lại ghi vào chế độ xem được chia sẻ để ghi cuối cùng vào tệp dữ liệu.


4

Chúng tôi đã chuyển sang WiredTiger từ MMAPv1 với mức tăng hiệu suất 7 lần đến 10 lần. Chúng tôi đã phải quay trở lại MMAPv1 vì MongoDB sẽ khóa khi bộ đệm WiredTiger đạt 100%. Chúng tôi đã ghi lại kinh nghiệm của chúng tôi ở đây - https://blog.clevertap.com/sadless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/


2
Đẹp viết. Kinda nhắc tôi về việc Uber sẽ chuyển từ MySQL sang PostgreSQL vào năm 2013 và sau đó quay lại MySQL vào tháng 6 năm 2016.
RolandoMyQueryDBA

giải thích rõ ràng, chúng tôi cũng có kinh nghiệm tương tự với hổ có dây nên đã rất tiếc nó với MMAPV1
viren
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.