Khả năng tuần tự hóa và cách ly giao dịch

Trang này mô tả sự tranh chấp dữ liệu giao dịch, khả năng tuần tự hóa và sự cô lập. Đối với các mẫu mã giao dịch, thay vào đó hãy xem các giao dịch và ghi theo đợt .

Giao dịch và tranh chấp dữ liệu

Để một giao dịch thành công, các tài liệu được truy xuất bằng các thao tác đọc của nó phải không bị sửa đổi bởi các thao tác bên ngoài giao dịch. Nếu một hoạt động khác cố gắng thay đổi một trong những tài liệu đó thì hoạt động đó sẽ chuyển sang trạng thái tranh chấp dữ liệu với giao dịch.

Tranh chấp dữ liệu
Khi hai hoặc nhiều hoạt động cạnh tranh để kiểm soát cùng một tài liệu. Ví dụ: một giao dịch có thể yêu cầu một tài liệu phải nhất quán trong khi một hoạt động đồng thời cố gắng cập nhật các giá trị trường của tài liệu đó.

Cloud Firestore giải quyết tranh chấp dữ liệu bằng cách trì hoãn hoặc không thực hiện được một trong các thao tác. Thư viện máy khách Cloud Firestore tự động thử lại các giao dịch không thành công do tranh chấp dữ liệu. Sau một số lần thử lại hữu hạn, thao tác giao dịch không thành công và trả về thông báo lỗi:

ABORTED: Too much contention on these documents. Please try again.

Khi quyết định thao tác nào bị lỗi hoặc bị trì hoãn, hành vi sẽ phụ thuộc vào loại thư viện máy khách.

  • SDK dành cho thiết bị di động/web sử dụng các biện pháp kiểm soát đồng thời lạc quan.

  • Thư viện máy chủ máy khách sử dụng các điều khiển đồng thời bi quan.

Tranh chấp dữ liệu trong SDK di động/web

SDK di động/web (nền tảng Apple, Android, Web, C++) sử dụng các biện pháp kiểm soát đồng thời lạc quan để giải quyết tranh chấp dữ liệu.

Kiểm soát đồng thời lạc quan
Dựa trên giả định rằng khả năng xảy ra tranh chấp dữ liệu là không cao hoặc việc giữ các khóa cơ sở dữ liệu là không hiệu quả. Các giao dịch lạc quan không sử dụng khóa cơ sở dữ liệu để chặn các hoạt động khác thay đổi dữ liệu.

SDK di động/web sử dụng các biện pháp kiểm soát đồng thời lạc quan vì chúng có thể hoạt động trong môi trường có độ trễ cao và kết nối mạng không đáng tin cậy. Khóa tài liệu trong môi trường có độ trễ cao sẽ gây ra quá nhiều lỗi do tranh chấp dữ liệu.

Trong SDK di động/web, giao dịch sẽ theo dõi tất cả tài liệu bạn đọc bên trong giao dịch. Giao dịch chỉ hoàn thành thao tác ghi nếu không có tài liệu nào thay đổi trong quá trình thực hiện giao dịch. Nếu bất kỳ tài liệu nào thay đổi, trình xử lý giao dịch sẽ thử lại giao dịch. Nếu giao dịch không thể nhận được kết quả rõ ràng sau một vài lần thử lại thì giao dịch đó sẽ không thành công do xung đột dữ liệu.

Tranh chấp dữ liệu trong thư viện máy chủ máy khách

Các thư viện máy khách (C#, Go, Java, Node.js, PHP, Python, Ruby) sử dụng các biện pháp kiểm soát đồng thời bi quan để giải quyết tranh chấp dữ liệu.

Kiểm soát đồng thời bi quan
Dựa trên giả định rằng có khả năng xảy ra tranh chấp dữ liệu. Các giao dịch bi quan sử dụng khóa cơ sở dữ liệu để ngăn các hoạt động khác sửa đổi dữ liệu.

Thư viện máy chủ máy khách sử dụng các biện pháp kiểm soát đồng thời bi quan vì chúng giả định độ trễ thấp và kết nối đáng tin cậy với cơ sở dữ liệu.

Trong thư viện máy chủ, máy khách, các giao dịch đặt khóa trên tài liệu chúng đọc. Khóa giao dịch trên tài liệu sẽ chặn các giao dịch khác, ghi theo đợt và ghi không giao dịch thay đổi tài liệu đó. Một giao dịch giải phóng các khóa tài liệu của nó tại thời điểm cam kết. Nó cũng mở khóa nếu hết thời gian hoặc bị lỗi vì bất kỳ lý do gì.

Khi một giao dịch khóa một tài liệu, các thao tác ghi khác phải đợi giao dịch giải phóng khóa của nó. Giao dịch có được khóa của họ theo thứ tự thời gian.

Cách ly tuần tự hóa

Tranh chấp dữ liệu giữa các giao dịch có liên quan chặt chẽ đến mức độ cô lập cơ sở dữ liệu. Mức cô lập của cơ sở dữ liệu mô tả mức độ hệ thống xử lý xung đột giữa các hoạt động đồng thời. Xung đột xuất phát từ các yêu cầu cơ sở dữ liệu sau:

  • Giao dịch yêu cầu dữ liệu chính xác, nhất quán.
  • Để sử dụng hiệu quả tài nguyên, cơ sở dữ liệu thực hiện các hoạt động đồng thời.

Trong các hệ thống có mức cô lập thấp, thao tác đọc trong giao dịch có thể đọc dữ liệu không chính xác từ những thay đổi không được cam kết trong thao tác đồng thời.

Cách ly có thể tuần tự hóa xác định mức cách ly cao nhất. Cách ly có thể tuần tự hóa có nghĩa là:

  • Bạn có thể giả định rằng cơ sở dữ liệu thực hiện các giao dịch theo chuỗi.
  • Giao dịch không bị ảnh hưởng bởi những thay đổi không được cam kết trong các hoạt động đồng thời.

Sự đảm bảo này phải được duy trì ngay cả khi cơ sở dữ liệu thực hiện nhiều giao dịch song song. Cơ sở dữ liệu phải triển khai các biện pháp kiểm soát đồng thời để giải quyết các xung đột có thể phá vỡ sự đảm bảo này.

Cloud Firestore đảm bảo cách ly các giao dịch theo tuần tự. Các giao dịch trong Cloud Firestore được tuần tự hóa và cách ly theo thời gian cam kết.

Cách ly tuần tự hóa theo thời gian cam kết

Cloud Firestore chỉ định cho mỗi giao dịch một thời gian cam kết đại diện cho một thời điểm duy nhất. Khi Cloud Firestore thực hiện các thay đổi của giao dịch đối với cơ sở dữ liệu, bạn có thể giả định rằng tất cả hoạt động đọc và ghi trong giao dịch diễn ra chính xác tại thời điểm cam kết.

Thực tế thực hiện một giao dịch đòi hỏi một khoảng thời gian. Việc thực hiện giao dịch bắt đầu trước thời gian cam kết và việc thực hiện nhiều thao tác có thể chồng chéo. Cloud Firestore duy trì khả năng cách ly có thể tuần tự hóa và đảm bảo rằng:

  • Cloud Firestore cam kết giao dịch theo thứ tự thời gian cam kết.
  • Cloud Firestore tách biệt các giao dịch khỏi các hoạt động đồng thời với thời gian cam kết muộn hơn.

Trong trường hợp tranh chấp dữ liệu giữa các hoạt động đồng thời, Cloud Firestore sử dụng các biện pháp kiểm soát đồng thời lạc quan và bi quan để giải quyết tranh chấp.

Sự cô lập trong một giao dịch

Cách ly giao dịch cũng áp dụng cho các thao tác ghi trong giao dịch. Các truy vấn và đọc bên trong một giao dịch không thấy kết quả của lần ghi trước đó trong giao dịch đó. Ngay cả khi bạn sửa đổi hoặc xóa tài liệu trong một giao dịch, tất cả tài liệu được đọc trong giao dịch đó đều trả về phiên bản của tài liệu tại thời điểm cam kết, trước các thao tác ghi của giao dịch. Hoạt động đọc không trả về gì nếu tài liệu không tồn tại.

Các vấn đề về tranh chấp dữ liệu

Để biết thêm thông tin về tranh chấp dữ liệu và cách giải quyết chúng, hãy xem trang xử lý sự cố .