7 điểm bởi GN⁺ 2024-11-13 | 2 bình luận | Chia sẻ qua WhatsApp

Những điều giá như tôi đã biết về Postgres

  • Khối lượng tài liệu đồ sộ của Postgres: Tài liệu chính thức của Postgres rất xuất sắc, nhưng quá đồ sộ nên kỹ sư mới vào nghề khó có thể đọc từ đầu đến cuối.

Chuẩn hóa dữ liệu

  • Chuẩn hóa dữ liệu: Đây là quá trình loại bỏ dữ liệu trùng lặp trong schema cơ sở dữ liệu. Ví dụ, thay vì đặt cột user_email trong bảng documents, nên liên kết tới bảng users bằng khóa ngoại.
  • Sự cần thiết của phi chuẩn hóa: Đôi khi phi chuẩn hóa là cần thiết để đọc một số dữ liệu nhanh hơn. Tuy nhiên, dữ liệu phi chuẩn hóa đi kèm chi phí là dễ gây không nhất quán dữ liệu hoặc làm tăng độ phức tạp khi ghi.

Làm theo lời khuyên của những người tạo ra Postgres

  • "Những điều không nên làm" trên Postgres Wiki: Wiki chính thức của Postgres có danh sách "những điều không nên làm". Dù chưa hiểu hết, bạn vẫn có thể tránh được sai lầm.
  • Khuyến nghị: Dùng kiểu text để lưu mọi văn bản, dùng timestampz/time with time zone để lưu mọi dấu thời gian, và đặt tên bảng theo snake_case.

Những điểm kỳ lạ phổ biến của SQL

  • SQL không phân biệt chữ hoa chữ thường: Từ khóa SQL không phân biệt chữ hoa chữ thường. Điều này không chỉ riêng Postgres.
  • Tính chất đặc biệt của NULL: NULL trong SQL có nghĩa là "không biết", và khi kết hợp với hầu hết toán tử thì kết quả cũng là NULL. Có thể so sánh NULL bằng các toán tử như IS NULL, IS NOT NULL.

Làm cho psql hữu ích hơn

  • Cải thiện khả năng đọc đầu ra: Có thể cấu hình terminal pager để dễ xem các đầu ra dài. Có thể đặt less làm pager.
  • Làm rõ NULL dễ gây mơ hồ: Trong psql, có thể đặt chuỗi đại diện cho NULL để hiển thị rõ ràng hơn trong đầu ra.
  • Sử dụng tự động hoàn thành: psql hỗ trợ tự động hoàn thành, giúp nhập từ khóa SQL hoặc tên bảng dễ hơn.

Tác dụng của việc thêm chỉ mục

  • Định nghĩa chỉ mục: Chỉ mục là cấu trúc dữ liệu giúp truy vấn dữ liệu nhanh hơn.
  • Giới hạn của chỉ mục: Nếu cơ sở dữ liệu cục bộ gần như không có dòng nào thì chỉ mục có thể không hữu ích. Khi lập chỉ mục trên nhiều cột, thứ tự rất quan trọng.

Cách sử dụng JSONB

  • Ưu và nhược điểm của JSONB: Postgres cung cấp khả năng lưu trữ và truy vấn JSON hiệu quả, nhưng nếu dùng sai có thể làm giảm hiệu năng.
  • Giới hạn về cấu trúc của JSONB: Cột JSONB không đảm bảo cấu trúc, nên không tự mô tả rõ ràng như schema bảng tiêu chuẩn.

Các mẹo hữu ích khác

  • Vấn đề của transaction dài: Nếu transaction kéo dài quá lâu, nó có thể cản trở các client khác truy cập cơ sở dữ liệu.
  • Những tính năng mạnh mẽ của Postgres: Postgres mang lại các thế mạnh của cơ sở dữ liệu hướng tài liệu và cho phép lưu trữ, truy vấn dữ liệu hiệu quả thông qua JSONB.

2 bình luận

 
bbulbum 2024-11-19

Những điều không nên làm, chắc phải đọc thử một lần vào lúc nào đó.

 
GN⁺ 2024-11-13
Ý kiến trên Hacker News
  • Postgres phân biệt chữ hoa chữ thường, nhưng việc viết từ khóa bằng chữ in hoa trong truy vấn là để tăng khả năng đọc. Đây không phải yêu cầu bắt buộc, nhưng việc định dạng truy vấn để dễ nhìn hơn khi debug rất hữu ích

    • Tương tự như việc dọn dẹp mã trong các ngôn ngữ khác, thụt lề nhất quán giúp giảm thời gian đọc hiểu để có thể tập trung vào phần quan trọng
    • Nên tránh dùng chữ in hoa trong các định danh kiểu như actuallyUsingCaseInIdentifiers
  • Đây là lần đầu tiên biết đến mục wiki "Don't Do This", và nó rất hữu ích

  • Phần lớn nội dung không chỉ áp dụng riêng cho Postgres (ví dụ: sự kỳ quặc của null, thứ tự cột trong chỉ mục)

    • Ví dụ, cách null tương tác với chỉ mục và ràng buộc duy nhất cũng không hề trực quan trong MySQL
    • Khi bảng người dùng có cột email không cho phép null và cột tên người dùng cho phép null, nếu có ràng buộc duy nhất như (email, username) thì vẫn có thể chèn nhiều lần cùng một email với tên người dùng là null
  • Cần thận trọng với lời khuyên rằng phải chuẩn hóa dữ liệu

    • Tác giả nhắc đến 10 dạng chuẩn hóa khác nhau, nhưng đa số mọi người không cần dùng đến 7 trong số đó
  • Mong các lập trình viên quan tâm nhiều hơn đến việc chuẩn hóa và ngừng nhét mọi thứ vào cột JSON(b)

  • Từ "hành trình" bị dùng quá mức nên đọc trong blog thấy khá khó chịu

  • Phần mã trên di động rất bất tiện, gần như không thể cuộn được

  • Trong đặc tả JSON, null là một giá trị hằng, khác với NULL trong SQL

  • Thêm chỉ mục cũng có thể hoàn toàn không mang lại tác dụng gì

    • Có những phần trong triết lý thiết kế của Postgres quá cứng nhắc hoặc khó hiểu
    • Hy vọng các phiên bản tương lai sẽ hỗ trợ hint
  • Đọc những bài như thế này và hiểu được 90% khiến người viết cảm thấy tự hào về công việc mình từng đảm nhiệm