Kiểm soát đồng thời nhiều phiên bản (MVCC) là gì

2022-03-20 16:06:37

Trong bài đăng này, tôi đang chia sẻ lưu ý cơ bản về điều khiển đồng thời nhiều phiên bản và giải thích cách MVCC hoạt động.

Các bạn, bạn có thể tìm thấy rất nhiều lý thuyết và nghiên cứu về MVCC, nhưng ở đây tôi đã chia sẻ lý thuyết này bằng cách đưa ra một ví dụ dễ hiểu


Điều khiển đồng thời nhiều phiên bản là gì? :

Rất đơn giản, "Một bản ghi có nhiều phiên bản".

Ví dụ,

Người dùng A —-> đã chèn một bản ghi có ID 1. (đã lưu trữ dữ liệu này vào một trang dữ liệu.)

Người dùng B —-> cập nhật bản ghi cho ID 1.

Các bạn, bạn đang nghĩ gì bây giờ?

Một bản ghi do người dùng khác chèn và cập nhật.

Được chèn lần đầu tiên, phiên bản cũ của bản ghi được thay đổi bởi câu lệnh cập nhật mới và trở thành phiên bản mới của bản ghi. Nhưng phiên bản mới của bản ghi được thêm riêng trong trang dữ liệu.

Bất kể những thay đổi khác nhau xảy ra trên cùng một bản ghi, MVCC đã lưu trữ phiên bản khác nhau cho mỗi thay đổi, đây không phải là một quá trình bị ghi đè nhưng nó lưu trữ tất cả các phiên bản khác nhau của bản ghi.

Ví dụ,

Bạn đã viết một câu trong cuốn sách của mình.

Câu là : "Tôi là nhà phát triển cơ sở dữ liệu giỏi".

Bây giờ thay đổi câu này.

Câu là : "Tôi là quản trị viên cơ sở dữ liệu giỏi".

Bây giờ đối với thay đổi đó, bạn có thể xóa câu đó và thay đổi "nhà phát triển" thành "quản trị viên".

Các công cụ cơ sở dữ liệu khác cũng làm điều tương tự như bạn làm trong cuộc sống thực của mình, nhưng MVCC đã lưu trữ hai câu đó với các phiên bản khác nhau.

Phiên bản cũ : "Tôi là nhà phát triển cơ sở dữ liệu giỏi"

Phiên bản mới : "Tôi là quản trị viên cơ sở dữ liệu giỏi"

Theo Mặc định, Người dùng chỉ có thể chọn một phiên bản mới của dữ liệu.

Đó là định nghĩa và ví dụ đơn giản của MVCC.

Tại sao lại là MVCC?:

Trước tiên, hãy thảo luận về tính đồng thời, nhiều người dùng cùng lúc truy cập cơ sở dữ liệu hoặc bản ghi cho các mục đích khác nhau.

MVCC cung cấp quyền truy cập đồng thời vào cơ sở dữ liệu.

Hãy tưởng tượng, một người dùng đang đọc một bản ghi và người dùng thứ hai đang cố gắng cập nhật cùng một bản ghi. Bây giờ người đọc muốn đọc bản ghi đó trước khi hoàn tất quá trình cập nhật.
Trong trường hợp này, bạn có thể cho phép người đọc đọc dữ liệu chưa được cam kết hoặc dữ liệu không nhất quán chưa được cập nhật.

Mặt khác, Bạn có thể áp dụng khóa, trong đó tất cả người đọc phải đợi cho đến khi cập nhật hoàn tất.

Nhưng khóa và đọc bẩn này không phải là một giải pháp thích hợp vì khóa có thể làm giảm hiệu suất và đọc bẩn không hiển thị dữ liệu chính xác.

Trong tình huống này, MVCC là giải pháp tốt nhất, nơi người đọc có thể xem phiên bản dữ liệu đã cam kết cũ và sau khi cập nhật xong, người đọc có thể xem phiên bản dữ liệu đã cam kết mới..
Quá trình đọc và quá trình ghi không bao giờ chặn lẫn nhau.

E.g.

Người đọc có thể đọc câu này "Tôi là nhà phát triển cơ sở dữ liệu. “

Sau khi cập nhật người đọc có thể đọc câu mới "Tôi là quản trị viên cơ sở dữ liệu. “


Hạn chế của MVCC :

Hạn chế chính của MVCC là, nó đòi hỏi nhiều dung lượng hơn để lưu trữ một phiên bản khác của dữ liệu.

Có, sau này, bạn có thể xóa phiên bản cũ của dữ liệu bằng cách chỉ định lệnh dọn dẹp. Nhưng bạn yêu cầu bảo trì nhiều hơn trên các bảng đó để loại bỏ phân mảnh được tạo bởi phiên bản dữ liệu cũ.

Trong MVCC, cùng một dữ liệu gây ra xung đột cập nhật vì hai giao dịch khác nhau có thể cập nhật cùng một phiên bản của hàng.


Hầu hết các hệ thống cơ sở dữ liệu MVCC:

ORACLE

postgresql

MySQL (chỉ công cụ InnoDB)

Bạn cũng có thể đạt được MVCC trong Microsoft SQL Server bằng cách sử dụng ” Snapshot Isolation Level “.

Xem thêm:


Chia sẻ: