Đầ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:
-
jsonbthường chiếm nhiều dung lượng đĩa để lưu trữ hơnjson(đôi khi không) -
jsonbmấ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 -
jsonhoạ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ạijsongiá 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.