Transaction in memory
Khi xây dựng hệ thống backend chúng ta thường xuyên phải làm việc với transaction của các loại cơ sở dữ liệu quan hệ khác nhau. Việc nắm bắt và sử dụng thành thạo các loại này là việc cần thiêt để xây dựng một hệ thống backend tốt. Tuy nhiên trong nhiều trường hợp database chúng ta sử dụng lại không hỗ trợ transaction hoặc việc insert vào các loại cơ sở dữ liệu quan hệ được xủ lý bỏi các hệ thống acsync điều này khiến chúng ta phải xủ lý các transaction trên logic trong application của mình. Những hệ thống trước đây tôi xây dựng đều phải xử lý điều này và sau khi tìm được một cách hay ho có thể sử dụng lại thì tôi quết định viết bài chia sẻ cho mọi người.
Cài đặt transaction in memory
Ta sẽ chú ý ví dụ lưu các sản phẩm khách hàng mua thành công trên RAM sau :
Tại đây tôi sẽ lưu các sản phẩm khách hàng mua thành công vào một TxnHashMap
là implement của một HashMap nhưng áp dụng cho transaction. Kết quả của lệnh in là
{maitv=[ipad], demtv=[iphone, ipad]}
Cài đặt transaction
Tại đây tôi có các class chính sau :
interface Txn
: Class này đại diện cho một transaction trong hệ thống, đảm bảo cácTxnElement
được hoạt động. Chứa tất cả thay đổi củaTxnElement
trong một tracsaction để thực hiện commit hoặc rollback khi cần.TxnManager
: Class quản lý cách transaction của hệ thống hoạt động.interface TxnElement
: Muốn sử dụng được transaction thì cần phải implement lại interface này. Trong ví dụ trên làTxnHashMap
.
Cài đặt chi tiết mọi người tham khảo trong project nhé.
Ứng dụng
Tại đây tôi chỉ implement TxnHashMap
để sử dụng trên RAM của chương trình trong thực tế mọi người có thể tự impl các class khác nhau để phục vụ cho các mục đích khác nhau. Ví dụ thao tác với 1 key trên redis, gọi hệ thống ngoài,...