Tôi đang tạo một ứng dụng máy tính để bàn vẫn tồn tại dữ liệu trên đám mây. Một mối quan tâm tôi có là bắt đầu chỉnh sửa một mục trong ứng dụng và để nó trong một thời gian khiến dữ liệu trở nên cũ kỹ. Điều này rõ ràng cũng có thể xảy ra nếu 2 người cố gắng chỉnh sửa cùng một mục cùng một lúc. Khi họ hoàn thành chỉnh sửa và muốn lưu dữ liệu, tôi sẽ cần ghi đè lên những gì hiện có trong cơ sở dữ liệu hoặc kiểm tra xem họ đã bắt đầu chỉnh sửa sau thay đổi cuối cùng hay buộc họ loại bỏ các thay đổi của họ hoặc có thể cho họ tùy chọn để mạo hiểm ghi đè những thay đổi của người khác.
Tôi nghĩ về việc thêm một trường is_locked
và lock_timestamp
vào bảng DB. Khi người dùng bắt đầu chỉnh sửa mục, hàng sẽ thay đổi is_locked
thành true và đặt dấu thời gian khóa thành thời gian hiện tại. Sau đó tôi sẽ có một khoảng thời gian mà khóa được giữ (ví dụ 5 phút). Nếu bất cứ ai khác cố gắng chỉnh sửa mục, họ sẽ nhận được một thông báo cho biết mục đó đã bị khóa và khi khóa tự động hết hạn. Nếu người dùng bỏ đi trong khi chỉnh sửa, khóa sẽ tự động hết hạn sau một khoảng thời gian tương đối ngắn và một khi người dùng sẽ được cảnh báo rằng khóa đã hết hạn và buộc phải khởi động lại chỉnh sửa sau khi dữ liệu được làm mới.
Đây sẽ là một phương pháp tốt để ngăn chặn ghi đè dữ liệu cũ? Có phải là quá mức không (tôi không hy vọng ứng dụng sẽ được sử dụng bởi nhiều người cùng lúc trên một tài khoản).
(Một mối quan tâm khác của tôi là có 2 người nhận được một khóa cho cùng một mặt hàng, tuy nhiên tôi tin rằng đó là một điều kiện cuộc đua mà tôi cảm thấy thoải mái.)