Podstawową różnicą pomiędzy json a jsonb jest sposób ich przechowywania. Typ json jest przechowywany jako tekst, natomiast typ jsonb w postaci binarnej. Typ, na jaki się zdecydujemy, json czy jsonb, ma wpływ na kilka czynników:
zapis danych w postaci jsonb trwa dłużej,
operacje wykonywane na typie jsonb trwają krócej, gdyż nie trzeba ich dodatkowo parsować.
Ze sposobu przechowywania wynikają kolejne różnice. Zobaczmy poniższy przykład:
Operator ? pozwala na sprawdzenie, czy json posiada określone pole. Przydatne, jeśli jsony nie trzymają się restrykcyjnie określonego schematu i obiekty mogą posiadać różne zestawy pól.
Poza tym typ jsonb wspiera kilka operatorów, które pozwalają na skuteczną modyfikację jsonów trzymanych w bazie.
|| - Pozwala złączyć ze sobą dwa obiekty typu jsonb w jeden nowy obiekt typu jsonb, przykładowo dodać nowe wartości do istniejącej tablicy.
- - Pozwala na usunięcie pary klucz-wartość lub też określonego elementu z tablicy, przykładowo ‘[“a”, “b”]’::jsonb - 1. Zwróci to tablicę zawierającą wyłącznie element “a”.
#- - Pozwala na usunięcie pola lub elementu znajdującego się pod określoną ścieżką.
Kiedy stosować typ json, a kiedy jsonb?
Jeżeli potrzebujemy jedynie zapisywać i odczytywać dane w formacie json i dalsze operacje na tych danych nie będą konieczne, to możemy zastosować typ json.
Kiedy jednak wykonujemy wiele operacji na jsonie albo potrzebujemy indexu na kluczu, wtedy lepszym wyborem będzie zastosowanie typu jsonb.
W dokumentacji PostgreSQL znajdziemy rekomendację używania typu jsonb. Pamiętajmy jednak o sytuacjach, w których typ json może się sprawdzić lepiej. Dobrym przykładem są systemy legacy, w których polegamy na kolejności zapisu danych.