Đầu tiên, hstore
là một mô-đun đóng góp, chỉ cho phép bạn lưu trữ các cặp khóa => giá trị, trong đó khóa và giá trị chỉ có thể là text
s (tuy nhiên giá trị có thể là sql NULL
s cũng vậy).
Cả json
&jsonb
cho phép bạn lưu trữ giá trị JSON hợp lệ (được định nghĩa trong thông số kỹ thuật của nó).
F.ex. đây là các đại diện JSON hợp lệ:null
, true
, [1,false,"string",{"foo":"bar"}]
, {"foo":"bar","baz":[null]}
- hstore
chỉ là một tập hợp con nhỏ so với những gì JSON có khả năng (nhưng nếu bạn chỉ cần tập hợp con này thì không sao cả).
Sự khác biệt duy nhất giữa json
&jsonb
là nơi lưu trữ của họ:
-
json
được lưu trữ ở định dạng văn bản thuần túy, trong khi -
jsonb
được lưu trữ trong một số biểu diễn nhị phân
Có 3 hệ quả chính của việc này:
-
jsonb
thường chiếm nhiều dung lượng đĩa để lưu trữ hơnjson
(đôi khi không) -
jsonb
mất nhiều thời gian hơn để xây dựng từ biểu diễn đầu vào của nó so vớijson
-
json
hoạt động mất đáng kể nhiều thời gian hơnjsonb
(&phân tích cú pháp cũng cần được thực hiện mỗi khi bạn thực hiện một số thao tác tạijson
giá trị đã nhập)
Khi jsonb
sẽ có sẵn với một bản phát hành ổn định, sẽ có hai trường hợp sử dụng chính, khi bạn có thể dễ dàng chọn giữa chúng:
- Nếu bạn chỉ làm việc với biểu diễn JSON trong ứng dụng của mình, PostgreSQL chỉ được sử dụng để lưu trữ và truy xuất biểu diễn này, bạn nên sử dụng
json
. - Nếu bạn thực hiện nhiều thao tác trên giá trị JSON trong PostgreSQL hoặc sử dụng lập chỉ mục trên một số trường JSON, bạn nên sử dụng
jsonb
.