Giao dịch cơ sở dữ liệu là gì? |
Cơ sở dữ liệu nổi tiếng với khả năng xử lý hàng triệu yêu cầu đồng thời mỗi giây. Trong nhiều trường hợp, những yêu cầu này tác động đến cùng một mục trong cơ sở dữ liệu. Ví dụ, bạn đang cố gắng mua một lượng hạn chế trò chơi yêu thích của mình trên một trang thương mại điện tử trực tuyến. Giả sử tất cả mọi người trong cửa hàng trực tuyến đều đặt trò chơi vào giỏ hàng của họ cùng một lúc và tiến hành thanh toán. Trong trường hợp đó, số lượng hàng tồn kho còn lại cần được tính toán chính xác - không thừa cũng không thiếu. Thông thường, một giao dịch cơ sở dữ liệu được sử dụng trong các trường hợp như vậy.
Mục lục
Giao dịch cơ sở dữ liệu là gì?
Nói ngắn gọn, một giao dịch cơ sở dữ liệu là một chuỗi nhiều hoạt động được thực hiện trên một cơ sở dữ liệu và tất cả được phục vụ như một đơn vị công việc logic duy nhất - diễn ra toàn bộ hoặc không hề có. Nói cách khác, không bao giờ có trường hợp chỉ thực hiện một nửa các hoạt động và lưu kết quả.
Khi một giao dịch cơ sở dữ liệu đang được thực hiện, trạng thái của cơ sở dữ liệu có thể tạm thời không nhất quán, nhưng khi giao dịch được cam kết hoặc kết thúc, các thay đổi được áp dụng.
Để giải thích khái niệm giao dịch cơ sở dữ liệu, hãy sử dụng một ví dụ điển hình về việc chuyển tiền giữa Tài khoản A và Tài khoản B. Giả sử bạn muốn chuyển 5 đô la từ Tài khoản A sang Tài khoản B. Hành động này có thể được chia thành các hoạt động đơn giản sau:
- Tạo một bản ghi để chuyển 5 đô la từ Tài khoản A sang Tài khoản B. Điều này thường được gọi là bắt đầu của một giao dịch cơ sở dữ liệu.
- Đọc số dư từ Tài khoản A.
- Trừ 5 đô la khỏi số dư của Tài khoản A.
- Đọc số dư từ Tài khoản B.
- Thêm 5 đô la tín dụng vào Tài khoản B.
Bây giờ, nếu cơ sở dữ liệu của bạn đang chạy giao dịch này như một đơn vị nguyên tử duy nhất và hệ thống bị lỗi do mất điện, giao dịch có thể bị hoàn tác, khôi phục cơ sở dữ liệu của bạn về trạng thái ban đầu. Thông thường, một thuật ngữ như hoàn tác (rollback) dùng để chỉ quá trình hoàn tác mọi thay đổi do giao dịch thực hiện và thuật ngữ cam kết (commit) được sử dụng để chỉ một thay đổi vĩnh viễn do giao dịch thực hiện.
Giao dịch cơ sở dữ liệu hoạt động như thế nào?
Trước khi tìm hiểu về cách hoạt động của giao dịch cơ sở dữ liệu, hãy khám phá lý do tại sao chúng lại cần thiết ngay từ đầu.
- Lỗi hệ thống là không thể tránh khỏi và trong những trường hợp này, một giao dịch cung cấp một cách để đảm bảo rằng kết quả đáng tin cậy và nhất quán. Điều này có nghĩa là trạng thái của cơ sở dữ liệu phản ánh tất cả các thay đổi giao dịch đã được cam kết trước điểm lỗi và các giao dịch đang được thực hiện tại điểm lỗi được hoàn tác sạch sẽ.
- Khi nhiều yêu cầu đồng thời tác động đến máy chủ cơ sở dữ liệu, thay đổi cùng một dữ liệu cơ bản đồng thời, giao dịch phải cách ly các yêu cầu khỏi nhau để tránh xung đột.
Trong vòng đời của nó, một giao dịch cơ sở dữ liệu trải qua nhiều trạng thái. Những trạng thái này được gọi là trạng thái giao dịch và thường là một trong những trạng thái sau:
- Trạng thái hoạt động (Active): Đây là trạng thái đầu tiên trong quá trình thực thi của một giao dịch. Một giao dịch ở trạng thái hoạt động miễn là các lệnh của nó (hoạt động đọc hoặc ghi) được thực hiện.
- Cam kết một phần (Partially committed): Một thay đổi đã được thực thi trong trạng thái này, nhưng cơ sở dữ liệu vẫn chưa cam kết thay đổi trên đĩa. Trong trạng thái này, dữ liệu được lưu trữ trong bộ nhớ đệm và bộ đệm vẫn chưa được ghi vào đĩa.
- Cam kết (Committed): Trong trạng thái này, tất cả các cập nhật giao dịch được lưu trữ vĩnh viễn trong cơ sở dữ liệu. Do đó, không thể hoàn tác giao dịch sau điểm này.
- Thất bại (Failed): Nếu một giao dịch thất bại hoặc bị hủy bỏ trong trạng thái hoạt động hoặc trạng thái cam kết một phần, nó sẽ chuyển sang trạng thái thất bại.
- Kết thúc (Terminated): Đây là trạng thái cuối cùng và cuối cùng của giao dịch sau khi được cam kết hoặc hủy bỏ. Điều này đánh dấu sự kết thúc của vòng đời giao dịch cơ sở dữ liệu.
Các thuộc tính ACID là gì và tại sao chúng quan trọng?
Trong các cơ sở dữ liệu quan hệ, các giao dịch phải nguyên tử, nhất quán, cách ly và bền vững. Những thuộc tính này thường được viết tắt là ACID. Các thuộc tính ACID đảm bảo rằng một giao dịch cơ sở dữ liệu được xử lý đáng tin cậy. Trong phần này, hãy tìm hiểu thêm về ý nghĩa của các thuộc tính này đối với ứng dụng.
Tính nguyên tử (Atomicity)
Tính nguyên tử trong một giao dịch có nghĩa là "hoặc tất cả, hoặc không gì cả". Khi một giao dịch được cam kết, cơ sở dữ liệu sẽ hoàn tất giao dịch thành công hoặc hoàn tác nó để đưa cơ sở dữ liệu trở về trạng thái ban đầu. Ví dụ, trong một ứng dụng đặt vé trực tuyến, một lượt đặt vé có thể bao gồm hai hành động riêng biệt tạo thành một giao dịch — giữ chỗ cho khách hàng và thanh toán cho chỗ ngồi. Một giao dịch đảm bảo rằng khi việc đặt vé hoàn tất, cả hai hành động này, dù độc lập, đều xảy ra trong cùng một giao dịch. Nếu bất kỳ hành động nào thất bại, toàn bộ giao dịch sẽ bị hoàn tác, và chỗ ngồi được giải phóng cho giao dịch khác.
Tính nhất quán (Consistency)
Một trong những lợi ích chính của việc sử dụng giao dịch là duy trì tính toàn vẹn dữ liệu, bất kể giao dịch thành công hay thất bại. Các giao dịch chỉ có thể thay đổi dữ liệu liên quan theo cách được cơ sở dữ liệu cho phép, đảm bảo rằng một cái nhìn nhất quán về dữ liệu luôn được duy trì. Ví dụ, khi người dùng gửi tiền vào một ứng dụng ngân hàng trực tuyến, họ muốn thấy kết quả của giao dịch này được phản ánh ngay lập tức khi kiểm tra số dư, để đảm bảo rằng tiền của họ không bị mất. Với tính nhất quán giao dịch mạnh mẽ, sẽ không bao giờ xuất hiện tình trạng tổng số tiền trong ngân hàng bị thừa hoặc thiếu hơn thực tế.
Khi một giao dịch được cam kết, đảm bảo rằng bất kỳ giao dịch đọc-ghi nào tiếp theo — bất kể được xử lý bởi bản sao nào — đều đọc được tất cả dữ liệu đã được ghi bởi giao dịch trước đó. Tuy nhiên, đối với các cơ sở dữ liệu lớn với nhiều bản sao ở các vị trí địa lý khác nhau, hầu hết các hệ thống SQL và NoSQL không thể đảm bảo tính nhất quán toàn cầu giữa các bản sao. Thay vào đó, chúng cho phép các bản sao có thể tạm thời khác nhau, và kết quả của một giao dịch có thể thay đổi tùy thuộc vào bản sao mà nó được gửi tới.
Tính cô lập (Isolation)
Khi có nhiều giao dịch đồng thời chạy cùng lúc, mỗi giao dịch cần được giữ độc lập, không ảnh hưởng đến các giao dịch khác đang thực thi song song. Đối với hầu hết các hệ thống cơ sở dữ liệu, thứ tự của các giao dịch không được biết trước. Thay vào đó, các giao dịch được thực hiện song song và một số dạng khóa cơ sở dữ liệu được sử dụng để đảm bảo rằng kết quả của một giao dịch không ảnh hưởng đến kết quả của giao dịch khác. Thông thường, các cơ sở dữ liệu cung cấp nhiều mức độ cô lập khác nhau để kiểm soát mức độ toàn vẹn của giao dịch.
Tính bền vững (Durability)
Tính bền vững có nghĩa là một giao dịch được cam kết thành công sẽ tồn tại vĩnh viễn. Để thực hiện điều này, một mục nhập được thêm vào nhật ký giao dịch của cơ sở dữ liệu cho mỗi giao dịch thành công.
Từ vựng Tiếng Anh mới
Supply - Cung cấp
verb - uk /səˈplaɪ/ us /səˈplaɪ/
Eg.: Electrical power is supplied by underground cables.
Accurately - Chính xác
adverb - uk /ˈæk.jə.rət.li/ us /ˈæk.jɚ.ət.li/
Eg.: Electrical power is supplied by underground cables.
Inevitable - Không thể tránh khỏi
adjective - uk /ɪˈnev.ɪ.tə.bəl/ us /ˌɪnˈev.ə.t̬ə.bəl/
Eg.: System failures are inevitable.
Simultaneously - Đồng thời
adverb - uk /ˌsɪm.əlˈteɪ.ni.əs.li/ us /ˌsaɪ.məlˈteɪ.ni.əs.li/
Eg.: Two children answered the teacher's question simultaneously.