Tôi đang đọc một bài viết về khung phân tích Gizzard được phát hành gần đây của twitter (http://engineering.twitter.com/2010/04/introducing-gizzard-framework-for.html). Nó đề cập rằng tất cả các hoạt động ghi phải là idempotent để đảm bảo độ tin cậy cao.Làm thế nào để viết idempotent hoạt động ghi?
Theo wikipedia, "Hoạt động không cần thiết là các hoạt động có thể được áp dụng nhiều lần mà không thay đổi kết quả." Nhưng, IMHO, trong trường hợp Gizzard, các hoạt động viết idempotent phải là những hoạt động trong đó chuỗi không quan trọng.
Bây giờ, câu hỏi của tôi là: Làm thế nào để tôi làm cho hoạt động viết idempotent?
Điều duy nhất tôi có thể tưởng tượng là phải có số phiên bản được đính kèm với mỗi lần viết. Ví dụ: trong hệ thống blog, mỗi blog phải có $ blog_id và $ nội dung. Ở cấp ứng dụng, chúng tôi luôn viết nội dung blog như thế này write ($ blog_id, $ content, $ version). $ version được xác định là duy nhất ở cấp ứng dụng. Vì vậy, nếu một ứng dụng đầu tiên cố gắng đặt một blog thành "Xin chào thế giới" và thứ hai muốn nó là "Tạm biệt", thì viết là không có giá trị. Chúng tôi có hai thao tác ghi như vậy:
write($blog_id, "Hello world", 1);
write($blog_id, "Goodbye", 2);
Hai hoạt động này được cho là thay đổi hai bản ghi khác nhau trong DB. Vì vậy, không có vấn đề bao nhiêu lần và những gì trình tự hai hoạt động này được thực hiện, kết quả là như nhau.
Đây chỉ là sự hiểu biết của tôi. Nêu tôi sai vui long chân chỉnh tôi.