Tôi không phải là chuyên gia về cơ sở dữ liệu và không có nền tảng khoa học máy tính chính thức, vì vậy hãy chịu đựng tôi. Tôi muốn biết các loại thế giới thực những điều tiêu cực có thể xảy ra nếu bạn sử dụng MongoDB, không tuân thủ ACID. Điều này áp dụng cho bất kỳ cơ sở dữ liệu không tuân thủ ACID nào.MongoDB không tuân thủ ACID thực sự có ý nghĩa gì?
Tôi hiểu rằng MongoDB có thể thực hiện Atomic Operations, nhưng họ không "hỗ trợ khóa truyền thống và giao dịch phức tạp", chủ yếu vì lý do hiệu suất. Tôi cũng hiểu tầm quan trọng của các giao dịch cơ sở dữ liệu và ví dụ khi cơ sở dữ liệu của bạn dành cho ngân hàng và bạn đang cập nhật một số bản ghi cần được đồng bộ hóa, bạn muốn giao dịch hoàn nguyên về trạng thái ban đầu nếu có cúp điện nên tín dụng bằng mua vv
Nhưng khi tôi nhận được vào cuộc trò chuyện về MongoDB, những người trong chúng ta mà không biết các chi tiết kỹ thuật của cơ sở dữ liệu như thế nào đang thực sự thực hiện bắt đầu ném xung quanh những câu như:
MongoDB nhanh hơn MySQL và Postgres, nhưng có một cơ hội nhỏ, như 1 trong một triệu, rằng nó "sẽ không lưu đúng".
Phần "sẽ không lưu đúng" đề cập đến sự hiểu biết này: Nếu có cúp điện ngay lập tức bạn đang viết cho MongoDB, có cơ hội cho một bản ghi cụ thể (nói rằng bạn đang theo dõi số lần truy cập trang trong các tài liệu có 10 thuộc tính), một trong các tài liệu chỉ lưu 5 thuộc tính… có nghĩa là theo thời gian, các số lần truy cập trang của bạn sẽ bị "tắt" một chút. Bạn sẽ không bao giờ biết được bao nhiêu, bạn biết chúng sẽ đúng 99.999%, nhưng không phải 100%. Điều này là do, trừ khi bạn đã thực hiện cụ thể điều này là mongodb atomic operation, hoạt động này không được đảm bảo là nguyên tử.
Vì vậy, câu hỏi của tôi là, giải thích chính xác thời điểm và lý do tại sao MongoDB có thể không "lưu chính xác"? Những phần nào của ACID không thỏa mãn, và trong hoàn cảnh nào, và làm thế nào để bạn biết khi nào 0,001% dữ liệu của bạn bị tắt? Điều này không thể sửa được bằng cách nào đó? Nếu không, điều này có nghĩa là bạn không nên lưu trữ những thứ như bảng users
của bạn trong MongoDB, vì một bản ghi có thể không lưu. Nhưng sau đó một lần nữa, rằng 1/1.000.000 người dùng có thể chỉ cần "thử đăng ký lại", phải không? Tôi chỉ tìm kiếm một danh sách khi nào/tại sao những điều tiêu cực xảy ra với một cơ sở dữ liệu không tuân thủ ACID như MongoDB, và lý tưởng nếu có cách giải quyết chuẩn (như chạy một công việc nền để dọn dẹp dữ liệu, hoặc chỉ sử dụng SQL cho điều này). , v.v.)
"* Bộ sửa đổi nguyên tử trong MongoDB chỉ có thể hoạt động dựa trên một bộ sưu tập duy nhất *" => Tôi nghĩ bạn có nghĩa là "chống lại một tài liệu ** đơn". – assylias
Thông tin tuyệt vời, thường là một câu trả lời tuyệt vời với ngoại lệ đề xuất sử dụng MySQL. –
״ Một điều bạn bị mất với MongoDB là giao dịch đa bộ sưu tập (bảng). Các biến tố nguyên tử trong MongoDB chỉ có thể làm việc với một tài liệu đơn ״ từ tài liệu mongo (https://docs.mongodb.com/v3.2/core/write-operations-atomicity): "Trong MongoDB, thao tác ghi là nguyên tử mức của một tài liệu duy nhất, ngay cả khi thao tác sửa đổi nhiều tài liệu được nhúng trong một tài liệu. " –