TechDogy

(paduvi)

You can do anything, but not everything..

Một số tip khi define schema

Categories:

Trong thực tế, ta thường không tránh khỏi việc phải cập nhật schema (hay còn gọi là schema evolution). Giống như thiết kế kiến trúc hệ thống, việc define schema cũng cần phải được tính toán khéo léo để có thể dễ dàng tương thích cho cả phiên bản cũ và mới (Backward/Forward Compatibility).

Bài viết này sử dụng định dạng Avro làm ví dụ minh họa, tuy nhiên ta cũng có thể áp dụng tương tự với các định dạng khác như JSON, Thrift, Protobuf… hay cho cả define table schema.

Tổng quát:

  • Nên cung cấp giá trị default của field, điều này giúp thỏa mãn forward compatibility khi mình consume message từ version cũ. Trong trường hợp không sử dụng field đó nữa, ta hoàn toàn có thể xóa nó đi mà vẫn đảm bảo backward compatibility vì đã được khai báo giá trị mặc định.
    • Bất cứ khi nào add thêm field, cần cung cấp giá trị default
  • Không được đổi data type
    • Nếu bạn thực sự có nhu cầu cần đổi data type, hãy bổ sung vào 1 field mới, thay vì sửa đè lên field hiện tại.
    • Add giá trị vào Enum cũng được coi là đổi data type, tuy nhiên ta vẫn có thể bổ sung được với điều kiện phải khai báo giá trị default cho enum từ trước.
  • Không được đổi tên field. Với Avro, bạn có thể sử dụng tính năng alias nếu cần sửa tên field ở phía read.

Tham khảo:

Latest Comments:

  1. Mình đi search về storage engine thì thấy series về bài của bạn (mình đoán là bạn cũng đọc từ…

  2. Series rất hay, ủng hộ admin làm thêm về các database khác như Scylladb (discord mới migrate từ Cassandra sang)

  3. bài viết rất chất lượng, ủng hộ mạnh tác giả

  4. Mình đang làm về authentication thì phải tìm hiểu thêm về JWE (Json Web Encryption) và JWS (Json Web Signature).…

Leave a Reply

Your email address will not be published. Required fields are marked *