Giả sử bạn đang nói về JSON thực tế, chặt chẽ (không có các dấu ngoặc kép như khóa chưa được trích dẫn) ...
json
không quá khác với text
. Nó không làm được gì nhiều ngoài việc xác thực JSON .
jsonb
là một điều khác biệt so với hai cấu trúc này:đó là một cấu trúc dữ liệu chính thức với định dạng nội bộ của riêng nó, có nhiều thao tác hơn có sẵn trong tìm kiếm. Ví dụ:json
không có =
có thể áp dụng (toán tử bình đẳng). jsonb
có. (text
cũng vậy, mặc dù nó khác nhau về ngữ nghĩa.)
Lập chỉ mục hợp lý hơn nhiều, nhưng nó phải được chuyển đổi qua lại trong quá trình đọc và ghi.
Do đó, jsonb
ở đây có vẻ không phải là một lựa chọn hợp lý.
... Vì vậy, chỉ còn một quyết định để đưa ra:
Bạn có muốn đảm bảo rằng cơ sở dữ liệu của mình chỉ chứa các giá trị JSON hợp lệ trong cột của bạn không? Ở cấp độ cơ sở dữ liệu? Hay bạn tin tưởng mọi ứng dụng khách của cơ sở dữ liệu đó (thường là ứng dụng máy chủ) chỉ cung cấp dữ liệu hợp lệ?
json
là một lựa chọn tương đối an toàn. Sử dụng text
về mặt lý thuyết có thể cải thiện hiệu suất bằng một biên độ không đáng kể do không có xác thực, nhưng bạn sẽ chỉ nhận được các con số cụ thể bằng cách đo điểm chuẩn. Nhưng nó không có biện pháp bảo vệ chống lại các giá trị không phải JSON và một lỗi ngẫu nhiên trong ứng dụng khách có thể không được chú ý. Kiểm tra có trách nhiệm!