MongoDB có nhất quán có thể điều chỉnh được không?

Bốn đảm bảo mỗi phiên được đề xuất để hỗ trợ người dùng và ứng dụng của dữ liệu sao chép nhất quán yếu. "đọc bài viết của bạn", "đọc đơn điệu", "viết theo dõi đọc" và "viết đơn điệu". Các… Mở rộng

Đọc mối quan tâm, viết mối quan tâm, tính nhất quán nhân quả — Các tùy chọn nhất quán của MongoDB rất linh hoạt, nhưng làm thế quái nào để bạn quyết định sử dụng cái nào? . Chúng ta sẽ khám phá các trường hợp sử dụng cho từng trường hợp và cách đạt được hiệu suất tốt nhất từ ​​MongoDB mà không phải hy sinh năng suất và sự an toàn của nhà phát triển mà các mức nhất quán này mang lại. Khả năng điều chỉnh này là duy nhất đối với MongoDB và là chủ đề của một bài báo nghiên cứu được xuất bản trên VLDB '19, một trong những hội nghị cơ sở dữ liệu học thuật hàng đầu. Judah Schvimer là Kỹ sư trưởng trong Nhóm sao chép của MongoDB. Ông là người triển khai và giám sát việc giới thiệu một số cấp độ nhất quán của MongoDB


Diễn giả

MongoDB có nhất quán có thể điều chỉnh được không?

Kỹ sư trưởng, Nhân bản máy chủ, MongoDB



Đây là bài đánh giá về Tính nhất quán có thể điều chỉnh trong MongoDB từ VLDB 2019. Nó đáng đọc và tôi đánh giá cao rằng MongoDB gần đây đã xuất bản một số tài liệu hội nghị. Tôi không phải là một chuyên gia về chủ đề này. Để biết kiến ​​thức chuyên môn, hãy xem Daniel Abadi, Kyle Kingsbury và Peter Bailis. Henrik có thể được thêm vào danh sách với một vài bài đăng trên blog.

MongoDB so với MySQL

MongoDB là một NoSQL DBMS giúp dễ dàng chạy các bộ bản sao phân đoạn. Mặc dù phần NoSQL của nó rất tuyệt nhưng phần sharded replicaset của nó thật tuyệt vời. Tôi hy vọng rằng MySQL cuối cùng cũng nhận được hỗ trợ tương tự cho các bản sao được phân mảnh bao gồm các tùy chọn readConcern và writeConcern.

Trước đây tôi đã so sánh bản sao bán đồng bộ của MySQL với MongoDB. Với MongoDB, hành vi đọc có thể được điều chỉnh tách biệt với ghi trong khi MySQL kết hợp chúng. Trong triển khai MySQL cho bán đồng bộ không mất dữ liệu, ghi không hiển thị cục bộ cho đến khi bản sao tấn công. Trong quá trình triển khai MongoDB, việc ghi được cam kết cục bộ và sau đó được sao chép. Các bản sao áp dụng ghi càng sớm càng tốt mà không cần chờ giao thức cam kết phân tán. Chìa khóa để thực hiện tất cả công việc này là kiểm soát khả năng hiển thị đã đọc thông qua công cụ cơ sở dữ liệu MVCC nhờ các lần đọc tại thời điểm.

Bài đánh giá

