Làm kỹ sư phần mềm, hàng ngày chúng ta đều phải trừu tượng hóa dữ liệu. Chúng ta tìm cách hiểu những khái niệm còn mơ hồ ngoài đời rồi biểu diễn chúng thành biến, hàm, class, struct và các dạng thông tin có cấu trúc để phần mềm xử lý được. Dữ liệu cũng gần như luôn cần được lưu trữ. Một lựa chọn quen thuộc là database quan hệ, thường được gọi là database SQL. Trong bài này, mình sẽ cùng bạn tìm hiểu các dạng chuẩn của database quan hệ, lợi ích và cả những điểm bất lợi của chúng. Bài chỉ đề cập ba dạng chuẩn đầu tiên vì đây là những dạng phổ biến nhất trong kỹ thuật phần mềm hiện đại.
CAP, ACID và BASE là gì?!
Khi học hoặc làm việc với database, bạn có từng gặp các chữ viết tắt ACID, BASE, CAP rồi tự hỏi chúng có nghĩa là gì không? Mình đã từng như vậy, và bài này là kết quả tìm hiểu của mình về chủ đề đó.
CAP nghĩa là cái nón?
CAP là viết tắt của Consistency, Availability, Partition-tolerance, được Eric Brewer giới thiệu trong một buổi diễn thuyết vào năm 2000. Theo Brewer, khi xảy ra partition trong một hệ thống phân tán, tức là kết nối mạng hoặc liên lạc giữa các node bị chia cắt, hệ thống chỉ có thể chọn consistency hoặc availability. Nó không thể đảm bảo cả hai cùng lúc. Vậy những tính chất này là gì, và tại sao chúng ta không thể chọn cả hai?
Dual write
Khi làm backend, chúng ta thường gặp một cách xử lý dữ liệu như sau: server nhận dữ liệu từ message broker hoặc API, xử lý theo quy tắc nghiệp vụ rồi thêm hoặc cập nhật dữ liệu vào database. Sau đó, server tiếp tục gửi dữ liệu đến server kế tiếp qua message broker hoặc API. Cách xử lý này được gọi là dual write, đôi khi còn gọi là multi-write hoặc sync-write.