Các thực tiễn tốt nhất cho các giao dịch mongodb là gì?
Quản lý giao dịch là một khía cạnh quan trọng của việc xây dựng các ứng dụng. Hãy thảo luận về cách Mongo DB và các bản phát hành mới nhất của nó có thể giúp chúng ta đạt được điều đó Show MongoDB, với 4. 0, đã thêm hỗ trợ cho Giao dịch nhiều tài liệu hoạt động trên các bộ bản sao. Hỗ trợ này cũng đã được mở rộng cho Sharded Cluster với 4. 2 phát hành Blog này có thể giúp bạn-
Bạn cần có hiểu biết về các khung công tác Core-Java, Spring và Spring-Data cũng như hiểu biết cơ bản về các khái niệm và Truy vấn Mongo Cơ sở dữ liệu MongoDB NoSQLMongoDB là một cơ sở dữ liệu NoSQL và về cơ bản khác với mô hình hóa dữ liệu SQL ở chỗ nó luôn khuyến khích có dữ liệu liên quan trong một tài liệu (hãy nhớ rằng MongoDB sẽ hoạt động tốt hơn nếu bạn sử dụng nó đúng cách; tránh sử dụng nó làm cơ sở dữ liệu Quan hệ). Vì MongoDB hỗ trợ các giao dịch ACID trong một tài liệu duy nhất nên các nhà phát triển ứng dụng không phải lo lắng về các đảm bảo ACID trên nhiều tài liệu Nhưng đôi khi dựa trên nhu cầu và thiết kế ứng dụng của bạn, bạn không thể có mọi thứ trong một tài liệu. Bạn có thể muốn các tài liệu trải rộng trên nhiều bộ sưu tập và các tình huống như vậy yêu cầu đảm bảo ACID Vì vậy, hãy thảo luận về một số khái niệm xung quanh hỗ trợ Giao dịch MongoDB. Ở phần sau của blog, tôi cũng sẽ chia sẻ đoạn mã giúp bạn thêm hỗ trợ giao dịch trong ứng dụng của mình Thao tác viết bên ngoài Giao dịchNhiều thao tác ghi được thực hiện đồng thời trên cùng một tài liệu bên ngoài phạm vi giao dịch cũng gây ra xung đột ghi. Nhưng với tư cách là nhà phát triển, bạn không phải lo lắng về vấn đề này vì WiredTiger xử lý nội bộ lỗi WriteConfilct và tiếp tục thử lại các bản cập nhật cho đến khi có thể hoàn tất mà không gặp phải bất kỳ xung đột nào hoặc trong MaxTime đã xác định Tại sao WriteConflicts lại xảy ra?MongoDB sử dụng các bản cập nhật lạc quan cho đồng thời ở cấp độ tài liệu và WriteConflict cho biết khi nào nhiều người dùng đang cố gắng cập nhật cùng một tài liệu MongoDB sử dụng WiredTiger Storage Engine để xử lý các sự cố như vậy. Bất kỳ WriteConflict khác không nào thông báo cho công cụ cập nhật các yêu cầu đối với tài liệu có thể gây ra vi phạm đồng thời dữ liệu. Bất cứ khi nào WiredTiger API phát hiện một WriteConflict do vi phạm đồng thời, nó sẽ tăng số liệu WriteConflict và MongoDB sẽ thử lại các bản cập nhật cho đến khi hoàn thành mà không gặp phải bất kỳ xung đột nào Số lượng lớn WriteConflict có thể gây ra sự chậm trễ trong phản hồi của ứng dụng và bạn sẽ phải cố gắng tìm ra nguyên nhân Thao tác ghi trong Phạm vi giao dịchNhư đã đề cập, mọi cập nhật gây ra xung đột ghi bên ngoài giao dịch sẽ được công cụ lưu trữ WiredTiger tự động thử lại Viết bên trong phạm vi giao dịch hoạt động hơi khác một chút. Trong WiredTiger, một bản cập nhật cho tài liệu là lạc quan và hủy bỏ giao dịch trong trường hợp phát hiện xung đột Hãy xem xét ví dụ sau đây được mô tả trong sơ đồ Nếu một ứng dụng khác/cùng cố gắng sửa đổi cùng một tài liệu trước khi giao dịch kết thúc, nó sẽ đưa ra lỗi WriteConflict Từ sơ đồ trên, bạn có thể thấy rằng Giao dịch (t1) phải chịu Xung đột ghi vì cùng một tài liệu (D1) được ứng dụng khác sửa đổi đồng thời trước khi giao dịch kết thúc. Thao tác ghi khác có nằm trong phạm vi giao dịch hay không không quan trọng Ví dụ về lỗi WriteConflict Viết hoạt động trong phạm vi giao dịch trong cụm nhiều phân đoạnHành vi thao tác Ghi trong cụm Sharded tương tự như những gì đã được giải thích ở trên. Trong môi trường Sharded, bạn có thể thấy lỗi như “StaleConflict” xảy ra trong quá trình di chuyển khối. (Ghi chú. Chunk Migration sẽ được đề cập trong một bài viết khác) Nhưng tóm lại, MongoDB sử dụng cơ chế này để chia nhỏ dữ liệu và phân phối đồng đều dựa trên Shard key Các nhà phát triển ứng dụng phải có logic để hủy bỏ giao dịch hiện tại và thử lại đối với bất kỳ trường hợp ngoại lệ nào, chẳng hạn như MVCC (Kiểm soát đồng thời nhiều phiên bản) bao gồm xung đột ghi, lỗi mạng tạm thời hoặc cuộc bầu cử bản sao chính Nếu bạn đang sử dụng Trình điều khiển Mongo-Java cốt lõi, thì API gọi lại mới sẽ kết hợp logic thử lại đối với lỗi cam kết TransientTransactionError hoặc UnknownTransactionCommitResult Sau đây là Đoạn mã để giới thiệu quản lý giao dịch- Định cấu hình Trình quản lý giao dịch MongodbĐể sử dụng Quản lý giao dịch dữ liệu mùa xuân, bạn phải định cấu hình MongoTransactionManager Bean Hỗ trợ giao dịch với dữ liệu mùa xuânVới các chú thích Giao dịch và Có thể thử lại, bạn không cần phải tự mình viết thử lại logic để xử lý giao dịch theo cách thủ công MongoClientOptionsBạn có thể đặt Mối quan tâm Đọc và Viết thông qua MongoClientOptions Các phương pháp hay nhất-Tránh tạo các Giao dịch kéo dàiViệc tạo các giao dịch dài hạn và thực hiện các hoạt động quá mức có thể gây ra áp lực cao lên bộ đệm Công cụ lưu trữ WiredTiger Giới hạn thời gian chạy giao dịchGiới hạn giao dịch mặc định của MongoDB là 60 giây và mọi giao dịch chạy ngoài giới hạn sẽ bị hủy bỏ. Bạn có thể linh hoạt thay đổi con số này và thực hiện giao dịch trong thời gian dài hơn Để tránh vấn đề hết thời gian chờ, các giao dịch nên được chia thành các phần nhỏ hơn trong khi không thực hiện gì khác ngoài các hoạt động của DB (tránh thực hiện bất kỳ logic ứng dụng/công việc nào trong giao dịch) Giao dịch trong một cụm nhiều phân đoạn được phân phốiCác giao dịch ảnh hưởng đến nhiều phân đoạn gây ra chi phí hiệu suất cao hơn khi truy vấn được phát trên nhiều nút tham gia trên mạng. MongoDB cho phép bạn chỉ định WriteConcern để xác định mức độ đảm bảo độ bền khi ghi vào cơ sở dữ liệu Lưu ý rằng các mối quan tâm ghi có thể áp dụng cho bất kỳ thao tác nào được thực thi đối với cơ sở dữ liệu, bất kể bạn đang chạy một thao tác thông thường đối với một tài liệu hay một giao dịch nhiều tài liệu Sau đây là các tùy chọn WriteConcern mà bạn có thể định cấu hình trên cơ sở mỗi kết nối, mỗi cơ sở dữ liệu, mỗi bộ sưu tập hoặc thậm chí mỗi hoạt động Các tùy chọn như sau- Đã xác nhận ghi- Điều này sẽ sử dụng mối quan tâm Ghi mặc định được định cấu hình trên máy chủ và đợi xác nhận của máy chủ Bạn có thể chuyển giá trị w để xác định hành vi Ghi xác nhận W0. Với mối quan tâm này, thao tác ghi sẽ không đợi xác nhận từ máy chủ. Trong trường hợp này, dữ liệu có thể được khôi phục nếu bước xuống chính trước khi thao tác ghi được sao chép sang bước phụ W1. Với mối quan tâm này, thao tác ghi sẽ chờ xác nhận từ Chính trong trường hợp tập hợp bản sao. Trong trường hợp này, dữ liệu có thể được khôi phục nếu bước xuống chính được sao chép sang bước phụ trước thao tác ghi W2. Với mối quan tâm này, thao tác ghi sẽ chờ xác nhận từ Chính và một trong các Phụ W3. Với mối quan tâm này, thao tác ghi sẽ chờ xác nhận từ Chính và cả Thứ hai Tạp chí được công nhận. Với mối quan tâm này, thao tác Ghi sẽ được máy chủ xác nhận sau khi nó được chuyển vào nhật ký trên máy chủ chính. Hoạt động ghi với mối quan tâm này đảm bảo dữ liệu lâu bền trên đĩa, ngay cả khi máy chủ MongoDB gặp sự cố Bản sao được công nhận. Đây là một tùy chọn không được dùng nữa và tùy chọn ưu tiên là sử dụng WriteConcern W2, hoạt động giống như mối quan tâm về xác nhận do bộ bản sao Số đông. Với mối quan tâm này, thao tác ghi sẽ đợi phần lớn các thành viên mang dữ liệu và có thể bầu chọn của bộ bản sao và thao tác này không thể được khôi phục ngay cả trong trường hợp bầu cử sơ bộ. Mối quan tâm này cũng đảm bảo rằng thao tác ghi được ghi vào nhật ký trên phần lớn các bản sao, bao gồm cả bản chính Tiếp theo là gì?Nếu bạn là nhà phát triển mới/có kinh nghiệm trung cấp sử dụng MongoDB trong ứng dụng của mình, hãy tìm hiểu các khái niệm MongoDB từ trang web mongodb-university. Tất cả các khóa học đều miễn phí Tôi hy vọng bài viết hữu ích cho những người muốn thêm hỗ trợ Giao dịch trong MongoDB với khung dữ liệu Spring MongoDB có tốt cho giao dịch không?MongoDB luôn cung cấp đảm bảo giao dịch cho các hoạt động trên một tài liệu . nguyên tử. Các hoạt động tài liệu đơn lẻ luôn là nguyên tử trong MongoDB. Các thao tác này có thể ghi vào một hoặc nhiều trường, bao gồm các tài liệu con, các phần tử trong một mảng và thậm chí cả các mảng lồng nhau.
MongoDB xử lý các giao dịch hoặc khóa như thế nào?MongoDB sử dụng khóa đa chi tiết [1] cho phép khóa các hoạt động ở cấp toàn cầu, cơ sở dữ liệu hoặc bộ sưu tập và cho phép cá nhân . g. , ở cấp độ tài liệu trong WiredTiger).
Các trường hợp sử dụng tốt nhất cho MongoDB là gì?MongoDB được sử dụng rộng rãi để lưu trữ thông tin và chi tiết sản phẩm của các công ty tài chính và thương mại điện tử . Bạn thậm chí có thể lưu trữ danh mục sản phẩm của thương hiệu của bạn trong đó. MongoDB cũng có thể được sử dụng để lưu trữ và lập mô hình dữ liệu do máy tạo. Để làm được điều này, bạn có thể tìm hiểu tài liệu “Lưu trữ dữ liệu nhật ký”.
Cách tốt nhất để cải thiện hiệu suất của truy vấn MongoDB trong đó truy vấn của bạn tham chiếu đến trường cụ thể trong tài liệu là gì?Tối ưu hóa hiệu suất truy vấn . Tạo chỉ mục để hỗ trợ truy vấn Giới hạn số lượng kết quả truy vấn để giảm nhu cầu mạng Sử dụng phép chiếu để chỉ trả lại dữ liệu cần thiết Sử dụng $hint để chọn một chỉ mục cụ thể Sử dụng toán tử gia tăng để thực hiện thao tác phía máy chủ |