Điểm nổi bật.

  • Với nhiều tùy chọn, cần có thêm tài liệu và hướng dẫn. Mặc dù tôi đánh giá cao việc tách ngữ nghĩa đọc và viết thành các tùy chọn riêng biệt, nhưng không gian tính năng lớn và việc tìm ra điều này khó hơn.
  • Bài báo nói rằng tiêu chuẩn vàng là khả năng tuyến tính hóa. Chà, đây là một bài viết về DBMS nên có lẽ nó nên được thay đổi thành khả năng tuần tự hóa
  • Tôi đã bối rối bởi sự khác biệt giữa số lần đọc đa số và số lần đọc có thể tuyến tính hóa. Các lần đọc ảnh chụp nhanh AFAIK tương tự như có thể tuyến tính hóa (cả hai đều chờ xác nhận rằng chủ thực sự là chủ) trong khi các lần đọc đa số không phải chờ thêm
  • Tôi đã bối rối bởi "Thao tác cam kết giao dịch chấp nhận mối quan tâm ghi, xác định. và các hoạt động đọc và ghi cấu thành của nó" bởi vì cam kết xảy ra sau khi đọc vậy làm thế nào nó có thể ảnh hưởng đến chúng. Như bài báo hứa hẹn, điều đó sẽ được giải thích sau
  • MongoDB là một trường hợp điển hình tuyệt vời trong việc bổ sung tính nhất quán mạnh mẽ hơn cho hệ thống sao chép không đồng bộ. Nó tiếp tục sử dụng bản sao không đồng bộ, nhưng giờ đây nó cung cấp tính nhất quán mạnh mẽ hơn theo yêu cầu
  • Tôi nghĩ rằng phương tiện lan truyền được áp dụng trong phần mô tả tùy chọn w cho writeConcern. Điều này có nghĩa là một bản sao tấn công sau khi áp dụng một thay đổi -- trước hoặc sau khi làm lại độ bền tùy thuộc vào tùy chọn j. AFAIK, tùy chọn phổ biến hơn là xác nhận sau khi gửi thay đổi vào nhật ký bản sao nhưng trước khi áp dụng thay đổi. Tuy nhiên, tôi thích những gì MongoDB làm hơn. Có lẽ những người bình luận sẽ sửa nhận thức của tôi về những gì phổ biến hơn
  • Để giảm xung đột ghi-ghi MongoDB sử dụng giao dịch được cam kết cục bộ mới nhất làm thời điểm để thực hiện thao tác đọc/ghi sử dụng w. phần lớn và cho các giao dịch nhiều câu lệnh sử dụng ảnh chụp nhanh. Cách khác là sử dụng thời điểm cam kết đa số mới nhất cũ hơn. Xem phần 5 từ bài báo. Do đó, cần phải đợi trước khi quay lại người dùng để dấu thời gian được cam kết cục bộ đó được cam kết với phần lớn bộ bản sao. Điều này đúng ngay cả đối với các giao dịch chỉ đọc. Vì vậy, MongoDB có thể khiến việc đọc phải chờ. Rõ ràng là nó có thể khiến việc ghi phải đợi trước khi quay trở lại người dùng đang ghi cho w. số đông. Một bài đăng trên blog CockroachDB xuất sắc giải thích rằng nó cũng có thể khiến việc đọc phải chờ trong khi Spanner có thể khiến việc ghi phải chờ.  
  • Tính nhất quán có thể điều chỉnh được trong MongoDB. Với writeConcern, bạn có thể xác định liệu một thao tác ghi có thể đợi hay không. Với readConcern, bạn có thể xác định xem một lần đọc có thể đợi hay không
  • Một số thao tác chờ đọc là để xác nhận rằng chủ mà việc đọc đã được thực hiện vẫn là chủ. Tôi tự hỏi liệu có thể sử dụng hợp đồng thuê chính để tránh sự chờ đợi đó với chi phí khiến quá trình chuyển đổi dự phòng chậm hơn không. Bạn thích chi phí nào hơn?
  • Bản sao vẫn không đồng bộ. Các ghi được cam kết cục bộ (và hiển thị cho những người khác với các tùy chọn readConcern thích hợp) bất kể mối quan tâm ghi. Chúng được vận chuyển đến các bản sao càng sớm càng tốt và được các bản sao áp dụng càng sớm càng tốt. Điều này có nghĩa là một bản sao có thể áp dụng một thay đổi phải được hoàn tác trong quá trình chuyển đổi dự phòng chính vì nó chưa bao giờ được cam kết với đa số. MongoDB có hai cách để khôi phục bản sao đó -- khôi phục WiredTiger về thời điểm cũ hơn hoặc hoàn tác các sự kiện sao chép bổ sung. Quay lại nghe có vẻ dễ dàng trong khi hoàn tác lại phức tạp
  • Ghi nhất quán mạnh mẽ không trì hoãn ghi nhất quán yếu. Việc ghi nhất quán mạnh mẽ được thực hiện cục bộ, sau đó giải phóng các khóa hàng, sau đó đợi các bản sao xác nhận
  • MongoDB không thích các giao dịch chạy dài vì WiredTiger phải hoàn tác trong bộ nhớ để đáp ứng tất cả các giao dịch đang hoạt động. MongoDB hủy các lần đọc ảnh chụp nhanh đã chạy lâu hơn một phút. Đối với các lần đọc không chụp nhanh, nó có thể nâng cao ảnh chụp nhanh ở giữa thao tác đọc. Một tác dụng phụ của việc này là bạn sẽ gặp khó khăn khi triển khai một công cụ sao lưu logic nhất quán như mysqldump

MongoDB có tính nhất quán có thể điều chỉnh được không?

Để cung cấp cho người dùng một tập hợp các tùy chọn nhất quán có thể điều chỉnh, MongoDB hiển thị các cấp độ writeConcern và readConcern , là các tham số có thể được đặt trên mỗi cấp độ . writeConcern chỉ định mức độ đảm bảo độ bền mà một lần ghi phải đáp ứng trước khi được xác nhận cho khách hàng.

Tính nhất quán cuối cùng trong MongoDB là gì?

Tính nhất quán cuối cùng có nghĩa là dữ liệu bạn đang đọc có thể không nhất quán ngay bây giờ nhưng cuối cùng sẽ ổn định . Bạn nhận được điều này nếu bạn đọc từ phần phụ sử dụng bất kỳ readPreference nào có thể đọc từ phần phụ.

Dung sai phân vùng trong MongoDB là gì?

Khả năng chịu phân vùng đề cập đến hệ thống phân tán tiếp tục hoạt động ngay cả khi phân vùng mạng hoặc lỗi làm gián đoạn liên lạc giữa một số thành viên . Cơ sở dữ liệu phân tán là CP hoặc AP vì chúng vốn được thiết kế để có khả năng phục hồi.

Các tính năng chính của MongoDB là gì?

Hãy xem năm tính năng kỹ thuật hàng đầu của MongoDB. .
Truy vấn đặc biệt để phân tích theo thời gian thực, được tối ưu hóa. .
Lập chỉ mục thích hợp để thực hiện truy vấn tốt hơn. .
Sao chép để có dữ liệu sẵn có và ổn định hơn. .
sharding. .
cân bằng tải