Hướng dẫn làm bài tập Informational, Transactional năm 2024

Hãy nâng cấp lên Microsoft Edge để tận dụng các tính năng mới nhất, bản cập nhật bảo mật và hỗ trợ kỹ thuật.

Transaction Processing

  • Bài viết
  • 09/15/2021

Trong bài viết này

When you purchase a book from an online bookstore, you exchange money (in the form of credit) for a book. If your credit is good, a series of related operations ensures that you get the book and the bookstore gets your money. However, if a single operation in the series fails during the exchange, the entire exchange fails. You do not get the book and the bookstore does not get your money.

The technology responsible for making the exchange balanced and predictable is called transaction processing. Transactions ensure that data-oriented resources are not permanently updated unless all operations within the transactional unit complete successfully. By combining a set of related operations into a unit that either completely succeeds or completely fails, you can simplify error recovery and make your application more reliable.

Transaction processing systems consist of computer hardware and software hosting a transaction-oriented application that performs the routine transactions necessary to conduct business. Examples include systems that manage sales order entry, airline reservations, payroll, employee records, manufacturing, and shipping.

This section provides both general information on transaction processing, and specific information on how to write transactional applications and resource managers using the Microsoft .NET Framework.

“Em có biết gì về Transaction không?”. Chắc hẳn các bạn đã từng gặp câu hỏi này khi phỏng vấn xin việc. Thật đáng tiếc nếu phải tự mình thốt ra “Em không biết ạ!” hoặc “Em có nghe qua rồi nhưng….”

Hãy cùng FUNiX tìm hiểu về Transaction trong java để tự tin trong công việc

1. Công Dụng

Trước tiên hãy đi vào ví dụ “huyền thoại” đã từng xuất hiện trong nhiều bài viết:

  • Hôm nay là ngày mà bạn phải thực hiện nghĩa vụ chuyển tiền cho Vợ hàng tháng
  • Bạn đã thực hiện chuyển 3 tỉ (nhiều nhiều mới sót) và tài khoản của bạn đã bị trừ tiền.
  • Có một lỗi trong hệ thống mà tài khoản của vợ bạn không nhận được nhưng tài khoản của bạn vẫn bị trừ tiền \=> Và rồi bạn bị mang tiếng trễ hạn và giấu quỹ đen.

Đó là hậu quả rất thực tế của việc không áp dụng Transaction. Nếu áp dụng, Transaction sẽ có 2 hành động (operations):

  • Tài khoản của bạn đã bị trừ 2 tỉ
  • Tài khoản của vợ vừa được cộng thêm 2 tỉ

Nếu một trong 2 hành động trên bị lỗi thì Transaction sẽ tự động hủy và tài khoản của bạn sẽ không bị thay đổi, quá an toàn đúng không. Chính vì ràng buộc trên nên Transaction đã được ứng dụng nhiều trong các hành động yêu cầu độ tin cậy, đảm bảo được tính chính xác dữ liệu…

  • Nhóm các hoạt động của một tác vụ
  • Nếu có lỗi xảy ra trong Transaction thì tất cả các tác vụ sẽ thất bại
  • Đảm bảo được tính toàn vẹn của phiên làm việc với cớ sở dữ liệu \=> Đó là 3 công dụng của Transaction!

2. Các loại Transaction

Transaction được chia làm 2 loại chính:

  • Flat Transaction: Thực thi các operation là tuần tự từ trái sang phải hay từ trên xuống dưới
  • Nested Transaction: Các operation được lồng nhau, việc thực thi các operation dựa theo nguyên tắc từ trong ra ngoài

3. ACID Transaction

Đây là viết tắt các tính chất trong Transaction. Ta sẽ đi vào từng chữ cái ACID.

  • Atomicity – Tính đơn vị
    • Transaction sẽ xác định ra ranh giới một cách rõ ràng điểm đầu – điểm cuối là gì, tức là điểm bắt đầu và điểm kết thúc. Có ý nghĩa đơn giản là nếu một thành phần nào đó trong transaction thực thi bị lỗi thì đồng nghĩa với việc không có gì xảy ra về mặt dữ liệu.
  • Consistency – Tính nhất quán
    • Dữ liệu được nhất quán từ thời điểm bắt đầu đến thời điểm kết thúc
    • Đảm bảo Db thay đổi chính xác theo các trạng thái mà Transaction thực hiện
  • Durability – Tính bền vững (chữ cái I trong ACID sẽ nói ở phần cuối)
    • Dữ liệu của Transaction sau khi được thực thi được cố định, không có chuyện có thể chuyển lại
    • Hiểu đơn giản là nếu đã chuyển tiền đi rồi thì bạn sẽ mất 2 tỉ trong tài khoản chứ không có chuyện 2 tỉ của bạn được giữ nguyên.
  • Isolation – Tính độc lập
    • Các transaction có khả năng hoạt động một cách độc lập và không liên quan gì đến nhau.

Tạm thời các bạn cứ quan sát trong mô hình sau:

  • Isolation được xác định qua 3 hiện tượng sau:
    • Dirty reads: VD – Bạn sẽ cập nhật dữ liệu mới lên tài khoản cá nhân trong Công ty, sếp của bạn nhìn vào số liệu bạn đã cập nhật để báo lên cấp trên. Trong một ngày nào đó, bạn chủ quan cập nhật dữ liệu mà không kiểm tra lại. Hệ thống có lỗi khiến dữ liệu không được commit thành công và sẽ trở thành dữ liệu cũ
    • Nonrepeatable reads: VD – Bạn cập nhật dữ liệu lên tài khoản Công ty, sếp bạn xem và tổng hợp, báo cáo lên cấp trên. Bạn nhận ra đã cập nhật sai và quyết định xóa đi để nhập lại. Vô tình sếp bạn nhìn lại và nhận ra các giá trị đã bị thay đổi trong khi báo cáo lên cấp trên rồi
    • Phantom reads: VD – Sếp bạn tổng hợp dữ liệu để đáp ứng lại một số yêu cầu của cấp trên. Bạn cũng tổng hợp một bản dữ liệu khác muốn giúp sếp một tay và nộp lên. Sếp nhìn vào 2 bản tổng hợp, nhận ra có sự khác nhau và phân vân không biết nộp cái nào chính xác hơn.

Như vậy, để tránh các hiện tượng trên để dẫn đến việc bị “sếp chửi” thì cần phải khóa dữ liệu, không cho những tiến trình khác đụng vào dữ liệu khi Transaction đang làm việc. Có 3 loại khóa khác nhau: