MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

'Giao dịch' nhiều bộ sưu tập, nhiều tài liệu trong MongoDB

Vì một phản hồi chung, các cam kết đa tài liệu trên MongoDB có thể được thực hiện dưới dạng cam kết hai giai đoạn, đã được tài liệu rộng rãi trong sách hướng dẫn (Xem:http://docs.mongodb.org/manual/tutorial/perform-two-phase- cam kết /).

Mẫu được đề xuất bởi sách hướng dẫn ngắn gọn như sau:

  • Thiết lập một transactions riêng biệt bộ sưu tập, bao gồm tài liệu đích , tài liệu nguồn , giá trị trạng thái (của giao dịch)
  • Tạo đối tượng giao dịch mới với initial dưới dạng state
  • Bắt đầu thực hiện giao dịch và cập nhật state tới pending
  • Áp dụng các giao dịch cho cả hai tài liệu (đích, nguồn)
  • Cập nhật trạng thái giao dịch thành committed
  • Sử dụng find để xác định xem các tài liệu có phản ánh trạng thái giao dịch hay không, nếu ok, hãy cập nhật trạng thái giao dịch thành done

Ngoài ra:

  • Bạn cần phải xử lý các tình huống thất bại theo cách thủ công (điều gì đó không xảy ra như mô tả bên dưới)
  • Bạn cần triển khai khôi phục theo cách thủ công, về cơ bản bằng cách đặt tên state giá trị canceling

Một số lưu ý cụ thể để bạn triển khai:

  • Tôi không khuyến khích bạn thêm các trường như lock_status , data_old , data_new vào tài liệu nguồn / đích. Đây phải là tài sản của các giao dịch, không phải là tài liệu.
  • Để khái quát khái niệm về tài liệu đích / nguồn, tôi nghĩ bạn có thể sử dụng DBref s:http://www.mongodb.org/display/DOCS/Database+Refferences
  • Tôi không thích ý tưởng xóa các tài liệu giao dịch khi chúng hoàn tất. Đặt trạng thái thành done có vẻ như là một ý tưởng tốt hơn vì điều này cho phép bạn gỡ lỗi sau đó và tìm ra loại giao dịch nào đã được thực hiện. Tôi khá chắc chắn rằng bạn cũng sẽ không hết dung lượng ổ đĩa (và vì điều này, cũng có các giải pháp).
  • Trong mô hình của bạn, làm thế nào để bạn đảm bảo rằng mọi thứ đã được thay đổi như mong đợi? Bạn có kiểm tra các thay đổi bằng cách nào đó không?


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Giao dịch Mongodb v4.0, MongoError:Số giao dịch chỉ được phép trên một thành viên hoặc mongos đặt bản sao

  2. Tôi có nên sử dụng tùy chọn allowDiskUse trong môi trường sản phẩm không?

  3. Lấy _id của tài liệu được chèn trong cơ sở dữ liệu Mongo trong NodeJS

  4. Làm thế nào để chuyển đổi một pymongo.cursor.Cursor thành một dict?

  5. Cách sử dụng Mã hóa để Bảo vệ dữ liệu MongoDB