JSONB vai JSON: milloin kumpaakin käytetään
Valitse oikea tallennusmuoto JSONin (teksti, säilyttää tyhjätilan) ja JSONB:n (binäärinen, indeksoitava, avaimet deduplikoitu) välillä.
JSONB vai JSON: milloin kumpaakin käytetään on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.
PostgreSQL:n kaksi JSON-tyyppiä
JSON— tallentaa kirjoittamanne tarkan tekstinJSONB— hajotettu binäärimuoto, jossa avaimet poistetaan duplikaateista ja joka voidaan indeksoida
JSON: tekstin tallennus
JSON säilyttää tyhjeet, avainten järjestyksen ja päällekkäiset avaimet. Se jäsennetään uudelleen jokaisella lukukerralla. GIN-indeksointia ei ole. Se on lähes koskaan väärä valinta uuteen koodiin.
INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs; -- whatever the parser picksJSONB: binäärinen ja indeksoitava
JSONB:
- Tallennetaan hajotettuna → uudelleenjäsennystä ei tarvita luettaessa
- Päällekkäiset avaimet yhdistetään (viimeinen voittaa)
- Avainten järjestystä ei säilytetä
- Tukee GIN-indeksointia
- Tukee monipuolisia polkuoperaattoreita
JSONB-esimerkki
Yksinkertainen tapahtumataulu:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
data JSONB NOT NULL
);
INSERT INTO events (data) VALUES
('{"type":"login","user_id":42,"ip":"1.2.3.4"}');Polkuoperaattorit
JSONB:llä on monipuoliset operaattorit (joita käsitellään seuraavalla oppitunnilla):
SELECT data->'user_id' FROM events; -- → JSONB
SELECT data->>'user_id' FROM events; -- → TEXT
SELECT data #>> '{user,name}' FROM events; -- nested text pathSisältäminen
Hyödyllisin JSONB-operaattori: @> (sisältää).
SELECT * FROM events WHERE data @> '{"type":"login"}';
-- Combined with a GIN index, this is fast even on billions of rows.JSONB:n yhtäsuuruus
Kaksi JSONB-arvoa ovat yhtä suuria, jos niiden sisältö täsmää — avainten järjestyksellä ei ole merkitystä:
SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB; -- TRUETyyppien välinen muunnos
Muuntaa voi vapaasti:
SELECT '{"a":1}'::JSONB->'a'; -- 1 (as JSONB)
SELECT ('{"a":1}'::JSONB)->>'a'; -- '1' (as TEXT)
SELECT ('{"a":1}'::JSONB)->'a'::INT; -- 1 (as INT after extraction)Milloin JSONB:tä EI pidä käyttää
Jos tiedolla on kiinteä rakenne, käyttäkää oikeita sarakkeita:
- Nopeammat kyselyt (asiakirjaa ei jäsennetä jokaisella rivillä)
- Vahvat tyypit ja rajoitteet
- Pienempi tallennustilan tarve
- Paremmat tilastot
JSONB on parhaimmillaan, kun rakenne vaihtelee tai kehittyy nopeasti.
Hybridirakenteen suunnittelu
Hyvä käytäntö: käyttäkää vakaille kentille rakenteisia sarakkeita ja vaihteleville lisätiedoille JSONB:tä:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
event_type TEXT NOT NULL,
user_id BIGINT,
extra JSONB NOT NULL DEFAULT '{}'::JSONB
);Validointi
JSONB tallentaa minkä tahansa kelvollisen JSON:n. Rakenteiset rajoitteet voitte toteuttaa CHECK-rajoitteilla tai sovelluskerroksen skeeman valvonnalla:
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type');Kertaus
JSONB > JSON lähes kaikissa tuotantotapauksissa.
- JSONB: binäärinen, indeksoitu ja nopeat polut
- JSON: vain tekstin mukainen tallennus ja palautus
- Käyttäkää JSONB:tä vaihteleviin rakenteisiin ja oikeita sarakkeita kiinteisiin rakenteisiin
Pikatarkistus
Suunnittelette uutta taulua käyttäjien lataamien JSON-asiakirjojen tallentamiseen ja aiotte tehdä niistä sisältöön perustuvia hakuja. JSON vai JSONB?
Opi SQL tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 46
- Oppitunnit
- 183
Usein kysytyt kysymykset
Onko oppitunti ”JSONB vai JSON: milloin kumpaakin käytetään” ilmainen?
Kyllä – oppitunnin ”JSONB vai JSON: milloin kumpaakin käytetään” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”JSONB vai JSON: milloin kumpaakin käytetään”?
Valitse oikea tallennusmuoto JSONin (teksti, säilyttää tyhjätilan) ja JSONB:n (binäärinen, indeksoitava, avaimet deduplikoitu) välillä. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”JSONB vai JSON: milloin kumpaakin käytetään”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?
Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- JSONB vai JSON: milloin kumpaakin käytetään
- Polkuoperaattorit: -> ->> @>
- JSONB:n indeksointi GIN-indekseillä
- Tietomallinnus: milloin JSONB voittaa normalisoinnin