JSONB vs JSON: Kapan Menggunakan Masing-Masing
Pilih antara JSON (teks, mempertahankan spasi) dan JSONB (biner, dapat diindeks, kunci terduplikasi dihapus) untuk penyimpanan yang tepat
JSONB vs JSON: Kapan Menggunakan Masing-Masing adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Dua Jenis JSON di PostgreSQL
JSON— menyimpan teks persis seperti yang Anda masukkanJSONB— format biner terurai, kunci tanpa duplikat, dan dapat diindeks
JSON: Penyimpanan Teks
JSON mempertahankan spasi kosong, urutan kunci, dan kunci duplikat. Data diurai ulang pada setiap pembacaan. Tidak mendukung pengindeksan GIN. Hampir tidak pernah menjadi pilihan yang tepat untuk kode baru.
INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs; -- whatever the parser picksJSONB: Biner dan Dapat Diindeks
JSONB:
- Disimpan dalam bentuk terurai → tidak perlu diurai ulang saat dibaca
- Kunci duplikat digabungkan (nilai terakhir yang berlaku)
- Urutan kunci tidak dipertahankan
- Mendukung pengindeksan GIN
- Mendukung operator jalur yang kaya
Contoh JSONB
Tabel peristiwa sederhana:
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"}');Operator Jalur
JSONB memiliki operator yang kaya (dibahas dalam pelajaran berikutnya):
SELECT data->'user_id' FROM events; -- → JSONB
SELECT data->>'user_id' FROM events; -- → TEXT
SELECT data #>> '{user,name}' FROM events; -- nested text pathPencakupan
Operator JSONB yang paling berguna: @> (mencakup).
SELECT * FROM events WHERE data @> '{"type":"login"}';
-- Combined with a GIN index, this is fast even on billions of rows.Kesetaraan JSONB
Dua nilai JSONB dianggap sama jika isinya cocok — urutan kunci tidak berpengaruh:
SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB; -- TRUEKonversi Antarjenis
Lakukan konversi dengan bebas:
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)Kapan Tidak Menggunakan JSONB
Jika data memiliki bentuk yang tetap, gunakan kolom nyata:
- Kueri lebih cepat (tidak perlu mengurai dokumen pada setiap baris)
- Tipe dan kendala yang kuat
- Penyimpanan lebih kecil
- Statistik lebih baik
JSONB unggul ketika bentuk data bervariasi atau berubah dengan cepat.
Pemodelan Hibrida
Praktik terbaik: gunakan kolom terstruktur untuk bidang yang stabil dan JSONB untuk data tambahan yang bervariasi:
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
);Validasi
JSONB menyimpan JSON valid apa pun. Untuk kendala terstruktur, gunakan kendala CHECK atau penegakan skema pada lapisan aplikasi:
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type');Ringkasan
JSONB > JSON untuk hampir semua kasus produksi.
- JSONB: biner, terindeks, jalur cepat
- JSON: hanya perjalanan pulang-pergi dalam bentuk teks
- Gunakan JSONB untuk bentuk data yang bervariasi; gunakan kolom nyata untuk bentuk data yang tetap
Pemeriksaan Singkat
Anda sedang merancang tabel baru untuk menyimpan dokumen JSON yang diunggah pengguna dan akan dikuerikan berdasarkan isinya. JSON atau JSONB?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “JSONB vs JSON: Kapan Menggunakan Masing-Masing” gratis?
Ya — teks lengkap “JSONB vs JSON: Kapan Menggunakan Masing-Masing” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “JSONB vs JSON: Kapan Menggunakan Masing-Masing”?
Pilih antara JSON (teks, mempertahankan spasi) dan JSONB (biner, dapat diindeks, kunci terduplikasi dihapus) untuk penyimpanan yang tepat Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “JSONB vs JSON: Kapan Menggunakan Masing-Masing” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- JSONB vs JSON: Kapan Menggunakan Masing-Masing
- Operator Jalur: -> ->> @>
- Mengindeks JSONB dengan GIN
- Pemodelan: Kapan JSONB Lebih Unggul daripada Normalisasi