JSON (JavaScript Object Notation) — sistemlər arasında məlumat mübadiləsi üçün məşhur data formatıdır. Yüngüldür, insan üçün oxunaqlıdır və obyektlər və ya massivlər kimi strukturlaşdırılmış dataları təqdim etmək üçün idealdır.
PostgreSQL-də JSON ilə işləmək üçün iki data tipi var:
JSON: datanı string kimi saxlayır. Bu, JSON-un tam mətn şəklində təqdimatıdır, daxili optimizasiya olmadan.JSONB: JSON-un binary təqdimatıdır. Oxuma, filtrasiya və emal üçün daha effektivdir, çünki PostgreSQL JSON-u əvvəlcədən parse edib saxlanmasını optimallaşdırır.
Niyə adətən JSONB seçilir? Çünki:
- Binary saxlanmaya görə sorğular üçün daha sürətlidir.
- İndeksləşdirilə bilir, bu da onu böyük datasetlər üçün ideal edir.
- Açarları sıralı saxlayır və təkrarlananları silir, bu da emalı asanlaşdırır.
JSON strukturuna nümunə:
{
"name": "Alice",
"age": 25,
"skills": ["SQL", "PostgreSQL", "JSONB"]
}
Niyə JSONB faydalıdır?
Yarı-strukturlaşdırılmış dataların saxlanması. Real həyatda məlumatlar tez-tez mürəkkəb obyektlər şəklində gəlir (məsələn, metadata, ayarlar, istifadəçi profilləri). JSONB bunları saxlamağa imkan verir, yüzlərlə cədvəl və əlaqə yaratmaqdan qaçmağa kömək edir.
Dəyişən strukturlu dataların modelləşdirilməsi. Obyektin strukturu tez-tez dəyişirsə (məsələn, sahələr əlavə və ya silinir), JSONB belə dataları çevik saxlamağa imkan verir.
API ilə işləmək. Bir çox web tətbiqlər məlumatı JSON formatında göndərir. Sorğuları çevirməyə ehtiyac olmadan onları "olduğu kimi" saxlamaq və birbaşa işləmək mümkündür.
JSONB ilə cədvəl yaratmaq
Gəlin praktikadan başlayaq! Təsəvvür et ki, istifadəçi profillərini saxlamaq üçün database yaradırıq.
profile sütunu bütün əlavə məlumatı (məsələn, yaş, maraqlar, kontaktlar) JSON formatında saxlayacaq. Bu, istifadəçidən istifadəçiyə data strukturu dəyişəndə çox rahatdır.
| id | name - VARCHAR(100) | profile - JSONB |
|---|---|---|
| 1 | Alice | {"age": 25, "skills": ["SQL", "PostgreSQL", "JSONB"], "location": "New York"} |
| 2 | Bob | {"age": 30, "interests": ["hiking", "photography"], "location": "Denver"} |
| 3 | Charlie | {"email": "charlie@example.com", "verified": true} |
| 4 | Diana | {"age": 22, "skills": ["Python"], "bio": "Data enthusiast", "location": "Berlin"} |
| 5 | Eve | {"age": 28, "skills": [], "preferences": {"theme": "dark", "notifications": false}} |
JSON datanı string kimi əlavə etmək olar. PostgreSQL onu avtomatik olaraq JSONB formatına çevirir.
JSONB-dən data çıxarmaq
Artıq datamız var, indi isə onları necə çıxarmaq olar, baxaq. PostgreSQL JSONB ilə işləmək üçün bir çox operator təqdim edir.
Sahənin dəyərinə çıxış
-> operatorundan istifadə edərək sahənin dəyərini ala bilərik:
-- İstifadəçinin yaşını göstəririk
SELECT profile->'age' AS age FROM users;
Dəyəri mətnə çevirmək
->> operatoru dəyəri string kimi çıxarmağa imkan verir:
-- İstifadəçinin yaşadığı yeri göstəririk
SELECT profile->>'location' AS location FROM users;
JSONB ilə datanın filtrasiyası
JSONB-nin gücü filtrasiya ilə sorğularda ortaya çıxır. JSON ilə işləmək üçün standart SQL operatorlarından istifadə edə bilərik.
Açar üzrə filtrasiya nümunəsi:
-- Yaşadığı yer "New York" olan istifadəçiləri tap
SELECT * FROM users
WHERE profile->>'location' = 'New York';
Massivdə axtarış
JSON massivləri dəstəkləyir və PostgreSQL orada dəyərləri tapmağı bacarır:
-- SQL bilən istifadəçiləri tap
SELECT * FROM users
WHERE 'SQL' = ANY(jsonb_array_elements_text(profile->'skills'));
jsonb_array_elements_text funksiyası massiv elementlərini string-ə çevirir ki, onları müqayisə etmək mümkün olsun.
Daha qısa variant da var, @> operatoru ilə:
-- SQL bilən istifadəçiləri tap
SELECT * FROM users
WHERE profile->'skills' @> '["SQL"]';
JSON ilə işləmək üçün funksiyalar və üsullar barədə daha ətraflı sonra danışacağıq, vaxtı gələndə :P
Qısa xülasə: JSONB nə vaxt istifadə olunmalıdır
JSONB aşağıdakılar üçün əladır:
- Mürəkkəb strukturlaşdırılmış dataların saxlanması.
- Xarici API-lərdən gələn dataların işlənməsi.
- Obyektin strukturu dəyişəndə.
Amma unutma ki, JSONB-dən həddindən artıq istifadə indeksləşdirməni və database idarəsini çətinləşdirə bilər. Əgər data strukturu sabitdirsə, relasional model daha yaxşıdır.
GO TO FULL VERSION