Câu trả lời:
MongoDB rất nhất quán theo mặc định - nếu bạn ghi và sau đó đọc, giả sử ghi thành công, bạn sẽ luôn có thể đọc kết quả của quá trình ghi mà bạn vừa đọc. Điều này là do MongoDB là một hệ thống tổng thể duy nhất và tất cả các lần đọc đều chuyển sang hệ thống chính theo mặc định. Nếu bạn tùy chọn bật tính năng đọc từ các cuốn thứ hai thì MongoDB cuối cùng sẽ trở nên nhất quán khi bạn có thể đọc các kết quả đã lỗi thời.
MongoDB cũng có tính khả dụng cao thông qua chuyển đổi dự phòng tự động trong các bộ bản sao: http://www.mongodb.org/display/DOCS/Replica+Sets
Tôi đồng ý với bài đăng của Luccas. Bạn không thể chỉ nói rằng MongoDB là CP / AP / CA, bởi vì nó thực sự là sự đánh đổi giữa C, A và P, tùy thuộc vào cả cấu hình cơ sở dữ liệu / trình điều khiển và loại thảm họa : đây là bản tóm tắt trực quan và bên dưới là giải thích chi tiết hơn.
Scenario | Main Focus | Description
---------------------------|------------|------------------------------------
No partition | CA | The system is available
| | and provides strong consistency
---------------------------|------------|------------------------------------
partition, | AP | Not synchronized writes
majority connected | | from the old primary are ignored
---------------------------|------------|------------------------------------
partition, | CP | only read access is provided
majority not connected | | to avoid separated and inconsistent systems
MongoDB rất nhất quán khi bạn sử dụng một kết nối duy nhất hoặc Mức độ quan tâm ghi / đọc chính xác ( Điều này sẽ khiến bạn tốn tốc độ thực thi ). Ngay sau khi bạn không đáp ứng các điều kiện đó (đặc biệt là khi bạn đang đọc từ một bản sao thứ cấp) thì MongoDB sẽ trở nên nhất quán.
MongoDB có tính khả dụng cao thông qua Replica-Sets . Ngay sau khi trang chính ngừng hoạt động hoặc không còn khả dụng nữa, thì các thư mục thứ hai sẽ xác định một trang chính mới có sẵn trở lại. Có một bất lợi đối với điều này: Mọi lần ghi được thực hiện bởi tệp chính cũ, nhưng không được đồng bộ hóa với các tệp thứ hai sẽ được cuộn lại và lưu vào tệp khôi phục, ngay sau khi nó kết nối lại với tập hợp (tệp chính cũ là tệp phụ hiện nay). Vì vậy, trong trường hợp này, một số tính nhất quán được hy sinh vì lợi ích sẵn có.
Thông qua việc sử dụng Replica-Sets MongoDB cũng đạt được dung sai phân vùng: Miễn là hơn một nửa số máy chủ của một Replica-Set được kết nối với nhau, một trang chính mới có thể được chọn . Tại sao? Để đảm bảo hai mạng riêng biệt không thể chọn một mạng chính mới. Khi không đủ các thư thứ hai được kết nối với nhau, bạn vẫn có thể đọc từ chúng (nhưng không đảm bảo tính nhất quán), nhưng không thể viết. Bộ thực tế không có sẵn vì mục đích nhất quán.
Khi một bài báo mới tuyệt vời xuất hiện và một số thử nghiệm tuyệt vời của Kyle trong lĩnh vực này, bạn nên cẩn thận khi gắn nhãn MongoDB và các cơ sở dữ liệu khác, là C hoặc A.
Tất nhiên CAP giúp theo dõi mà không cần nhiều từ những gì cơ sở dữ liệu chiếm ưu thế về nó, nhưng mọi người thường quên rằng C trong CAP có nghĩa là tính nhất quán nguyên tử (linearizability), chẳng hạn. Và điều này khiến tôi rất đau lòng khi cố gắng phân loại. Vì vậy, bên cạnh việc MongoDB cung cấp tính nhất quán mạnh mẽ, điều đó không có nghĩa là C. Theo cách này, nếu một người thực hiện phân loại này, tôi cũng khuyên bạn nên cung cấp thêm chi tiết về cách nó thực sự hoạt động để không để lại nghi ngờ.
Vâng, đó là CP khi sử dụng safe=true
. Điều này đơn giản có nghĩa là, dữ liệu được đưa vào đĩa chính. Nếu bạn muốn chắc chắn rằng nó cũng đến trên một số bản sao, hãy xem tham số 'w = N' trong đó N là số bản sao dữ liệu phải được lưu.
Tôi không chắc về P cho Mongo. Hãy tưởng tượng tình huống:
Vấn đề ở đây là kích thước tệp kết xuất có giới hạn và nếu bạn có một phân vùng trong một thời gian dài, bạn có thể mất dữ liệu của mình mãi mãi.
Bạn có thể nói rằng điều đó khó có thể xảy ra - vâng, trừ khi trong đám mây, nơi nó phổ biến hơn người ta nghĩ.
Ví dụ này là lý do tại sao tôi sẽ rất cẩn thận trước khi gán bất kỳ ký tự nào cho bất kỳ cơ sở dữ liệu nào. Có rất nhiều kịch bản và việc triển khai không hoàn hảo.
Nếu có ai biết nếu kịch bản này đã được giải quyết trong các bản phát hành sau của Mongo, vui lòng bình luận! (Tôi đã không theo dõi mọi thứ đã xảy ra trong một thời gian ..)
Mongodb không bao giờ cho phép ghi vào thứ cấp. Nó cho phép đọc tùy chọn từ thứ cấp nhưng không ghi. Vì vậy, nếu chương trình chính của bạn gặp trục trặc, bạn không thể viết cho đến khi trường trung học trở thành chính. Đó là cách bạn hy sinh Tính khả dụng cao trong định lý CAP. Bằng cách giữ cho chỉ đọc của bạn từ chính, bạn có thể có tính nhất quán mạnh mẽ.
MongoDB chọn Tính nhất quán trên Tính khả dụng bất cứ khi nào có Phân vùng. Điều đó có nghĩa là khi có một phân vùng (P), nó chọn Tính nhất quán (C) thay vì Tính khả dụng (A).
Để hiểu điều này, Chúng ta hãy hiểu cách MongoDB thực hiện bộ bản sao hoạt động. Một tập hợp bản sao có một nút chính. Cách "an toàn" duy nhất để cam kết dữ liệu là ghi vào nút đó và sau đó chờ dữ liệu đó cam kết đến phần lớn các nút trong tập hợp. (bạn sẽ thấy cờ đó cho w = đa số khi gửi ghi)
Phân vùng có thể xảy ra trong hai trường hợp như sau:
Về cơ bản, bất cứ khi nào một phân vùng xảy ra và MongoDB cần quyết định phải làm gì, nó sẽ chọn Tính nhất quán thay vì Tính khả dụng. Nó sẽ ngừng chấp nhận ghi vào hệ thống cho đến khi nó tin rằng nó có thể hoàn thành những ghi đó một cách an toàn.
Mongodb cung cấp tính nhất quán và dung sai phân vùng .
Trong bối cảnh cơ sở dữ liệu phân tán (NoSQL), điều này có nghĩa là luôn có sự đánh đổi giữa tính nhất quán và tính khả dụng. Điều này là do các hệ thống phân tán luôn nhất thiết phải có khả năng chịu phân vùng (tức là nó đơn giản sẽ không phải là cơ sở dữ liệu phân tán nếu nó không có khả năng chịu phân vùng.)
Tính nhất quán - Hệ thống cuối cùng sẽ trở nên nhất quán. Dữ liệu sẽ truyền đến mọi nơi sớm hay muộn, nhưng hệ thống sẽ tiếp tục nhận đầu vào và không kiểm tra tính nhất quán của mọi giao dịch trước khi chuyển sang giao dịch tiếp theo.
Tính khả dụng - Theo mặc định, Mongo DB Client (trình điều khiển MongoDB), gửi tất cả các yêu cầu đọc / ghi tới nút dẫn / chính. Nó làm cho hệ thống nhất quán nhưng không khả dụng do - Nếu một người lãnh đạo ngắt kết nối khỏi cụm, phải mất vài giây để bầu một người lãnh đạo mới. Vì vậy, làm cho nó không có sẵn để viết và đọc trong khoảng thời gian đó.