Tôi không phải là một chuyên gia 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 đồng ý với tôi. Tôi muốn biết các loại điều tiêu cực trong thế giới thực có thể xảy ra nếu bạn sử dụng phiên bản MongoDB cũ trước phiên bản 4 , 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.
Tôi hiểu rằng MongoDB có thể thực hiện các hoạt động nguyên tử , nhưng họ không "hỗ trợ các giao dịch phức tạp và khóa truyền thống", chủ yếu là vì lý do hiệu suất. Tôi cũng hiểu tầm quan trọng của giao dịch cơ sở dữ liệu và ví dụ về thời điểm 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 phải đồng bộ hóa, bạn muốn giao dịch trở lại trạng thái ban đầu nếu có mất điện vì vậy tín dụng tương đương với mua hàng, vv
Nhưng khi tôi bắt đầu trò chuyện về MongoDB, những người trong chúng ta không biết chi tiết kỹ thuật về cách thức cơ sở dữ liệu được triển khai thực sự bắt đầu ném xung quanh các câu như:
MongoDB nhanh hơn MySQL và Postgres, nhưng có một cơ hội nhỏ, như 1 trên một triệu, rằng nó "sẽ không lưu chính xác".
Phần "sẽ không lưu chính xác" đề cập đến cách hiểu này: Nếu có sự cố mất điện ngay khi bạn viết thư cho MongoDB, có thể có một bản ghi cụ thể (giả sử bạn đang theo dõi số lần xem trang trong tài liệu có 10 thuộc tính mỗi), một trong những tài liệu chỉ lưu được 5 trong số các thuộc tính, điều đó có nghĩa là theo thời gian, số lượt xem trang của bạn sẽ bị "tắt" một chút. Bạn sẽ không bao giờ biết bao nhiêu, bạn biết họ sẽ đúng 99,999%, nhưng không phải 100%. Điều này là do, trừ khi bạn đặc biệt biến đây thành một hoạt động nguyên tử mongodb , 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 về thời điểm và lý do MongoDB có thể không "lưu chính xác" là gì? Những phần nào của ACID không thỏa mãn và trong những trường hợp 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ể được sửa chữa 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ư users
bảng của mình trong MongoDB, vì một bản ghi có thể không lưu. Nhưng một lần nữa, người dùng 1 / 1.000.000 đó có thể chỉ cần "thử đăng ký lạ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 cơ sở dữ liệu không tuân thủ ACID như MongoDB, và lý tưởng là nếu có một cách giải quyết tiêu 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 việc này, v.v.) .